【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
相关推荐
wow_DG2 天前
【Python✨】VS Code 秒开 Python 类型检查:一招 mypy + settings.json 让你的 Bug 原地现形!
python·json·bug
码河漫步3 天前
ros2 humble安装moveit2
ros2·moveit
春日见4 天前
claude code基本介绍
linux·运维·服务器·ros2·moveit2
驱动探索者4 天前
Zephyr 获取 cpu 占用率异常bug分析
bug·rtos·zephyr
薛定e的猫咪5 天前
【调试技巧】vscode 四种断点调试,快速定位 bug
ide·vscode·python·bug
万粉变现经纪人5 天前
如何解决 pip install 编译报错 ‘cl.exe’ not found(缺少 VS C++ 工具集)问题
开发语言·c++·人工智能·python·pycharm·bug·pip
月小满6 天前
DataV轮播时其他组件的内容也一起滚动 修复bug的方法
前端·vue.js·bug·大屏端
桃子丫6 天前
AD转 Cadence学习指南-BUG篇
bug
testtraveler6 天前
[Fix] ImportError: libtorch_cpu.so: undefined symbol: iJIT_NotifyEvent
pytorch·python·bug
测试者家园6 天前
从“找 bug”到“降风险”:测试思维模式的底层迁移
软件测试·bug·风险管理·持续测试·测试基础·智能化测试·测试思维模式