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

news/2025/9/21 9:55:32/文章来源:https://www.cnblogs.com/yxysuanfa/p/19103225

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

文章目录

  • 前言
  • 一、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内设置(二选一即可)

$ export ROS_DOMAIN_ID=5 #当前终端的节点控制域的id号为5
$ echo "export ROS_DOMAIN_ID=5" >> ~/.bashrc #写入到.bashrc后,当前机器的所有ros节点的控制域id都为5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境

更新系统包列表:首先,打开终端,并执行以下命令以更新Ubuntu系统的包列表: sudo apt update安装Java开发工具包 (JDK 8):在终端中运行以下命令安装OpenJDK 8: sudo apt install openjdk-8-jdk 安装完毕后,运行下…

【php】带数组的文件列表生成,返回数组

【php】带数组的文件列表生成,返回数组$list = gen_files_list(D:/novel/); for($i = 0; $i < count($lis); $i++) {echo "<li><a href=" . htmlspecialchars($lis[$i]) . ">" . …

配置Nginx以支持Websocket连接的方法

安装Nginx:首先,确保您安装了最新版本的Nginx,因为Websocket支持通常在较新版本中表现更佳。设置HTTP升级头:当Websocket客户端请求与服务器建立连接时,它会发送一个HTTP请求,请求中含有 Upgrade: websocket和 C…

Extundelete工具恢复数据

Extundelete 是一款专为 Ext 文件系统(Linux 系统中最常用的文件系统,如 Ext3、Ext4)设计的开源数据恢复工具,核心功能是恢复被意外删除(通过 rm 命令等操作)但尚未被新数据覆盖的文件或目录。它基于文件系统的底…

最新!!!MySQL环境搭建(windows系统) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

重新理解12306:它卖的从来不是“库存”,而是“状态”

你是否也曾好奇,12306这个每逢节假日就承受亿级流量的系统,背后到底是如何工作的?一个常见的误解是:把它当作淘宝一样的电商系统,认为它管理的是简单的商品库存。但真相远非如此。 让我们做一个极端的假设:一列高…

基于Python+Vue开发的房产销售管理系统源码+运行步骤

项目简介该项目是基于Python+Vue开发的房产销售管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于…

WinSCP从Windows传文件到Linux,文件名为中文显示乱码

View PostWinSCP从Windows传文件到Linux,文件名为中文显示乱码1、登录界面,录入服务器地址、用户名、密码,点击【Advanced】2、设置UTF-8 encoding for filenames为on即可,默认为Auto

混合架构(SpringCloud+Dubbo)的整合方案与适用场景(一) - 教程

混合架构(SpringCloud+Dubbo)的整合方案与适用场景(一) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

Oracle中case when函数和decode函数

View PostOracle中case when函数和decode函数1、case when函数: select ename,case deptno when 10 then ACCOUNTING when 20 then RESEARCH else SALES end from emp; select ename,case when deptno=10 then ACCOUN…

Jmeter生成随机数

View PostJmeter生成随机数1、使用函数助手里面的__Random函数2、使用beanshell提取器 import java.util.Random; Random rand = new Random(); int num = rand.nextInt(900) + 1000000; vars.put("randomNum&quo…

通过代码认识 CNN:用 PyTorch 构建卷积神经网络识别手写数字

通过代码认识 CNN:用 PyTorch 构建卷积神经网络识别手写数字2025-09-21 09:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !import…

SQLite数据库 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

安全技术深度探讨:从鱿鱼皮肤到AI漏洞挖掘

本文探讨了鱿鱼皮肤的光学特性及其潜在安全隐喻,并深入分析了AI在漏洞挖掘、硬件侧信道攻击、智能合约审计等领域的应用与风险,涉及多项实际技术案例与安全架构思考。周五鱿鱼博客:鱿鱼皮肤如何扭曲光线 新研究显示…

【Bluedroid】A2DP Source 音频流暂停流程解析[3]:AVDTP 协议中 Suspend Accept 响应的处理流程与建立分析(Suspend Accept)

【Bluedroid】A2DP Source 音频流暂停流程解析[3]:AVDTP 协议中 Suspend Accept 响应的处理流程与建立分析(Suspend Accept)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !…

实用指南:【Linux篇章】再续传输层协议UDP :从低可靠到极速传输的协议重生之路,揭秘无连接通信的二次进化密码!

实用指南:【Linux篇章】再续传输层协议UDP :从低可靠到极速传输的协议重生之路,揭秘无连接通信的二次进化密码!2025-09-21 09:14 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word…

数据建模流程分析

📋 完成的工作 我已经为您创建了一个完整的高速列车轴承智能故障诊断系统,包含以下核心组件: 1. 数据预处理模块 (data_preprocessing.py)✅ 支持.mat文件解析✅ 多采样率统一处理(12kHz/48kHz/32kHz)✅ 时域特征…

第四章:大模型(LLM)】08.Agent 教程-(7)使用 LangGraph 的作文评分架构

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:您必须知道的 10 大 Highcharts 性能优化技巧—— 提升加载速度与交互体验的实战建议

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

PHP8.5 Pipeline Operator 你应该了解的 8 个特性

PHP8.5 将在今年 11 月份发布Pipeline Operator (|>) 是 PHP 中一个令人兴奋的新特性,它从函数式编程中汲取灵感。它提供了一种干净、可读且富有表现力的方式来链接多个操作,无需嵌套括号或创建不必要的中间变量。…