【ROS2】 忽略局域网多机通信导致数据接收的bug

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

本地记录一次ros2开发中的bug纠错。

之前系统地学习过ros1,由于ros1中需要实现多机通信需要配置,现在正在做一个ros2的项目,也没有怎么学就直接上阵了,还不知道ros2无需配置就可以实现局域网内多机通信,所以导致了如下的离谱bug。

ros2中 接收数据异常,订阅一辆小车的位姿会出现在两点反复跳跃,小车不受控制等等bug,甚至可能出现明明本地什么ros节点都没有启动,但是却能使用ros2 topic list查看到一大堆话题。


一、Bug体现

情况1:订阅一辆小车的位姿会出现在两点反复跳跃,很有可能就是开启本机和局域网内其他机器同时开启小车位姿发布节点(比如同时开启了gazebo的小车仿真,那么会用两个及以上gazebo往/odom实时发布小车位姿),此时如果在本机启动一个节点来订阅小车位姿并实时rviz展示轨迹,就会出现两个gazebo中小车的实时坐标在所连成的线在rviz中画出来。此时如果两个gazebo的小车还在移动,那么就会出现z字画线(因为两个gazebo都在,然后本机rviz接收到了都会画出来,如果二者发布消息交替地到达rviz,就会形成这样的z字画线)

情况2:自己手写了一个控制节点,发布Twist消息,然后局域网另外一个主机在使用键盘控制节点也在发布Twist消息,那么二者发布的Twist消息就会交替执行,表现的效果就是小车不受控制

情况3:也是同样的情况,同一局域网下其他主机开启了ros节点,在本机就可以看到话题信息


二、总结及解决方法

ros2支持同一局域网下ros节点的通信,如果发现有其他机器在运行相同功能包节点(尤其是同一个项目组连上同一个wifi然后使用同一份代码,共同调试同一份bug时,如果忘记局域网ros2的通信功能就会越调试"bug"越多,而且还会感到疑惑,为什么有的bug会出现的不稳定,明明复现条件的一样,还会具有随机性),发布相同话题的数据来进行干扰.

除了小组成员互相沟通,关掉多余的ros节点,还可以参考这篇文章https://blog.csdn.net/aibingjin/article/details/123865963,修改设置好当前主机的ros控制域id,避免出现上面的bug

可以在终端或者.bashrc内设置(二选一即可)

bash 复制代码
$ export ROS_DOMAIN_ID=5 #当前终端的节点控制域的id号为5

$ echo "export ROS_DOMAIN_ID=5" >> ~/.bashrc  #写入到.bashrc后,当前机器的所有ros节点的控制域id都为5
相关推荐
今天又在摸鱼20 小时前
bug日记
bug
大Mod_abfun1 天前
24H2动态壁纸无法正常嵌入(针对vb.net的紧急加更)
bug·桌面壁纸·24h2
悠哉悠哉愿意2 天前
【ROS2学习笔记】URDF 机器人建模
笔记·学习·机器人·ros2
悠哉悠哉愿意2 天前
【ROS2学习笔记】 TF 坐标系
笔记·学习·ros2
悠哉悠哉愿意2 天前
【ROS2学习笔记】RViz 三维可视化
笔记·学习·机器人·ros2
悠哉悠哉愿意3 天前
【ROS2学习笔记】分布式通信
笔记·学习·ros2
悠哉悠哉愿意4 天前
【ROS2学习笔记】rqt 模块化可视化工具
笔记·学习·机器人·ros2
悠哉悠哉愿意4 天前
【ROS2学习笔记】Gazebo 仿真与 XACRO 模型
笔记·学习·机器人·ros2
悠哉悠哉愿意4 天前
【ROS2学习笔记】节点篇:ROS 2编程基础
笔记·学习·ros2
悠哉悠哉愿意4 天前
【ROS2学习笔记】话题通信篇:话题通信项目实践——系统状态监测与可视化工具
笔记·学习·ros2