< >
Home » ROS与语音交互教程 » ROS与语音交互教程-ROS下科大讯飞智能语音助手

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'"

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros与语音交互教程, ros 语音, 科大讯飞