【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
相关推荐
专注VB编程开发20年12 小时前
Windows API 所有老式结构体4字节对齐,但是64位VBA,Twinbasic弄成了8字节对齐,大BUG
windows·bug
IT枫斗者1 天前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
MIXLLRED2 天前
Ubuntu22.04 + ROS2 Humble + RealSense D435i 部署VINS-Fusion视觉惯性SLAM
ubuntu·slam·d435i·ros2·humble·vins
半天法师2 天前
Bug 记录:UE 结构体转 JSON 时 Key 字段大小写异常 (Editor 与打包后表现不一致)
ai·ue5·json·bug
张小俊_2 天前
WPF 跨线程 UI 更新与硬编码赋值引发的 Bug 排查
c#·bug·wpf
鸿儒5173 天前
记录一个C++ Windows程序移植到Linux系统的bug
开发语言·c++·bug
Python私教3 天前
HermesAgent 终端工具 Windows 兼容性修复实战:两个 Bug 的排查与解决
windows·bug
瀚高PG实验室4 天前
pgroonga全文检索插件的BUG
数据库·postgresql·bug·瀚高数据库
G果4 天前
SLAM 开源算法汇总(支持ROS2)
学习·算法·slam·ros2
¥-oriented5 天前
记录使用C#编程中遇到的一个小bug
c#·bug