七、配置语音交互模块ROS_DOMAIN_ID
0x00 为何需要配置语音交互模块的ROS_DOMAIN_ID?
我们的ROS2离线语音交互模块在使用时,有用户反馈没办法配合自己本地配置的ROS_DOMAIN_ID来使用,因为旧版本的固件里,我们语音模块的micro_ros固件代码将其ROS_DOMAIN_ID固定配置为0,所以只能用户自己修改本地的ROS_DOMAIN_ID为0来适应语音模块。这样是很不合理的,所以我将语音模块的固件代码升级,从而支持用户可以在自己本地ROS2系统中配置语音交互模块的ROS_DOMAIN_ID。
需要使用这个支持修改ROS_DOMAIN_ID功能的话,就需要更新自己语音模块的固件版本,用户需要从代码服务器下载代码仓库,具体链接如下:
https://code.xturtle.cn/corvin_zhang/ros2_offline_voice_module
0x01 更新固件
对于更新语音交互模块固件的方法,我们在前面的教程中有详细介绍,具体可以查看如下教程文档链接:
https://www.corvin.cn/3527.html
这里需要注意,由于固件版本会一直升级,这里不用必须升级V1.1版本的固件才支持配置ROS_DOMAIN_ID,只要是V1.1以后得版本固件都是可以的。
0x02 在.bashrc中配置ROS_DOMAIN_ID参数
当更新好固件后,我们就可以在当前用户的home目录内.bashrc文件进行配置参数了,具体要增加如下两条配置:
export ROS_DOMAIN_ID=123
export XRCE_DOMAIN_ID_OVERRIDE=$ROS_DOMAIN_ID
其中第一行的ROS_DOMAIN_ID决定了用户本地ROS2系统运行在哪个domain,在主机侧的ROS_DOMAIN_ID用来隔离不同DDS域,范围通常为0~232。这里配置为123仅供参考,用户可以根据需要自行修改即可。
第二行XRCE_DOMAIN_ID_OVERRIDE决定Agent代表MCU创建出来的DDS Participant实际进入哪个domain,这里为了跟用户主机的ROS2系统domain保持一致,所以就给其赋值为$ROS_DOMAIN_ID了。
以后用户需要修改新的ROS_DOMAIN_ID域值,就可以直接修改第一行的数字即可,第二行的配置会自动与第一行保持同步的,这样语音模块输出的各ros2话题,用户就可以在本地ros2系统上获取到,并可以与其进行正常的数据交互。
0x03 使用launch文件与语音模块建立连接
为了方便大家在自己的ros2代码中直接整合语音模块,所以我们准备了一个offline_voice_module软件包,大家可以直接将该软件包复制到自己ros2工作区的src目录内即可,然后就可以在ros2工作区的根目录使用如下命令编译语音软件包:
colcon build --packages-select offline_voice_module
当编译好offline_voice_module软件包后,就可以使用launch命令来与语音模块建立连接了,具体命令如下:
ros2 launch offline_voice_module offline_voice_module.launch.py
其实这个offline_voice_module软件包实现很简单,主要是一个launch文件,加载一个yaml配置文件,具体目录结构如下图所示:
其中offline_voice_module.yaml配置文件中目前只配置了一个串口设备号参数,后续根据需要会逐步增加其他可以配置参数:
0x04 运行查看效果
当使用ros2 launch命令加载offline_voice_module.launch.py启动后,可以在终端里查看到自己在.bashrc中配置的ROS_DOMAIN_ID生效了,同时也配置了语音模块的XRCE-DDS域ID,具体如下图所示:
查看到上述日志,就说明从本地环境变量中读取到需要配置的XRCE-DDS的域ID值,然后将其配置生效,这样语音模块上的micro-ros代码就可以根据该域ID来配置运行的代码了,所以这样就可以在本地任意修改自己需要的ROS_DOMAIN_ID值,而且还可以正常与语音模块建立正常通信。






