# xbot各功能包ROS接口详解 本章着重介绍在xbot功能包合集中的各程序包的ROS接口,便于用户调用、查看以及程序集成。 ## 各ROS包主要功能 该软件包集包含7个ROS软件子包。 | ROS软件包 | 主要功能 | | ---------------------- | ---------------------------------------- | | xbot_bringup | 驱动程序启动入口,包含多个launch文件 | | xbot_driver | 底层通讯驱动,收发数据 | | xbot_node | ROS数据封装与分发,运动解算 | | xbot_msgs | 软件包集所用到的所有ROS消息类型 | | xbot_safety_controller | 机器人安全控制程序 | | xbot_description | ROS建模与urdf描述文件 | | xbot_tools | 用于调试、开发以及运行过程的一些工具软件 | | xbot_face | 人脸识别程序 | | xbot_navi | SLAM、导航规划程序 | | xbot_talker | 机器人语音交互和对话程序 | ## 单独驱动底盘、摄像头或雷达 ### 驱动机器人底盘 如果你不想启动那么多功能,只想启动XBot-U机器人的部分功能,您也可以手动输入下面命令来启动XBot。 ``` roslaunch xbot_bringup xbot.launch ``` 该脚本所驱动起来的传感器包括机器人电机控制器,电机码盘,超声波传感器,红外传感器,电压电流检测器等。xbot.launch脚本所启动的功能相比xbot-u.launch脚本要少些,主要集中在机器人的运动控制方面。 启动该脚本后,你将在终端上看到以下内容,表示脚本启动成功: r![img](imgs/wpsKcqrhp.jpg) ### 驱动摄像头 XBot-U机器人配带有Intel RealSense 摄像头。 使用下面指令可单独启动Realsense摄像头。 ``` roslaunch xbot_bringup realsense.launch ``` ### 驱动激光雷达 使用下面指令可以单独启动Rplidar激光雷达。 ``` roslaunch xbot_bringup rplidar.launch ``` 输入指令后,终端将显示如下信息,表示雷达启动成功。当雷达启动时输入,可以使雷达关闭。 ![img](imgs/wpsByUB87.jpg) 如果您后续还需要启动其他节点,也可以使用不同指令启动相应的节点。 ## xbot_node机器人ROS驱动程序包 ### 发布的话题 1. /mobile_base/joint_states () 机器人关节状态 2. /mobile_base/sensors/core() 核心传感器数据 3. /mobile_base/sensors/extra() 传感器数据 4. /mobile_base/sensors/yaw_platform_degree() 水平云台角度 5. /mobile_base/sensors/pitch_platform_degree() 竖直云台角度 6. /mobile_base/sensors/motor_enabled() 轮子电机是否使能了 7. /mobile_base/sensors/sound_enabled() 声音开关是否打开了 8. /mobile_base/snesors/battery() 电池电量 9. /mobile_base/sensors/front_echo() 前方超声数据 10. /mobile_base/sensors/rear_echo() 后方超声数据 11. /mobile_base/sensors/infrared() 红外数据 12. /imu() IMU数据 13. /odom() 里程计数据 14. /tf() 坐标转换 15. /mobile_base/sensors/raw_imu_data() 原始九轴IMU数据 16. /mobile_base/xbot/state() 机器人状态 ### 订阅的话题 1. /mobile_base/commands/motor_enable() 控制电机 2. /mobile_base/commands/velocity() 控制速度 3. /mobile_base/commands/yaw_platform()[-90~90] 控制水平云台 4. /mobile_base/commands/pitch_platform()[-60~30] 控制竖直云台 5. /mobile_base/commands/sound_enable() 打开声音开关 6. /mobile_base/commands/led() 控制led灯。 7. /mobile_base/commands/reset_odometry() 重置里程计 ## xbot_face人脸识别程序包 ### 发布的话题 1. /xbot/face_result() 人脸识别的结果。 ### 订阅的话题 1. /xbot/camera/image() 人脸识别摄像头的画面。 ## xbot_talker语音交互程序包 xbot_talker由语音识别模块asr_sample、语音合成模块tts_sample、语言处理模块nlp_sample和语音唤醒模块awaken_sample组成。整个功能包的目录架构如下图: ![](imgs/toc.png) 各个模块的参数和接口说明如下。 ### 1.语音识别模块 asr_sample节点提供了科大讯飞离线命令词识别、科大讯飞在线语音识别以及百度在线语音识别三种接口,用户可通过修改asr_module.launch 里的参数选择使用不同接口进行语音识别。由于xbot-u机器人启动时不连接外网,所以真机运行时仅启动科大讯飞离线命令词识别一种识别接口。其他识别接口用户可在自己的电脑主机上进行测试。 #### 启动asr节点 - 启动asr节点: ``` roslaunch xbot_talker asr_module.launch ``` #### 参数Parameters - base_path:到xbot_talker的绝对路径,不可更改。 - enable_xfei_online: 开启讯飞在线识别,需在网络状况良好的情况下使用。 - enable_baidu_online: 开启百度在线识别,需在网络状况良好的情况下使用。 - enable_xfei_offline: 开启讯飞离线命令词识别,有无网络都可使用。 - use_pcm_file: 用于识别的输入为录好的音频文件。 - pcm_file: 用于识别的音频文件,默认为单声道pcm格式的音频文件。 - audio_channel:输入的音频声道数,默认单声道。 - use_mic: 用于识别的输入为麦克风实时录音。 - enable_record_save :是否保存麦克风录音缓存到cache/pcm目录下。 - record_time : 一次识别的录音时长,默认3.5s,最大值4.5s。 - grammar_path:科大讯飞离线语法文件路径,不可更改。 - log_path:生成的识别日志存储路径,识别结果和置信度信息默认存储在xbot_talker/cache/log/asr_recog_result_log.csv文件内。 - baidu_api_key:注册百度在线语音识别应用时创建的api_key,用户可使用提供的api_key,也可自己注册百度识别应用修改此参数。 - baidu_secret_key:注册百度在线语音识别应用时创建的secret_key,用户可使用提供的secret_key,也可自己注册百度识别应用修改此参数。 #### 订阅话题Subscribed Topics - /talker/enable_asr(std_msgs/Bool.msg): 是否开启语音识别(一轮)。 - /asr_module/enable_beep(std_msgs/Bool.msg): 是否在语音识别前播放“嘟”提示音,true:开启;false:关闭。调用/talker/chat和/xbot/chat服务时会自动开启“嘟”提示音。 #### 发布话题Published Topics - /talker/offline_recog_result(xbot_talker/recog_result.msg):离线语音识别结果,包含命令词和置信度信息。若同时开启离线识别和在线识别,优先发布此结果用于nlp模块的处理。 - /talker/online_recog_result(xbot_talker/online_asr_result.msg):在线语音识别的结果。若同时开启科大讯飞在线识别或百度在线识别,优先发布科大讯飞识别结果。 - /talker/xfei_offline_recog_result(xbot_talker/recog_result.msg):科大讯飞离线语音(离线命令词)识别结果。 - /talker/xfei_online_recog_result(xbot_talker/online_asr_result.msg):科大讯飞在线语音识别的结果。 - /talker/baidu_online_recog_result(xbot_talker/online_asr_result.msg):科大讯飞在线语音识别的结果。 - /nlp_module/enable_chat(std_msgs/Bool.msg):是否让nlp模块在处理语音识别结果时按照多轮对话交互模式进行处理,调用/talker/chat和/xbot/chat服务时会自动开启。 #### 提供的service服务端 - /talker/version(xbot_talker/CallVersion.srv):获取语音交互软件版本,请求参数为empty,返回版本信息。 - /talker/chat(xbot_talker/CallChat.srv):开启多轮对话交互服务,请求参数为bool型的start_chat,开启时为true。请求成功后返回chat_success: True。 - /xbot/chat(xbot_talker/chat.srv):兼容3.2.4之前版本的接口,使用同之前相同,开启多轮对话交互服务,请求成功后返回chat_success: True。 ### 2.语音合成模块 tts_sample节点提供了科大讯飞离线语音合成功能,能够播放特定的音频文件,能够将文字合成成语音并播放。 #### 启动tts节点 - 启动asr节点: ``` roslaunch xbot_talker tts_module.launch ``` #### 参数Parameters - base_path:到xbot_talker的绝对路径,不可更改。 - log_path:合成的音频文件的缓存目录,默认存储在xbot_talker/cache/log目录内。 #### 提供的service服务端 - /talker/play(xbot_talker/CallPlay.srv):语音播放服务接口,请求的参数说明: - loop_times:表示循环播放的次数,0表示只播放一遍,1表示共播放2遍…loop_times表示共播放(loop_times+1)遍。 - mode:播放模式。0表示把文字(tts_text)合成语音并播放;1表示播放指定的文件(audio_path)。 - audio_path:mode = 1时播放的音频文件。 - tts_text:mode =0 时转化的文字。 - /xbot/play(xbot_talker/play.srv):兼容3.2.4之前版本的接口,使用同之前相同,语音播放服务接口,请求的参数说明: - loop: 是否循环播放,默认false,不可更改。 - mode:播放模式。2表示把文字(tts_text)合成语音并播放;1表示播放指定的文件(audio_path)。 - audio_path:mode = 1时播放的音频文件。 - tts_text:mode =2时转化的文字。 - /talker/xbot_tts(xbot_talker/XbotTts.srv): 科大讯飞离线语音合成接口,请求的参数为: - start_tts:true表示开启语音合成。 - tts_text:需要合成的文字。 ### 3.语言处理模块 识别结果的处理模块,包括检测识别结果是否存在响应、进行响应、控制机器人移动、控制机械臂等功能。 #### 启动nlp节点 - 启动nlp节点: ``` roslaunch xbot_talker nlp_module.launch ``` #### 参数Parameters - base_path:到xbot_talker的绝对路径,不可更改。 - nlp_config_path:设置的离线问答库,默认为xbot_talker/defaultconfig/answer_dic.csv。 - log_path:生成的日志存储路径,默认存储在xbot_talker/cache/log/文件内。 - tuling_key:注册图灵在线问答机器人应用时创建的api_key,用户可使用提供的api_key,也可自己注册图灵应用修改此参数。 #### 订阅话题Subscribed Topics - /talker/offline_recog_result(xbot_talker/recog_result.msg):订阅离线语音识别结果,包含命令词和置信度信息。针对识别结果,在defaultconfig/answer_dic.csv离线问答库内查询响应策略并进行响应。 - /talker/online_recog_result(xbot_talker/online_asr_result.msg):订阅在线语音识别的结果。 - /nlp_module/enable_chat(std_msgs/Bool.msg):是否在处理语音识别结果时按照多轮对话交互模式进行处理。若为true,则语音识别结果响应结束后,会自动进入语音识别模块,开启下一轮对话;若为false,则响应结束后不再进入语音识别模块,结束对话,若启动了语音唤醒节点,则会进入等待唤醒状态。 #### 发布话题Published Topics - /talker/enable_asr (std_msgs/Bool.msg):从此话题发布true消息开启语音识别模块,进入下一轮对话。 - /talker/enable_awake (std_msgs/Bool.msg):从此话题发布true的消息进入语音唤醒模式。 - /asr_module/enable_beep (std_msgs/Bool.msg):是否开启语音识别前的"嘟"提示音。 - /cmd_vel_mux/input/teleop (geometry_msgs/Twist.msg):发布机器人运动的速度信息,控制机器人前进后退和左右旋转。 - /mobile_base/commands/pitch_platform (std_msgs/Int8.msg):控制俯仰云台的转动。 - /mobile_base/commands/yaw_platform (std_msgs/Int8.msg):控制水平云台的转动。 - /arm/commands/grip (std_msgs/Bool.msg):控制单臂机械臂的手爪的开合。 - /arm/commands/lift_up (std_msgs/Empty.msg):控制单臂机械臂抬起来。 - /arm/commands/put_down (std_msgs/Empty.msg):控制单臂机械臂放下,回到初始位置。 - /arm/commands/reset (std_msgs/Empty.msg):控制所有机械臂回到初始位置。 - /left_arm/commands/grip (std_msgs/Bool.msg):控制双臂中左手手爪的开合。 - /left_arm/commands/lift_up (std_msgs/Empty.msg):控制左手臂抬起来。 - /left_arm/commands/put_down (std_msgs/Empty.msg):控制左手臂放下,回到初始位置。 - /right_arm/commands/grip (std_msgs/Bool.msg):控制双臂中右手手爪的开合。 - /right_arm/commands/lift_up (std_msgs/Empty.msg):控制右手臂抬起来。 - /right_arm/commands/put_down (std_msgs/Empty.msg):控制右手臂放下,回到初始位置。 - /demo/leave (std_msgs/Bool.msg):预留的导航相关接口,“参观”、“带我参观”和“开始导航”会向此话题发布true的消息。 - /demo/visit (std_msgs/Bool.msg):预留的导航相关接口,“参观”、“带我参观”和“开始导航”会向此话题发布true的消息。 - /welcome/yes (std_msgs/Bool.msg):预留的导航相关接口,“参观”、“带我参观”和“开始导航”会向此话题发布true的消息。 - /demo/navi_to_pose (std_msgs/String.msg):预留的导航相关接口,导航到某个目标点,与json文件设置对应。 - /demo/navi_pause (std_msgs/Bool.msg):暂停导航。 - /demo/navi_continue (std_msgs/Bool.msg):继续导航。 #### service客户端 - /talker/version(xbot_talker/CallVersion.srv):获取语音交互软件版本,请求参数为empty,返回版本信息。 - /talker/xbot_tts(xbot_talker/XbotTts.srv): 科大讯飞离线语音合成接口。nlp节点在需要合成文字并播放时会调用此服务。 ### 4.语音唤醒模块 提供离线语音唤醒功能。 #### 替换语音唤醒插件 由于科大讯飞插件的使用有设备限制,用户若想使用此功能,需自己注册科大讯飞账号,下载sdk后替换插件。否则运行程序会报错。 * 注册登录科大讯飞官网:https://www.xfyun.cn/ * 进行实名认证 * 点击右上角的个人账号进入”我的应用“ * 创建新应用,应用名称可自行设置,不重名即可。设置好后,点提交即可。 ![](imgs/awak1.png) * 创建完成后,点击应用进入,可在左侧看到科大讯飞相关产品。选择“语音唤醒”,可看到剩余装机量、sdk下载链接、APPID和唤醒词设置等内容。如下图 ![](imgs/awak2.png) * 设置唤醒词为“小德小德”后提交,选择右侧语音唤醒SDK-Linux MSC-下载。将下载的文件解压,可看到bin、doc等文件夹。将/xbot_talker/defaultconfig/msc/res/ivw/里的wakeupresource.jet文件替换为新下载的压缩文件里的bin/msc/res/ivw里的同名文件。 * 打开xbot_talker/launch/awaken_module.launch文件,将参数appid的值设为自己创建的应用的APPID。 * 重新编译代码,就可使用语音唤醒功能了。 #### 启动awaken节点 ``` roslaunch xbot_talker awaken_module.launch ``` #### 参数Parameters - appid:科大讯飞离线语音唤醒应用id,应与defaultconfig/msc/res/ivw/里的wakeupresource.jet文件对应。 - base_path:到xbot_talker的绝对路径,不可更改。 - awaken_mode:mic表示输入为用户的实时语音;file表示输入为提前准备好的pcm音频文件。 - record_time: 默认600s,也就是接收到enable_awake后,会持续监听600s的音频输入,直到被唤醒后结束,或到达时间后退出。 - pcm_file: 在awaken_mode=file模式下作为输入的音频文件。 - log_path:生成的日志存储路径。 - enable_record_save: 是否保存录音。 #### 订阅话题Subscribed Topics - /talker/enable_awake (std_msgs/Bool.msg):当msg为true时,开始等待语音唤醒。 #### 发布话题Published Topics - /talker/awakened(std_msgs/Bool.msg):唤醒后向此话题发true。 - /talker/enable_asr(std_msgs/Bool.msg):唤醒后向此话题发true。 ### 5.集成所有模块的xbot_talker.launch的使用说明 #### xbot_talker.launch的启动 启动: ``` roslaunch xbot_talker xbot_talker.launch ``` 说明: - 1.修改asr_module.launch里的参数可以选择不同语音识别功能,可以使用纯离线模式:enable_xfei_offline设置为`true`,其余设置为`false`;在网络状况良好的情况下,也可只启动在线语音识别或者同时同时启动离线和在线识别,推荐同时启用讯飞离线识别和讯飞在线识别。 - 2.启动xbot_talker.launch后会进入唤醒模块,等待唤醒,可通过唤醒词“小德小德”唤醒机器人智能语音交互功能,成功唤醒后会听到"我在"的提示音,提示音结束后可以通过语音与机器人进行交互,一次交互结束后会再次进入唤醒模块,等待唤醒。 - 3.若离线识别结果置信度较低,或没有人说话,会播放“识别不够准确,请再说一遍命令词吧”等的提示,提示后用户可以再说一遍关键词,或者进入唤醒状态等待用户再次唤醒机器人 - 4.命令词“开始对话”、“开启多轮交互模式”“陪我聊天”等命令词可以使机器人进入多轮交互模式。用户可以在机器人响应结束后开始新一轮语音交互,不需要再通过唤醒词进行唤醒。通过命令词“关闭”、“关闭对话”、“退出聊天”“关闭多轮交互模式”等命令词退出多轮交互模式,之后会自动进入`等待唤醒状态`。 - 5.导航功能功能相关命令词,例如"回到原点"、“参观”、“带我参观”等,响应后语音交互模块会自动进入等待唤醒状态。