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
驱动摄像头¶
XBot-U机器人配带有Intel RealSense 摄像头。
使用下面指令可单独启动Realsense摄像头。
roslaunch xbot_bringup realsense.launch
驱动激光雷达¶
使用下面指令可以单独启动Rplidar激光雷达。
roslaunch xbot_bringup rplidar.launch
输入指令后,终端将显示如下信息,表示雷达启动成功。当雷达启动时输入,可以使雷达关闭。
如果您后续还需要启动其他节点,也可以使用不同指令启动相应的节点。
xbot_node机器人ROS驱动程序包¶
发布的话题¶
/mobile_base/joint_states (<sensor_msgs::JointState>)
机器人关节状态
/mobile_base/sensors/core(<xbot_msgs::CoreSensor>)
核心传感器数据
/mobile_base/sensors/extra(<xbot_msgs::ExtraSensor>)
传感器数据
/mobile_base/sensors/yaw_platform_degree(<std_msgs::Int8>)
水平云台角度
/mobile_base/sensors/pitch_platform_degree(<std_msgs::Int8>)
竖直云台角度
/mobile_base/sensors/motor_enabled(<std_msgs::Bool>)
轮子电机是否使能了
/mobile_base/sensors/sound_enabled(<std_msgs::Bool>)
声音开关是否打开了
/mobile_base/snesors/battery(<xbot_msgs::Battery>)
电池电量
/mobile_base/sensors/front_echo(<sensor_msgs::Range>)
前方超声数据
/mobile_base/sensors/rear_echo(<sensor_msgs::Range>)
后方超声数据
/mobile_base/sensors/infrared(<xbot_msgs::InfraRed>)
红外数据
/imu(<sensor_msgs::Imu>)
IMU数据
/odom(<nav_msgs::Odometry>)
里程计数据
/tf(<geometry_msgs::TransformStamped>)
坐标转换
/mobile_base/sensors/raw_imu_data(<xbot_msgs::RawImu>)
原始九轴IMU数据
/mobile_base/xbot/state(<xbot_msgs::XbotState>)
机器人状态
订阅的话题¶
/mobile_base/commands/motor_enable(<std_msgs::Bool>)
控制电机
/mobile_base/commands/velocity(<geometry_msgs::Twist>)
控制速度
/mobile_base/commands/yaw_platform(<std_msgs::Int8>)[-90~90]
控制水平云台
/mobile_base/commands/pitch_platform(<std_msgs::Int8>)[-60~30]
控制竖直云台
/mobile_base/commands/sound_enable(<std_msgs::Bool>)
打开声音开关
/mobile_base/commands/led(<std_msgs::UInt8>)
控制led灯。
/mobile_base/commands/reset_odometry(<std_msgs::Empty>)
重置里程计
xbot_face人脸识别程序包¶
发布的话题¶
/xbot/face_result(<xbot_face::FaceResult>)
人脸识别的结果。
订阅的话题¶
/xbot/camera/image(<sensor_msgs::Image>)
人脸识别摄像头的画面。
xbot_talker语音交互程序包¶
xbot_talker由语音识别模块asr_sample、语音合成模块tts_sample、语言处理模块nlp_sample和语音唤醒模块awaken_sample组成。整个功能包的目录架构如下图:
各个模块的参数和接口说明如下。
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/
进行实名认证
点击右上角的个人账号进入”我的应用“
创建新应用,应用名称可自行设置,不重名即可。设置好后,点提交即可。
创建完成后,点击应用进入,可在左侧看到科大讯飞相关产品。选择“语音唤醒”,可看到剩余装机量、sdk下载链接、APPID和唤醒词设置等内容。如下图
设置唤醒词为“小德小德”后提交,选择右侧语音唤醒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.导航功能功能相关命令词,例如"回到原点"、“参观”、“带我参观”等,响应后语音交互模块会自动进入等待唤醒状态。