ROS与语音交互教程-ROS下科大讯飞智能语音助手
ROS与语音交互教程-ROS下科大讯飞智能语音助手
说明
- 介绍让机器人可以与人进行简单的中文对话
- 在tts_subscribe.cpp代码文件的基础上修改
步骤
- 将tts_subscribe.cpp命名为void_assistant.cpp
- 编辑void_assistant.cpp
void voiceWordsCallback(const std_msgs::String::ConstPtr& msg)
{
... ...
std::cout<<"I heard :"<<msg->data.c_str()<<std::endl;
std::string dataString = msg->data;
if(dataString.compare("你是谁?") == 0)
{
char nameString[40] = "我是你的语音小助手";
text = nameString;
std::cout<<text<<std::endl;
}
else if(dataString.compare("你可以做什么?") == 0)
{
char helpString[40] = "你可以问我现在时间";
text = helpString;
std::cout<<text<<std::endl;
}
else if(dataString.compare("现在时间。") == 0)
{
//获取当前时间
struct tm *ptm;
long ts;
ts = time(NULL);
ptm = localtime(&ts);
std::string string = "现在时间" + to_string(ptm-> tm_hour) + "点" + to_string(ptm-> tm_min) + "分";
char timeString[40];
string.copy(timeString, sizeof(string), 0);
text = timeString;
std::cout<<text<<std::endl;
}
else
{
text = msg->data.c_str();
}
/* 文本合成 */
printf("开始合成 ...\n");
ret = text_to_speech(text, filename, session_begin_params);
if (MSP_SUCCESS != ret)
{
printf("text_to_speech failed, error code: %d.\n", ret);
}
printf("合成完毕\n");
... ...
}
代码解释:
添加了一系列if,else语句来判断中文语音输入的含义。当我们说出“你是谁”“你可以做什么”“现在时间”等问题时,机器人可以获取系统的当前时间,并且回答问题
修改CMakeList.txt
add_executable(voice_assistant src/voice_assistant.cpp)
target_link_libraries(
voice_assistant
${catkin_LIBRARIES}
libmsc.so -ldl -pthread
)
- 编译:
catkin_make
- 执行,测试
roscore
rosrun robot_voice iat_publish
rosrun robot_voice voice_assistant
rostopic pub /voiceWakeup std_msgs/String "data: 'any string'"
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号