ROS2通信
ROS2版本的SDK默认采用全局ROS2通信机制。在局域网中,所有主机上的ROS2进程会自动相互通信,(即一台主机上的ROS2默认可以发现另一台主机上ROS2进程的Topic),因此可能导致节点冲突或意外执行控制程序。为避免此类问题的发生,建议用户在启动ROS2程序前进行以下限制配置。
- 限制ROS2通信范围至本地主机。
echo "export ROS_LOCALHOST_ONLY=1" >> ~/.bashrc
# 取消限制时,进入~/.bashrc文件中,修改为:ROS_LOCALHOST_ONLY=0
- 配置ROS_DOMAIN_ID以隔离通信域。
ROS_DOMAIN_ID用于划分独立的通信域。当所有ROS2进程的ROS_DOMAIN_ID相同时,它们可以互相通信;反之,即使在同一台主机上,不同ROS_DOMAIN_ID的ROS2进程也无法通信。此配置类似于网络中的端口号设置,通过指定一个非0的数字来实现通信隔离。
# 举例:设置为72
export ROS_DOMAIN_ID=72
相关环境变量的作用和用法详见ROS2官方文档中Configuring Environment章节。