当前位置: 首页 > news >正文

ROS2跨机通信实测:两台Ubuntu 22.04电脑,不配Master直接跑通Publisher和Subscriber

ROS2跨机通信实战无需Master的分布式消息传递两台Ubuntu 22.04设备无需复杂配置直接实现Publisher和Subscriber的跨机通信——这听起来像是ROS2送给开发者的礼物。与ROS1时代繁琐的多机配置相比ROS2的零配置通信确实让人眼前一亮。本文将带你一步步验证这个特性并探索背后的实用技巧。1. 环境准备与基础验证在开始跨机通信实验前确保两台设备都满足以下条件Ubuntu 22.04操作系统ROS2 Humble版本其他版本如Foxy也可但命令需相应调整连接至同一局域网基本的ROS2环境已配置source /opt/ros/humble/setup.bash验证网络连通性是首要步骤。在两台机器上互相ping对方的IP地址确保网络层通信正常。如果发现ping不通检查防火墙设置sudo ufw status # 查看防火墙状态 sudo ufw allow from 192.168.1.0/24 # 允许局域网访问安装测试用的示例包以Humble为例sudo apt install ros-humble-examples-rclcpp-minimal-publisher sudo apt install ros-humble-examples-rclcpp-minimal-subscriber2. 基础通信测试实战现在进入核心测试环节。我们将在一台机器上运行发布者另一台运行订阅者。**机器APublisher**执行ros2 run examples_rclcpp_minimal_publisher publisher_member_function**机器BSubscriber**执行ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function如果一切正常你会在Subscriber的终端看到持续输出的消息就像在同一台机器上运行一样。这种无缝体验正是ROS2分布式架构的魅力所在。注意如果遇到通信问题首先检查两台机器的ROS_DOMAIN_ID环境变量是否相同默认均为0。可以通过echo $ROS_DOMAIN_ID查看当前值。3. 通信隔离与DOMAIN_ID妙用有时候我们反而需要隔离通信。ROS2通过DOMAIN_ID实现了灵活的通信分组控制。要让两台机器不通信只需设置不同的DOMAIN_ID。编辑每台机器的~/.bashrc文件机器Aexport ROS_DOMAIN_ID1机器Bexport ROS_DOMAIN_ID2保存后执行source ~/.bashrc使配置生效。再次运行Publisher和Subscriber你会发现它们不再通信。这种隔离机制在多机器人协同场景中非常实用。DOMAIN_ID的取值范围是0-101合理规划这些ID可以帮助你构建复杂的通信拓扑。例如场景DOMAIN_ID设置建议开发测试环境0机器人组A1机器人组B2特殊调试会话预留高位ID如100-1014. 多网卡环境下的通信优化在实际机器人应用中设备往往配备多个网卡。ROS2能够自动处理这种情况但了解一些优化技巧很有必要。查看网络接口ip addr show # 显示所有网络接口ROS2默认会尝试所有可用接口。如果需要对通信接口进行精细控制可以设置ROS_LOCALHOST_ONLYexport ROS_LOCALHOST_ONLY1 # 限制仅使用回环接口或者指定特定接口export ROS_IP192.168.1.100 # 指定使用的IP地址在多路由环境中确保两台机器间的路由表配置正确。检查路由ip route show如果需要添加特定路由sudo ip route add 192.168.2.0/24 via 192.168.1.1 dev enp3s05. 高级话题与性能考量当通信规模扩大时了解一些底层机制有助于优化性能。ROS2默认使用Fast DDS作为中间件其发现协议会影响通信建立时间。发现协议配置可以通过环境变量调整export RMW_IMPLEMENTATIONrmw_fastrtps_cpp export FASTRTPS_DEFAULT_PROFILES_FILEmy_super_profile.xml在my_super_profile.xml中可以配置各种参数如participant rtps builtin discovery_config leaseDuration sec300/sec /leaseDuration leaseAnnouncement sec3/sec /leaseAnnouncement /discovery_config /builtin /rtps /participant对于延迟敏感的应用考虑调整QoS策略。ROS2提供了丰富的QoS配置选项auto qos rclcpp::QoS(rclcpp::KeepLast(10)); qos.reliability(RMW_QOS_POLICY_RELIABILITY_RELIABLE); qos.durability(RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL);在实际项目中我发现合理设置这些参数可以显著提升多机通信的稳定性和实时性。特别是在无线网络环境下适当放宽发现时间要求可以减少连接失败的概率。
http://www.zskr.cn/news/1366555.html

相关文章:

  • 基于分层高斯过程回归的金属增材制造工艺参数优化
  • Wand-Enhancer技术深度解析:本地化WeMod增强工具的实现原理与实践指南
  • 用Python+Mediapipe+OpenCV做个手势识别小游戏(附完整源码和避坑指南)
  • QuPath数字病理分析实战指南:从入门到精通的开源解决方案
  • AI招聘Agent落地失败率高达68%?(2024全球127家HR Tech实测数据白皮书)
  • Lua反编译神器unluac:从字节码到源码的完整恢复指南
  • 3步打造你的智能休息管家:Stretchly终极配置指南
  • Keil MDK网络组件升级中线程创建失败的解决方案
  • 深度解析Reloaded-II架构:高级模组依赖管理与循环依赖解决方案
  • 记忆学习导向的高速运动感知图像的去模糊及目标识别【附数据】
  • DLSS Swapper完全指南:智能管理游戏DLSS版本的开源革命
  • 3分钟解决Windows激活烦恼:开源KMS工具终极使用指南
  • 3分钟解锁SketchUp STL插件:你的3D打印模型转换终极方案
  • 昇腾NPU上的神经网络算子库,如何选型?
  • 嵌入簇展开(eCE):机器学习驱动的多元合金化学降维建模实战
  • Xournal++:为什么这款开源手写笔记软件能让你的数字工作流焕然一新?
  • 揭秘Windows热键冲突:Hotkey Detective一键定位占用程序
  • 秦皇岛黄金回收|赵掌柜二奢店(海港区毓典商贸店)正规经营 联系电话18531172838 - 品牌企业推荐师(官方)
  • 京东自动化脚本:解放双手,轻松获取京豆奖励的智能方案
  • 现代Qt开发教程(新手篇)3.1——布局系统基础
  • 如何永久保存微信聊天记录?WeChatMsg让每一段对话都值得珍藏
  • Unity SDK治理革命:EDM4U如何实现确定性集成
  • Windows 11/10下,Microsoft Store打不开?手把手教你用CheckNetIsolation命令批量解除UWP网络隔离
  • KMS_VL_ALL_AIO:开源智能激活工具让Windows和Office激活变得简单
  • 机器学习项目开发模式解析:从提交历史看规模、协作与演化规律
  • Maalox和Mylanta的区别
  • Android加壳技术演进:从DEX加固到Native动态加载
  • 解锁QQ音乐加密格式:qmc-decoder让你真正拥有自己的音乐
  • 中国隐秘的海上仙境,不输马尔代夫,就在西沙七连屿-赵述岛! - 奔跑123
  • AWS RDS 从购买配置到上手使用全攻略