Voice Command Module
Last updated
Last updated
Using this module, you can control the Petoi robot to do various skills through voice without using wake words. Currently, the module supports 40 fixed voice commands in two languages (English and Chinese) and ten customized commands by recording any sound clips.
The module can be installed on NyBoard via the Grove interface.
Connecting to the NyBoard with wire as shown in the following picture, connect to the NyBoard Grove interface, which includes D8, D9:
You can use the Firmware Uploader within the Petoi Desktop App.
You can use Arduino IDE to upload and modify the source code.
The module code is integrated into the OpenCat project. Uncomment the line #define VOICE
in the OpenCat.ino, as shown in the figure below. Then, use Arduino IDE to upload the sketch to the robot's main board. The robot will work in Voice mode. This sketch will allow the robot to behave under voice commands.
It is built into the BiBoard V0's extension hat as follows:
Petoi Desktop App
You can use the Firmware Uploader within the Petoi Desktop App.
Please select the correct Product type, Borard version, and Serial port. The mode should be Standard, so press the Upgrade the Firmware button. for example, Bittle, BiBoard_V0_2, COM5 as follows:
Arduino IDE
You can use Arduino IDE to upload the sketch(OpenCatEsp32.ino).
Use the latest OpenCatESP32 code to finish the setup. For example, to modify the code for Bittle as shown below:
After uploading, the firmware is in Voice mode by default. If you need to switch, please open the serial monitor and input the serial command XA
to switch to Voice mode.
Switch to English
You can speak Bing-Bing or
Create a mobile app command called English and use the code: X65,97
Switch to Chinese.
Speak Di-Di to
Create a mobile app command called Chinese and use the code: X65,98
To turn on
Speak Play sound
Create a mobile app command called "Enable voice" and use the code: X65,99
To turn off
Speak Be quiet
Create a mobile app command called Disable voice and use the code: X65,100
You can refer to the list of available voice commands shown below:
See this doc for the latest version.
To avoid inadvertently triggering the robot to respond to voice commands, you can say Be quiet to the robot to disable the voice module, such as when talking with others.
If the above voice commands don't take effect in English mode, try to use the mobile app and create a new button with the code: X65,100
, or input XAd
in the serial monitor to disable the voice module.
Use the mobile app and create a new button with the code: X65,99
, or input XAc
in the serial monitor to enable the voice module.
The voice command Climb-up is a challenge for you. You can design the behavior by yourself. Then, you can post it on the Petoi Forum Challenge or email support@petoi.com. We may adopt it in our official firmware and send you a gift!
For example, you can share your behavior like this:
In some cases, the voice module may not respond to your voice. Please check the following:
1. On Bittle X, the dial switch on the bottom of the BiBoard extension hat is dialed to Voice Command.
2. Say Play sound to check if the robot responds with Do-Re-Mi. Sometimes, the voice may be accidentally set to muted mode triggered by Be Quiet.
3. If the module doesn't make any sound with Play sound, say Bing-Bing to switch to English mode. You may try different tones and speeds to say Bing-Bing. The robot should respond with Switch English if not in English mode. It won't react with anything if it's already in English.
4. If the voice module still doesn't make any sound, you can try to reset it in our software tools.
From version 1.2.0 of the mobile app, you can create a new button with the compound code:
^X65,99;!1000;X65,98;!1000;X65,97
To reset the voice module to English mode.
X65,99
, or input XAc
in the serial monitor enables the voice module.
X65,97
or input XAa
in the serial monitor is equivalent to saying Bing-Bing, but excludes the chance that the voice is not recognized. Then you can try to say Play sound again.
From version 1.2.1, you can use the debugger tool to reset the voice module.
The above steps validate that the voice module is working. It's powered separately from the motion unit and should work regardless of the robot's status.
Next, if you say Hello, the robot should wave its hand and validate that the complete reaction loop is good. Then, you can try other voice commands.
Try powering off the mainboard by disconnecting the USB data cable, long-pressing the battery's button, and then re-powering the mainboard.
If the above steps cannot fix the problem, contact support@petoi.com for help.
When the robot works in English mode, you can speak Start learning (or input the serial command XAe in the serial monitor) into the custom voice command mode and record your voice commands in order.
If the module is not in English mode, you can speak Bing-Bing (or input the serial command XAa
in the serial monitor) to switch to English mode.
You can record up to 10 voice commands.
To exit the custom voice command mode in the middle, you can speak Stop learning (or input the serial command XAf in the serial monitor).
After exiting the custom voice command mode, speak one of the recorded voice commands to trigger the reaction.
Speak Clear the learning data to delete all the recordings at once (you cannot delete a specific recording).
There are ten skill strings as custom replies already defined (but only the first five can see the actual reaction of the robot because they are predefined serial commands ) in the voice.h
:
The response actions (kpu1
means single-handed pushups, kmw
means moonwalk) are already defined in the program.
Other serial commands are also supported as responses, such as joint movements(e.g. m0 80 0 -80
means shaking the head left and right) and playing a melody(e.g. b14,8,14,8,21,8,21,8,23,8,23,8,21,4
)
To use these custom replies above, you need to enter the custom voice command mode, record ten voice commands (such as Single-handed Pushup, Shake Head, Moonwalk, Twinkle Star), and then exit the custom voice command mode.
If you have recorded a voice command and the corresponding custom reply is not a predefined serial command((e.g.,5th
), there is no actual demonstration effect; it only prints a simple message on the serial monitor when you speak the corresponding voice command.
Convert the voice command collected by the microphone in the module into a serial command.
Send the serial command to the mainboard MCU through the soft serial port Serial2.
After receiving the serial command, the MCU parses it into the corresponding skill command, and finally, the reaction module, according to the skill command, controls the robot to respond accordingly.
Upload the demo sketch testVoiceCommander.ino, and you can see every serial command that is sent to MCU(including the custom voice command if you have recorded it)
You can open the serial monitor to check the raw return values of every voice command.
After you speak the voice command to the robot, the Returned value (X A 11
or X A 21 kup
) is the corresponding serial command sent to the mainboard MCU. The third number(11 or 21) is an invisible character. To understand it, we convert it to a numeric value and print it out.
The test sketch is in the OpenCat repository on GitHub (specific path: OpenCat/ModuleTests/testVoiceCommander). You can visit our GitHub repository https://github.com/PetoiCamp/OpenCat to download the complete code, as shown in the following picture:
There are seven related serial commands for configuration; you can input them into the serial monitor.
XAa
X65,97
Switch to English
XAb
X65,98
Switch to Chinese
XAc
X65,99
Turn on the reply tone and enable reaction
XAd
X65,100
Turn off the reply tone and disable reaction
XAe
X65,101
Enter custom voice command mode
XAf
X65,102
Exit custom voice command mode
XAg
X65,103
Delete all the custom voice commands
After inputting the command above in the message box, press Enter to send the command to the robot.
For the robot in Voice mode, to improve the utilization rate of custom voice control commands, you can modify the last six skill strings to the skill names with actual action responses.
Using the task queue to create a sequence of motions, please refer to the source code in the voice.h
as below:
tQueue is the task queue defined in OpenCat.h; using the method "addTask" of this object, the robot can do some simple skills sequentially as a custom voice command response.
Using the Skill Composer and binding the customized voice command to the new skills
Use SkillComposer to design new skills and then export them into InstinctX.h
Modify voice.h to bind the customized voice command to the new skills: insert 'k'+the new skill name into the string variable(e.g.voice1[]
If you want to bind the first customized voice command )
You can say Play sound to the robot to enable the voice module.