树莓派5上跑ROS2?别再被32位系统坑了!一文搞定64位Ubuntu + ROS2完整部署
你是不是也曾在树莓派5上尝试安装ROS2,结果apt install ros-humble-desktop直接报错:“无法定位软件包”?
别急——这多半不是你的操作问题,而是你用的系统不对。
树莓派5虽然是热门开发板,但它的“ROS2适配之路”对新手并不友好。很多人踩的第一个大坑就是:用了32位系统,却想装64位的ROS2。而ROS官方从Humble开始,早已不再为ARM32提供二进制包。
本文不讲空话,手把手带你完成一次稳定、高效、可量产的树莓派5 ROS2环境搭建全过程。我们选用Ubuntu Server 22.04 LTS(aarch64) + ROS2 Humble Hawksbill组合,抛弃图形界面,专注打造一个轻量、远程可控、适合长期运行的机器人边缘节点。
为什么树莓派5必须上64位系统?
先说结论:如果你的目标是“在树莓派5上运行ROS2”,那就必须使用64位操作系统。
看清硬件真相:树莓派5不是“小玩具”
很多人还把树莓派当成学习Linux的小工具,但实际上,树莓派5已经是一台正经的嵌入式服务器:
- CPU:Broadcom BCM2712,四核Cortex-A76 @ 2.4GHz(64位ARMv8-A)
- 内存:支持LPDDR4X,最高8GB
- 接口:PCIe 2.0 x1、双频Wi-Fi 5、千兆以太网、双HDMI输出
- I/O控制器:全新RP1芯片,大幅降低外设延迟
这意味着它完全有能力承担SLAM、路径规划、多传感器融合等典型ROS任务。
但这一切的前提是——你得让它跑在64位模式下。
32位系统的致命缺陷
Raspberry Pi OS(原Raspbian)曾长期主推32位版本,因为它兼容性好、资源占用低。但这也带来了严重后果:
🚫ROS2官方从Foxy版本起,就不再为armhf(32位ARM)提供二进制包!
也就是说:
sudo apt install ros-foxy-desktop # 在32位系统上会失败即使你强行编译源码,也会遇到Python依赖冲突、C++标准库不匹配、DDS中间件编译失败等一系列问题。
所以,第一步就错了,后面步步都难。
选什么系统?Ubuntu Server是最佳答案
面对众多选择,我们应该怎么挑?
| 系统 | 是否推荐 | 原因 |
|---|---|---|
| Raspberry Pi OS (32-bit) | ❌ 不推荐 | 不支持ROS2官方包 |
| Raspberry Pi OS (64-bit Desktop) | ⚠️ 可用但臃肿 | GUI拖累性能,不适合做服务端节点 |
| Debian 12 ARM64 | ✅ 可行 | 轻量,但需手动配置ROS源和依赖 |
| Ubuntu Server 22.04 aarch64 | ✅✅✅ 强烈推荐 | 官方支持ROS2、LTS更新到2027、生态完善 |
Ubuntu Server 22.04 for Raspberry Pi是目前最省心的选择。它由Ubuntu官方维护,专为无头设备优化,且与ROS2文档高度一致。
💡 小知识:ROS2 Humble Hawksbill 正是为 Ubuntu 22.04(代号 Jammy Jellyfish)量身定制的LTS版本,支持将持续到2027年。
第一步:刷写64位Ubuntu Server系统
1. 下载镜像
前往官网下载最新版:
👉 https://ubuntu.com/download/raspberry-pi
选择文件:
ubuntu-22.04.4-live-server-arm64+raspi.img.xz注意:一定要是
arm64版本,不要误下x86或32位镜像。
2. 写入SD卡
推荐工具:
-Raspberry Pi Imager(简单直观)
-BalenaEtcher(跨平台可靠)
步骤:
1. 插入microSD卡(建议≥32GB,UHS-I Class 10以上)
2. 打开烧录工具,选择刚才下载的.img.xz文件
3. 选择目标SD卡,点击“Write”
4. 等待完成并安全弹出
3. 启用SSH(关键!避免接显示器)
为了实现“无屏部署”,我们需要提前开启SSH。
在SD卡烧录完成后,它会自动挂载为一个名为system-boot的分区。在这个分区根目录创建一个空文件:
touch ssh这个技巧适用于大多数基于Debian/Ubuntu的树莓派镜像,系统启动时检测到该文件就会自动启用OpenSSH服务。
4. 首次启动 & 登录
将SD卡插入树莓派5,通电启动。
连接方式有两种:
-有线网络:推荐,更稳定
-Wi-Fi:可在system-boot分区编辑network-config文件预设SSID
等待1–2分钟后,通过路由器后台查看新设备IP地址,然后SSH登录:
ssh ubuntu@192.168.1.105默认用户名:ubuntu
首次登录会提示设置密码。
第二步:固定IP,告别网络波动
ROS通信极度依赖稳定的网络环境。如果每次重启树莓派IP都变,会导致话题通信中断、主机找不到节点等问题。
我们来配置静态IP。
编辑Netplan配置文件:
sudo nano /etc/netplan/00-installer-config.yaml修改内容如下(根据你的网络调整):
network: version: 4 renderer: networkd ethernets: eth0: dhcp4: no addresses: - 192.168.1.100/24 gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1]应用配置:
sudo netplan apply现在你的树莓派就有了固定的“身份证”,再也不怕找不到了。
第三步:正式安装ROS2 Humble
准备工作就绪,进入核心环节。
1. 更新系统 & 安装基础依赖
sudo apt update && sudo apt upgrade -y sudo apt install wget gnupg2 lsb-release software-properties-common -y2. 添加ROS2软件源和GPG密钥
这是最关键的一步,确保你能从官方仓库下载到正确的ARM64包。
添加密钥:
wget -qO - https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo gpg --dearmor -o /usr/share/keyrings/ros-archive-keyring.gpg添加APT源:
echo "deb [signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros-latest.list✅ 检查点:
$(lsb_release -cs)应返回jammy,否则说明系统版本不符。
3. 安装ROS2桌面版
sudo apt update sudo apt install ros-humble-desktop -y这个包包含了:
- 核心运行时(rclcpp,rmw)
- 图形化工具RViz2
- 仿真支持(Gazebo集成)
- 常用功能包(如tf2,nav_msgs)
如果你只是做后台数据采集节点,可以改用:
sudo apt install ros-humble-ros-base -y节省约1.5GB空间。
4. 安装构建工具
sudo apt install python3-colcon-common-extensions -ycolcon是ROS2的标准构建系统,用于编译自定义功能包。
5. 设置环境变量
让每次打开终端都能自动加载ROS2环境:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc验证是否成功:
env | grep ROS你应该能看到一堆以ROS_开头的环境变量。
第四步:跑个Demo,确认一切正常
来,让我们运行一个经典测试节点,看看ROS2是不是真的活了。
ros2 run demo_nodes_cpp talker另开一个终端(可通过SSH再连一次),订阅消息:
ros2 run demo_nodes_py listener如果看到类似输出:
[INFO] [1712345678.123456]: I heard: [Hello World: 1]恭喜!你的树莓派5已经成功变身ROS2节点!
进阶实战:让ROS2开机自启
在真实机器人项目中,没人每次去手动启动节点。我们要让它上电即运行。
利用Linux的systemd服务管理器,轻松实现守护进程。
创建服务文件
sudo nano /etc/systemd/system/my_robot.service写入以下内容(示例运行talker节点):
[Unit] Description=My ROS2 Robot Node After=network.target [Service] Type=simple User=ubuntu WorkingDirectory=/home/ubuntu ExecStart=/bin/bash -c "source /opt/ros/humble/setup.bash && ros2 run demo_nodes_cpp talker" Restart=always RestartSec=10 [Install] WantedBy=multi-user.target保存退出后启用服务:
sudo systemctl enable my_robot.service sudo systemctl start my_robot.service检查状态:
sudo systemctl status my_robot.service从此以后,只要通电联网,你的机器人节点就会自动上线。
工程级建议:提升系统稳定性
别忘了,机器人是要长时间运行的。以下是我在多个项目中总结出的关键经验。
🔌 电源必须稳
- 使用官方5V/5A USB-C电源
- 避免使用手机充电头供电
- 电压不稳会导致SD卡损坏、CPU降频甚至死机
🌡️ 散热不能省
树莓派5性能强,发热也大。建议:
- 加装金属外壳(被动散热)
- 或搭配小型风扇(主动散热)
- 可通过命令监控温度:
vcgencmd measure_temp💾 存储要靠谱
- SD卡易损,优先选用工业级品牌(如SanDisk Extreme Pro)
- 更优方案:通过M.2转接板接NVMe SSD(走PCIe),大幅提升IO性能和寿命
🔐 安全要加强
ROS2默认使用UDP广播通信,端口范围在7400以上。建议:
- 关闭不必要的服务(如蓝牙、Avahi)
- 配置防火墙规则(ufw)
- 多机协作时启用DDS安全策略(Advanced Security选项)
⏱️ 时间要同步
在分布式系统中,时间戳错乱会导致数据错位。启用NTP:
sudo timedatectl set-ntp true timedatectl status确保所有设备时间误差小于100ms。
实际应用场景:树莓派5作为边缘感知节点
在我的一个巡检机器人项目中,树莓派5担任传感器聚合中心角色:
[NVIDIA Jetson Orin] ←ROS2 Topics→ [Raspberry Pi 5] ↑ ↓ 主控与导航引擎 摄像头 + IMU + 温湿度具体分工:
- Jetson负责SLAM、全局路径规划、AI推理
- 树莓派5负责采集图像、发布IMU数据、执行本地避障逻辑
两者通过局域网以ROS2 Topic通信,延迟低于20ms,完全满足实时性需求。
得益于Ubuntu Server的轻量化设计,树莓派5平均CPU占用仅30%,内存占用1.2GB(8GB总内存),运行一周无需重启。
常见问题答疑
❓ 为什么不能用Raspberry Pi OS 64位桌面版?
可以,但不推荐。原因:
- 自带大量GUI组件(如Chromium、LibreOffice),浪费资源
- 默认Shell环境与ROS2文档略有差异
- 更新策略不如Ubuntu稳定
如果你需要图形界面调试,建议后期通过VNC或WebUI扩展,而不是一开始就装桌面环境。
❓ 能否用Debian或其他发行版?
技术上可行,但你要自己解决:
- ROS2依赖库版本兼容性
- Python 3.10+环境配置
- GPG密钥和APT源手动添加
对于大多数开发者来说,省下的时间远比磁盘空间宝贵。
最后一句话
树莓派5不再是“玩票”的开发板,它是能真正投入实用的低成本高性能边缘计算平台。
只要记住三点:
1.必须用64位系统
2.首选Ubuntu Server 22.04 aarch64
3.善用systemd实现自动化
你就已经超越了80%的初学者。
下一步,不妨试试在树莓派5上部署YOLOv8-Tiny做物体识别,再通过ROS2传给主控——这才是智能机器人的正确打开方式。
如果你正在搭建自己的机器人系统,欢迎在评论区分享你的架构设计,我们一起探讨优化方案。