ROS 基础课程

第 11 讲:ROS 多机通信 🛰️

目标:掌握 ROS 分布式网络配置,实现多台设备协同工作

📋 本节目录

  1. ROS 消息通信机制
  2. 核心环境变量配置
  3. 多机通信实战方案
  4. 常见问题排查

1️⃣ ROS 消息通信机制

1.1 机器人如何“找队友”? 🤝

ROS 采用分布式网络通信:

  • 只需设置两个关键环境变量
  • 即可实现多台电脑间的点对点数据传输
  • 常用场景:机器人电脑 + 远程操控电脑 (ROS2GO)

1.2 通信原理图解

说明:上图展示了 Talker 和 Listener 如何通过 Master 建立联系

1.3 通信三步走 🚀

  1. 注册:Talker 和 Listener 向 Master 报告自己的“家地址” (ROS_IP)
  2. 撮合:Master 告诉 Listener 哪里可以找到 Talker
  3. 连线:Listener 直接连接 Talker,不再经过 Master

关键点:如果地址(ROS_IP)写错了,他们就无法面谈!

2️⃣ 关键环境变量 🔒

2.1 ROS_MASTER_URI

作用:告诉程序“快递驿站”(Master)在哪个 IP 地址上。

类比:就像你寄快递时必须知道快递点的地址。

设置示例
http://192.168.1.100:11311

2.2 ROS_IP

作用:告诉别人“你自己的家地址”(本机 IP)。

类比:如果你给别人的地址是错的,快递员就没法把包裹送到你家。

重要规则

  • 两台机器必须都能让对方“敲开门”
  • 一般情况下,双向互通都需要设置此变量

3️⃣ 多机通信实战 🛠️

3.1 准备工作 ✅

在开始之前,请确保:

  1. 所有设备连接在同一个 Wi-Fi(同网段)
  2. 相互能够 ping 通(核心前提)
  3. 电脑端能通过 ssh 登录到机器人

3.2 方案一:手动设置 IP(最推荐)📍

假设机器人 IP 为 192.168.1.100,电脑为 192.168.1.111

机器人端 (Robot):

export ROS_MASTER_URI=http://192.168.1.100:11311
export ROS_IP=192.168.1.100

你的电脑 (ROS2GO):

export ROS_MASTER_URI=http://192.168.1.100:11311
export ROS_IP=192.168.1.111

3.3 方案二:自动化脚本 🚀

为了避免频繁修改,可将配置写入 .ros_master.sh 并通过 source 使用。

touch .ros_master.sh && chmod +x .ros_master.sh

# 写入配置
echo '## set $ROS_MASTER_URI and $ROS_IP for Multi Machine Communicate
export ROS_MASTER_URI=http://192.168.1.100:11311
IP=$(ip addr show wlan0 | grep -w inet | awk '{print $2}' | awk -F / '{print $1}')
export ROS\_IP=${IP}' >> ~/.ros_master.sh

3.4 脚本使用与 IP 获取小技巧

执行脚本:

source ~/.ros_master.sh

自动提取 IP 常用命令:

  • 获取 IPv4:export ROS_IP=hostname -I``
  • 过滤第一个 IP:export ROS_IP=hostname -I | cut -d " " -f 1``

⚠️ 警告:如果未联网导致获取 IP 为空,启动 ROS 会报错。

4️⃣ 常见问题排查 ⚠️

4.1 现象:能看到列表但没内容 🧐

症状rostopic list 有显示,但 rostopic echo 没东西。

排查清单

  • [ ] 机器人的 ROS_IP 是否设置正确?
  • [ ] 电脑端的 ROS_IP 是否设置正确?
  • [ ] 两者是否处于同一 Wi-Fi 网段?

4.2 为什么不用 Hostname?

直接用 /etc/hostname 听起来很方便,但是:

  • ❌ 解析不可靠:路由器 DNS 可能掉链子
  • ❌ 不可控制:环境变化后极易失败

建议:新手和专业测试一律使用 纯 IP 模式,这是最稳妥的选择。

📚 本节总结

环境参数 作用 推荐值
ROS_MASTER_URI Master (驿站) 地址 机器人真实 IP
ROS_IP 本机 (家) 地址 本机真实 IP
测试工具 验证网络通路 ping, ssh

感谢学习!💪

课后任务

  1. 查找并记录你和机器人的 IP 地址
  2. 实现电脑端成功接收机器人的 rostopic
■ 课后请阅读 ROS Wiki 网络设置教程