news 2026/4/16 9:03:15

树莓派5安装ROS2全面讲解:涵盖网络配置与多机通信准备

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派5安装ROS2全面讲解:涵盖网络配置与多机通信准备

树莓派5安装ROS2实战指南:从零搭建多机通信机器人系统

最近在实验室调试一套分布式移动机器人系统,团队里几个小伙伴都卡在了“树莓派5装不上ROS2”这个环节。有人ping不通主机,有人ros2 node list半天没反应,还有人编译完功能包一运行就崩溃……其实问题根源并不复杂——不是不会装ROS2,而是没搞懂它背后的通信逻辑

今天我就以一个一线开发者的视角,手把手带你完成树莓派5上部署ROS2 Humble的全过程,并重点讲清楚那些官方文档里一笔带过、但实际项目中天天踩坑的网络配置细节。尤其是如何让多个树莓派之间稳定通信,这可是做SLAM、集群控制、远程监控的基础。


为什么选树莓派5 + ROS2?性能与生态的双重升级

先说结论:如果你要做的是真实场景下的机器人原型开发(而不是纯仿真),那么树莓派5是目前性价比最高的ARM64平台之一

相比树莓派4B,它的提升不是小打小闹:

  • CPU:四核Cortex-A76 @ 2.4GHz,单核性能翻倍
  • 内存:支持8GB LPDDR4X,跑Gazebo都不再卡顿
  • 接口:原生PCIe 2.0 ×1 → 可接M.2 NVMe SSD,彻底告别SD卡IO瓶颈
  • 网络:千兆以太网 + 双频Wi-Fi(5GHz干扰更少)

最关键的是,它能完美运行ROS2 Humble——这是目前对ARM64支持最成熟的长期支持版本(LTS),有官方二进制包,省去源码编译的痛苦。

📌 小贴士:虽然Ubuntu Core也支持树莓派5,但Raspberry Pi OS(64位)社区资源更多、驱动更全,更适合初学者和快速验证。


系统准备:别急着装ROS2,先把底子打好

很多问题其实出在第一步。很多人直接刷个桌面版系统就开始装ROS2,结果发现CPU占用飙到90%,节点延迟高达几百毫秒。

推荐配置清单

项目建议
操作系统Raspberry Pi OS (64-bit) Lite
存储介质≥32GB Class 10 SD卡 或 M.2 NVMe SSD(通过HAT扩展)
散热方案主动风扇+金属散热壳(长时间运行不降频)
电源适配器官方5V/5A电源(避免USB设备供电不足)

Lite版本没有图形界面,节省至少500MB内存,系统响应更快,特别适合做主控板。

初始设置三步走

  1. 启用SSH
    在SD卡根目录创建空文件ssh即可开启SSH服务:
    bash touch /path/to/sdcard/boot/ssh

  2. 连接Wi-Fi(可选)
    创建wpa_supplicant.conf文件写入WiFi信息:
    ```conf
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    country=CN

network={
ssid=”你的WiFi名称”
psk=”密码”
}
```
插卡启动后会自动联网。

  1. 首次登录并更新系统
    bash ssh pi@raspberrypi.local # 默认用户名pi,密码raspberry sudo apt update && sudo apt full-upgrade -y sudo reboot

正式安装ROS2 Humble:避开APT源的大坑

网上很多教程直接用http://packages.ros.org/ros2/ubuntu这个源,但在国内访问极慢,经常断连。我们得换镜像源。

方法一:使用中科大镜像(推荐)

# 添加GPG密钥 sudo curl -sSL https://mirrors.ustc.edu.cn/ros/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg # 写入软件源(注意替换为 jammy) echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.ustc.edu.cn/ros2/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

✅ 验证是否成功:执行cat /etc/apt/sources.list.d/ros2.list,看输出是否有中科大的地址。

然后更新并安装:

sudo apt update sudo apt install ros-humble-desktop -y

这个版本包含了RViz、Gazebo、相机驱动等常用工具。如果空间紧张,可以只装基础版:

sudo apt install ros-humble-ros-base

后续按需安装特定包,比如:

sudo apt install ros-humble-rviz2 ros-humble-gazebo-ros-pkgs

初始化环境变量

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc

现在你可以试试看ROS2有没有装好:

ros2 --version # 输出类似:ros2 version 0.15.0

安装构建工具链

以后要自己写节点或编译第三方包,必须装这些:

sudo apt install python3-colcon-common-extensions python3-rosdep

初始化rosdep(用于解决依赖):

sudo rosdep init rosdep update

网络配置才是重头戏:让多台设备真正“看见”彼此

这才是大多数人失败的地方。ROS2靠DDS发现节点,而DDS依赖网络广播和主机名解析。一旦网络没配对,就会出现“明明在同一局域网却找不到对方”的诡异情况。

1. 固定IP地址,别再靠DHCP分配

每次重启变一个IP,谁受得了?

编辑Netplan配置文件:

sudo nano /etc/netplan/01-network-manager-all.yaml

内容如下(假设你使用有线网口eth0):

network: version: 2 renderer: NetworkManager ethernets: eth0: dhcp4: no addresses: - 192.168.1.10/24 gateway4: 192.168.1.1 nameservers: addresses: - 8.8.8.8 - 1.1.1.1

保存后应用:

sudo netplan apply

🔧 提示:如果你不确定网卡名,可用ip a查看。常见名称包括eth0,enxb827ebxxxxxx等。

2. 设置有意义的主机名

默认叫raspberrypi,两台设备就冲突了。

改成本机专属名字,比如主控叫robot-master,底盘控制器叫robot-chassis

sudo hostnamectl set-hostname robot-master

修改后重新登录即可生效。

为了让其他机器也能通过名字访问你,有两种方式:

方式A:局域网mDNS(推荐)

Linux和macOS自带Avahi服务,支持.local域名解析。

检查是否运行:

systemctl status avahi-daemon

如果没有,启用它:

sudo systemctl enable avahi-daemon sudo systemctl start avahi-daemon

之后你在PC上就可以直接ping通:

ping robot-master.local
方式B:手动添加hosts映射(适用于Windows或关闭mDNS的情况)

在你的开发机(比如Ubuntu笔记本)上添加:

sudo nano /etc/hosts

加入一行:

192.168.1.10 robot-master

这样就能直接用ssh pi@robot-master登录了。

3. 统一ROS_DOMAIN_ID(关键!)

这是最容易被忽略的一点:不同ROS_DOMAIN_ID的节点无法互相发现!

想象一下,两个机器人在同一房间发消息,但一个说的是中文,另一个听英文——自然无法交流。

设置方法:

echo "export ROS_DOMAIN_ID=1" >> ~/.bashrc source ~/.bashrc

⚠️ 所有多机通信设备必须设成相同的ID(取值范围0~233)。建议:
- 机器人A:ID=1
- 机器人B:ID=2
- 实验室共用测试网段:ID=50

你可以新开终端验证是否生效:

echo $ROS_DOMAIN_ID # 应输出:1

多机通信实战测试:五条命令验真身

一切就绪后,来做一个简单的跨设备通信测试。

场景设定

  • 设备A:树莓派5,IP=192.168.1.10,主机名=robot-master
  • 设备B:你的Ubuntu笔记本,IP=192.168.1.20

两者连接同一个路由器,且都设置了ROS_DOMAIN_ID=1

测试步骤

  1. 在树莓派上启动一个发布者节点:
ros2 run demo_nodes_cpp talker

你会看到不断输出:

[INFO] [1234567890] Publishing: 'Hello World'
  1. 在你的笔记本上新开终端,同样设置ROS_DOMAIN_ID=1
export ROS_DOMAIN_ID=1

然后查看当前活跃节点:

ros2 node list

✅ 成功的话,你应该能看到:

/talker /parameter_events
  1. 再试试话题列表:
ros2 topic list

输出应包含:

/chatter /parameter_events /rosout
  1. 订阅消息看看能不能收到:
ros2 topic echo /chatter

如果屏幕上开始滚动显示'Hello World',恭喜你!ROS2多机通信已经打通

  1. 最后来个反向测试:在笔记本上启动listener,在树莓派上启动talker,依然能收到数据吗?能,说明双向通信正常。

常见问题排查清单(附解决方案)

现象可能原因解决办法
ping xxx.local不通mDNS未启用安装并启动avahi-daemon
ros2 node list为空ROS_DOMAIN_ID不一致两边都要export ROS_DOMAIN_ID=x
节点发现延迟高(>10秒)防火墙阻断UDP多播关闭防火墙或放行端口7400~7500
数据丢包严重使用2.4GHz Wi-Fi干扰大改用5GHz频段或有线连接
CPU占用过高同时运行太多节点使用htop观察负载,拆分任务到不同设备
时间不同步导致日志错乱本地时间不准配置NTP同步:
sudo timedatectl set-ntp true

💡 进阶技巧:可以用ROS_LOCALHOST_ONLY=1强制只允许本机通信,用于安全调试。


实际应用场景举例:小型自主巡逻车架构

我之前做过一个校园巡检机器人,核心就是基于这套配置:

  • 树莓派5(ID=1):作为主控,运行SLAM建图、AMCL定位、导航栈
  • ESP32(串口接入):采集温湿度、气体传感器数据
  • Jetson Nano(ID=1):运行YOLO目标检测,结果通过ROS2发布
  • 远端PC(ID=1):运行RViz实时可视化,接收报警信息

所有设备通过同一台千兆路由器连接,全部设置ROS_DOMAIN_ID=1,借助mDNS实现主机名自动发现。即使Jetson重启,树莓派也能在几秒内重新发现它并恢复订阅。

整个系统完全去中心化,没有“主从”之分,任何一个节点都可以动态加入或退出,正是ROS2的设计精髓所在。


写在最后:这不是终点,而是起点

当你第一次看到/chatter话题传来数据时,可能会觉得不过如此。但请相信我,这短短几行字符串背后,是一整套现代机器人系统的通信基石

从这一刻起,你已经具备了搭建分布式机器人的能力。接下来可以尝试:

  • 把IMU、激光雷达接入树莓派并发布传感器数据
  • 在另一台设备上运行robot_localization进行状态估计
  • teleop_twist_keyboard远程控制小车
  • 最终整合成完整的导航系统

技术永远在演进。未来ROS2 Iron/Foxy将进一步优化实时性,而树莓派生态也在不断丰富——CAN HAT、PoE供电模块、RT-Thread支持都在路上。

但无论怎么变,理解底层原理、掌握网络配置、学会调试通信,才是嵌入式开发者真正的护城河。

如果你正在折腾树莓派+ROS2的组合,欢迎留言交流经验。遇到具体问题也可以贴出来,我们一起排雷。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:02:52

MUMmer基因序列比对工具:快速完成DNA与蛋白质序列分析的完整指南

想要在短时间内完成两个基因组的比对分析吗?MUMmer基因序列比对工具就是你的理想选择!这款强大的生物信息学工具专为快速比对DNA和蛋白质序列而设计,无论处理细菌基因组还是哺乳动物级别的大型染色体,都能提供高效准确的解决方案。…

作者头像 李华
网站建设 2026/4/9 10:10:35

强力配置:在VS Code中构建专业级Fortran开发环境的完整指南

你是否还在为Fortran开发环境的配置而烦恼?想在现代化的IDE中获得媲美专业工具的编程体验吗?Modern Fortran扩展为Visual Studio Code带来了完整的Fortran语言支持,从语法高亮到智能调试,为科学计算和工程建模开发者提供了前所未有…

作者头像 李华
网站建设 2026/4/12 4:25:31

QQScreenShot终极指南:5分钟掌握专业级截图工具

QQScreenShot终极指南:5分钟掌握专业级截图工具 【免费下载链接】QQScreenShot 电脑QQ截图工具提取版,支持文字提取、图片识别、截长图、qq录屏。默认截图文件名为ScreenShot日期 项目地址: https://gitcode.com/gh_mirrors/qq/QQScreenShot 还在为复杂的截图…

作者头像 李华
网站建设 2026/4/14 21:58:25

WVP-PRO国标视频监控平台:从技术演进到实战应用的全方位解析

WVP-PRO国标视频监控平台:从技术演进到实战应用的全方位解析 【免费下载链接】wvp-GB28181-pro 项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro 在数字化转型浪潮中,视频监控系统已成为智慧城市、企业安防、智能交通等领域的…

作者头像 李华
网站建设 2026/4/7 0:01:04

MediaGo流媒体下载器:解决在线视频下载难题的终极方案

MediaGo流媒体下载器:解决在线视频下载难题的终极方案 【免费下载链接】m3u8-downloader m3u8 视频在线提取工具 流媒体下载 m3u8下载 桌面客户端 windows mac 项目地址: https://gitcode.com/gh_mirrors/m3u8/m3u8-downloader 还在为无法保存在线视频而困扰…

作者头像 李华
网站建设 2026/3/27 20:15:05

3步搞定GPU显存检测:memtest_vulkan终极使用指南

3步搞定GPU显存检测:memtest_vulkan终极使用指南 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 还在为显卡故障而烦恼吗?游戏画面撕裂、…

作者头像 李华