ROS2(Humble)——多机通信问题
·
1. ROS_DOMAIN_ID 未设置或设置不一致
这是最常见的原因。ROS2使用DDS中间件,默认的ROS_DOMAIN_ID为0,在多机通信时容易冲突。
检查方案:
# 在两台机器上分别检查
echo $ROS_DOMAIN_ID
解决方案:
在两台机器的~/.bashrc中添加相同的DOMAIN_ID:
# 选择0-232之间的数字(避免常见网络冲突)
export ROS_DOMAIN_ID=42
2. 网络配置问题
需要检查:
# 1. 确认IP地址配置正确
# 上位机执行:
hostname -I
# 树莓派执行:
hostname -I
# 2. 确认网络连通性
# 在树莓派ping上位机:
ping <上位机IP>
# 3. 检查多播路由
route -n | grep 224.0.0.0
3. 防火墙/网络策略限制
Ubuntu 22.04默认防火墙规则可能阻止ROS2通信:
# 在两台机器上都执行
sudo ufw status
# 如果启用,添加规则或暂时关闭测试
sudo ufw allow 7400:7600/tcp
sudo ufw allow 7400:7600/udp
4. Fast DDS配置问题
ROS2 Humble默认使用Fast DDS,需要正确配置发现机制:
创建配置文件 fastdds_config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
<participant profile_name="participant_profile">
<rtps>
<builtin>
<initialPeersList>
<locator>
<udpv4>
<address><上位机IP></address>
<port>11811</port>
</udpv4>
</locator>
<locator>
<udpv4>
<address><树莓派IP></address>
<port>11811</port>
</udpv4>
</locator>
</initialPeersList>
<metatrafficUnicastLocatorList>
<locator>
<udpv4>
<address>239.255.0.1</address>
<port>11811</port>
</udpv4>
</locator>
</metatrafficUnicastLocatorList>
</builtin>
</rtps>
</participant>
</profiles>
设置环境变量:
export FASTRTPS_DEFAULT_PROFILES_FILE=/path/to/fastdds_config.xml
5. 环境变量配置不完整
确保两台机器的~/.bashrc中有完整配置:
# 上位机配置
export ROS_DOMAIN_ID=42
export ROS_IP=<上位机IP>
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
# 树莓派配置
export ROS_DOMAIN_ID=42
export ROS_IP=<树莓派IP>
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
6. 测试步骤
第一步:基础连通性测试
# 在上位机运行
ros2 run demo_nodes_cpp talker
# 在树莓派运行
ros2 run demo_nodes_cpp listener
第二步:检查节点发现
# 在两台机器分别执行
ros2 node list
ros2 topic list
第三步:使用Wireshark检查DDS通信
sudo apt install wireshark
# 过滤DDS流量
udp.port == 11811
7. 使用Cyclone DDS替代方案
如果Fast DDS问题难以解决,可以切换为Cyclone DDS:
sudo apt install ros-humble-rmw-cyclonedds-cpp
# 在~/.bashrc中添加
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
检查命令:
# 在上位机查看话题信息
ros2 topic info /cmd_vel --verbose
# 在树莓派查看话题信息
ros2 topic info /cmd_vel --verbose
推荐的完整解决方案:
- 统一DOMAIN_ID:设置相同的非零DOMAIN_ID
- 关闭防火墙测试:
sudo ufw disable - 使用静态IP:确保WiFi网络使用静态IP分配
- 配置hosts文件:在两台机器的
/etc/hosts中添加对方 - 使用Cyclone DDS:通常比Fast DDS在多机通信中更稳定
更多推荐
所有评论(0)