构建语音控制机器人应用指南
1. 块编程基础
在设计好应用的用户界面(UI)后,点击“Design”按钮旁边的“Blocks”按钮,进入块编程界面。在块编程区域的左侧,能看到“Screen1”,它包含了所有拖到屏幕上的组件(包括可见和不可见的)。每个组件有三种主要类型的块:主块(Main block)、中间块(Intermediate block)和最终块(Final block)。
-
主块
:类似于“when”循环,指示当某事件发生时要执行的动作。它总是与中间块相连,不能直接连接最终块。主块有一个下拉菜单,可在同类型的多个组件中进行选择。例如,若有多个按钮,可从下拉列表中选择特定的按钮。
-
中间块
:有一个输入插槽和一个输出插槽。输入插槽连接主块,输出插槽连接最终块。中间块有两个下拉菜单,第一个用于选择同类型的组件,第二个用于选择组件的属性。如对于“Label1”,可选择“Text”“BackgroundColor”“Width”等属性。
-
最终块
:连接到中间块,也有两个下拉菜单,用于选择特定组件及其具体属性。
2. Talking Pi 程序实现
Talking Pi 程序的逻辑很简单:按下“Button1”时,“Label1”显示“Textbox1”中输入的文本,“TextToSpeech1”读出该文本。具体步骤如下:
1. 点击“Button1”组件,选择“when Button1.Click”主块。
2. 从“Label1”组件中选择“Label1.Text”块,因为要在点击“Button1”时更改“Label1”的文本。
3. 将“Label1.Text”块拖到“Button1.Click”块内,连接两个块,连接成功会听到点击声。
4. 从“TextBox1”组件中选择“TextBox1.Text”块。
5. 将“TextBox1.Text”块附加到“Label1.Text”块上,这样按下按钮时,标签将显示文本框中的文本。
6. 点击“TextToSpeech1”组件,选择“call TextToSpeech1.Speak”块。
7. 将该块连接到“Label1.Text”块下方,在消息插槽中连接“TextBox1.Text”最终块,这样文本框中的文本将由“TextToSpeech1”读出。
完成块程序设计后,可通过以下两种方式构建并运行应用:
| 构建方式 | 操作说明 |
| ---- | ---- |
| App (provide QR Code for .apk) | 生成二维码,用安卓智能手机的 QR 扫描应用扫描,扫描后应用的 .apk 文件将下载到手机,安装该文件即可测试应用输出。 |
| App (save .apk to my computer) | 生成并下载 .apk 文件到计算机,需将文件从计算机传输到智能手机并安装。 |
此外,还可从安卓应用商店下载 MIT AI2 伴侣应用,实时测试应用。安装后,点击“Scan QR code”按钮或输入六位数代码,点击“Connect with code”按钮进行连接。要生成二维码或六位数代码,点击“Connect”,选择“AI Companion”。
还能通过点击“Projects”,选择“Export selected project (.aia) to my computer”导出应用的 .aia 文件;选择“Import project (.aia) from my computer”导入 .aia 文件。可从 GitHub 仓库的 Chapter09 文件夹下载 Talking Pi 和语音控制机器人应用的 .aia 文件。
3. 创建语音控制机器人应用
创建语音控制机器人应用主要涉及三个部分:
- 语音识别应用:识别语音,识别到特定单词时将数据作为文本发送。例如,说“forward”,应用会向机器人发送“F”。
- 蓝牙连接:建立智能手机蓝牙与树莓派(RPi)蓝牙的有效连接。
- RPi 机器人程序:解码从智能手机传输的文本信息,相应地移动机器人。例如,接收到文本“F”,编写程序使机器人向前移动。
创建“VoiceControlBot”应用,点击“Projects”,选择“Start new Project”,命名为“VoiceControlBot”,点击“OK”。
4. 设计语音控制机器人应用界面
设计语音控制机器人应用界面很简单,最终应用界面将使用以下组件:
-
ListPicker
:显示连接到智能手机的蓝牙设备列表。
-
Speech - recognizer
:监听用户说话内容。
-
Speech - recognizer button
:点击该按钮,调用语音识别组件监听用户说话。
-
Disconnect button
:用于断开智能手机与 RPi 的连接。
-
Label
:显示用户说出的文本。
-
Bluetooth client
:激活智能手机的蓝牙连接。
-
Horizontal or vertical arrangement
:使用一个水平排列组件将语音识别按钮正确定位在屏幕中心。
添加和自定义组件的步骤如下:
1. 将“ListPicker”(非“ListView”)组件拖到屏幕内。
2. 拖入一个“Horizontal Arrangement”,在其中拖入一个按钮。
3. 在“Horizontal Arrangement”下方,拖入一个“Label”和另一个按钮。
4. 选择“ListPicker1”,将背景颜色改为绿色,宽度设置为“Fill parent”,文本改为“CONNECT”。
5. 选择“HorizontalArrangement1”,将高度和宽度都设置为“Fill parent”,将“AlignHorizontal”和“AlignVertical”设置为“Center”,使按钮位于水平排列组件中心。
6. 选择按钮,点击“Rename”按钮,将其重命名为“SRButton”(SR 代表语音识别)。
7. 为“SRButton”添加麦克风图像作为背景。从 GitHub 仓库的 Chapter09 文件夹下载图像,将按钮的宽度和高度改为 200 像素,使其为正方形,移除文本框中的默认文本,点击“Image”选项,选择麦克风图像。
8. 选择“Label1”,将字体大小改为 20,文本改为“WORD SPOKEN”。
9. 选择“Screen1”,将“AlignHorizontal”设置为“Center”,使“Label1”水平居中。
10. 选择“Button2”,重命名为“DeleteButton”,将背景颜色改为红色,宽度设置为“Fill parent”,文本改为“DELETE”,文本颜色改为白色。
11. 设计好 UI 后,将“BluetoothClient”和“SpeechRecognizer”组件拖到屏幕上,“BluetoothClient”在“Connectivity”选项中,“SpeechRecognizer”组件在“Media”选项中。
graph TD;
A[开始设计应用] --> B[添加 ListPicker 组件];
B --> C[添加 Horizontal Arrangement 及按钮];
C --> D[添加 Label 和另一个按钮];
D --> E[自定义 ListPicker1];
E --> F[自定义 HorizontalArrangement1];
F --> G[重命名按钮为 SRButton];
G --> H[为 SRButton 添加背景图像];
H --> I[自定义 Label1];
I --> J[设置 Label1 水平居中];
J --> K[重命名 Button2 为 DeleteButton 并自定义];
K --> L[添加 BluetoothClient 和 SpeechRecognizer 组件];
构建语音控制机器人应用指南(续)
5. 语音控制机器人块编程
设计好应用后,接下来对语音控制机器人应用进行编程,具体步骤如下:
1. 使用“ListPicker1.BeforePicking”块,将连接到智能手机的蓝牙设备以列表项形式显示。将此块连接到“ListPicker1.Elements”块,再从“BluetoothClient1”组件中,将“BluetoothClient1.AddressAndNames”块连接到“ListPicker1.Elements”块。“ListPicker1.Elements”代表列表中的元素,即与智能手机蓝牙配对的设备的地址和名称。若从列表中选择一个元素,“ListPicker1.AfterPicking”块将起作用。
2. “ListPicker1.AfterPicking”块用于连接从列表中选择的蓝牙设备的地址和名称。
3. 从“SRbutton”中选择“SRbutton.Click”块,再从“SpeechRecognizer1”块中选择“SpeechRecognizer1.GetText”,并将其连接到“SRbutton.Click”块。“SpeechRecognizer1.GetText”块将激活谷歌语音识别器,尝试识别用户所说的内容,并将语音转换为文本。
4. 使用“SpeechRecognizer1.AfterGettingText”块,将识别出的语音文本显示在标签中。
5. 使用“if…then”块(在“Control”选项中)判断识别出的单词是否为“forward”“back”“left”“right”或“stop”。若检测到这些单词,使用“BluetoothClient”组件向 RPi 机器人发送相应的字母。
- 选择“if…then”块,将其放置在“SpeechRecognizer1.AfterGettingText”块内的“Label1.Text”块下方。
- 使用“Logic”选项中的比较运算符来理解识别出的单词。将比较块连接到“if…then”块的“if”插槽。
- 在比较运算符的左插槽中连接“SpeechRecognizer1.Result”块。
- 在比较运算符的右插槽中连接一个空文本字符串框(在“Text”选项中),并在其中输入“forward”。若“SpeechRecognizer1.Result”等于“forward”,则在“then”插槽中添加“BluetoothClient1.SendText”块,并连接一个文本框,输入字母“F”。即当检测到“forward”时,将字符“F”从智能手机蓝牙发送到 RPi 蓝牙。
- 右键单击“if…then”块并复制,为“back”“left”“right”和“stop”创建四个额外的块。检测到“back”时发送“B”,检测到“left”时发送“L”,检测到“right”时发送“R”,检测到“stop”时发送“S”。
6. 将“BluetoothClient1.Disconnect”块连接到“Disconnectbutton”,按下该按钮时断开蓝牙连接。
graph TD;
A[开始编程] --> B[使用 ListPicker1.BeforePicking 块];
B --> C[连接 ListPicker1.Elements 块];
C --> D[连接 BluetoothClient1.AddressAndNames 块];
D --> E[ListPicker1.AfterPicking 块连接蓝牙];
E --> F[选择 SRbutton.Click 块];
F --> G[连接 SpeechRecognizer1.GetText 块];
G --> H[使用 SpeechRecognizer1.AfterGettingText 块显示文本];
H --> I[使用 if...then 块判断单词];
I --> J[选择 if...then 块放置位置];
J --> K[使用比较运算符];
K --> L[连接比较块到 if 插槽];
L --> M[连接 SpeechRecognizer1.Result 块到左插槽];
M --> N[连接文本字符串框到右插槽并输入单词];
N --> O[添加 BluetoothClient1.SendText 块及文本框];
O --> P[复制 if...then 块处理其他单词];
P --> Q[连接 BluetoothClient1.Disconnect 块到 Disconnectbutton];
6. 安卓智能手机与 RPi 蓝牙配对
使用终端窗口将安卓智能手机的蓝牙与 RPi 的蓝牙进行配对,具体步骤如下:
1. 安装蓝牙包,在终端窗口输入命令:
sudo apt-get install libbluetooth-dev
- 打开“bluetooth.service”文件并进行修改。输入命令:
sudo nano /lib/systemd/system/bluetooth.service
在“/bluetoothd”后输入“-C”,开启 RPi 蓝牙的兼容模式。按“Ctrl + O”,然后按“Enter”保存文件,再按“Ctrl + X”退出文件。使用以下命令重启 RPi:
sudo reboot
- RPi 重启后,输入命令检查蓝牙状态:
sudo service bluetooth status
此时应看到“-C”在“bluetoothhd”旁边。若输入命令后看到“lines 1 - 19/19(END)”且无法在终端窗口输入新命令,关闭并重新打开终端窗口。
4. 使 RPi 的蓝牙可被发现以进行配对。输入命令:
sudo bluetoothctl
此时将看到蓝牙的媒体访问控制(MAC)地址及其名称,RPi 蓝牙的默认名称为“raspberrypi”。
5. 打开安卓设备的蓝牙,点击“Pair new device”选项。
6. 依次输入以下五个命令,使 RPi 的蓝牙进入可发现模式:
power on
pairable on
discoverable on
agent on
default-agent
- 在“Available devices”选项中应看到“raspberrypi”,选择该选项。
- 点击“PAIR”按钮,在终端窗口会看到询问是否与智能手机蓝牙配对的消息,输入“yes”并按“Enter”。
- 可能会看到询问是否接受配对请求的小弹出框,点击“OK”。若看到连接失败的弹出框,忽略该错误并点击“OK”。
| 步骤 | 操作 | 命令 |
|---|---|---|
| 1 | 安装蓝牙包 |
sudo apt-get install libbluetooth-dev
|
| 2 | 打开并修改文件 |
sudo nano /lib/systemd/system/bluetooth.service
|
| 3 | 保存并退出文件,重启 RPi |
sudo reboot
|
| 4 | 检查蓝牙状态 |
sudo service bluetooth status
|
| 5 | 进入蓝牙控制 |
sudo bluetoothctl
|
| 6 | 打开安卓蓝牙并选择配对 | - |
| 7 | 使 RPi 蓝牙可发现 |
power on
pairable on
discoverable on
agent on
default-agent
|
| 8 | 选择 RPi 蓝牙并配对 | - |
| 9 | 确认配对 | - |
通过以上步骤,就可以完成语音控制机器人应用的设计、编程以及智能手机与 RPi 的蓝牙配对,实现语音控制机器人的功能。
超级会员免费看
1327

被折叠的 条评论
为什么被折叠?



