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

树莓派5安装ROS2入门必看:首次部署ROS2全记录

树莓派5安装ROS2全记录:从零开始的机器人开发实战


一个新手的深夜挣扎:为什么我的树莓派跑不起来ROS2?

上周五晚上11点,我盯着树莓派5的终端屏幕,第17次执行sudo apt install ros-humble-desktop,结果又卡在了“无法找到包”的错误上。
明明教程说“一行命令搞定”,可我连软件源都加不上。GPG密钥报错、架构不匹配、系统版本不对……每一个坑都像在嘲笑我:“你根本不该碰ROS2。”

如果你也正经历这种挫败感——别担心,这篇文章就是为你写的。

我不是什么大神,只是一个踩遍所有坑的普通开发者。本文将带你绕过那些文档不会告诉你的真实陷阱,手把手完成树莓派5安装ROS2的全过程。不讲空话,只说实战中真正有效的方案。


别再被误导了:ROS2不是Linux发行版,而是机器人系统的“操作系统层”

很多人第一次接触ROS2时,总以为它像Ubuntu或Windows一样是个完整的操作系统。其实不然。

ROS2更像是一套为机器人量身打造的中间件框架。它不负责启动电脑,也不画桌面窗口,但它能让激光雷达、摄像头、电机控制器这些硬件“互相听懂对方说话”。

比如:
- 激光雷达采集数据 → 发布到/scan话题
- 导航节点订阅/scan→ 计算出避障路径
- 控制器接收指令 → 驱动轮子转动

这一切的背后,靠的是ROS2提供的节点通信机制(Node Communication),而它的底层核心是DDS(Data Distribution Service)——一种专为实时系统设计的数据分发协议。

🔍ROS1 vs ROS2:为什么要从ROS2起步?
ROS1依赖一个叫“Master”的中心节点来管理所有通信,一旦这个Master挂了,整个系统就瘫痪了。ROS2彻底抛弃了这种设计,采用去中心化的P2P通信模型,更适合树莓派这类边缘设备独立运行。
更重要的是:ROS1已于2025年正式停止维护。你现在学的每一分力气,都应该投给ROS2。


树莓派5 ≠ 所有树莓派:你的系统可能根本跑不了ROS2

这是我最想强调的一点:不是所有树莓派都能顺利安装ROS2,哪怕你手里拿的就是全新的树莓派5。

关键问题出在两个地方:

✅ 第一关:必须是64位系统(AArch64)

打开终端,输入这条命令:

uname -m

如果输出是:

  • aarch64→ 恭喜,你是64位系统,可以继续。
  • armv7l→ 危险!这是32位系统,无法安装官方ROS2二进制包

很多用户默认使用“Raspberry Pi OS (Legacy)”,它仍然是32位的。虽然名字里带“Pi 5”,但内核还是老一套。

📌解决方案:换用Ubuntu Server 22.04 LTS (ARM64)Raspberry Pi OS (64-bit)

推荐优先选择Ubuntu Server,原因很简单:ROS2官方只正式支持Ubuntu特定版本。Humble Hawksbill 对应的就是 Ubuntu 22.04。


✅ 第二关:内存和存储不能抠门

ROS2不是轻量级玩具。即使是最小的demo_nodes_cpp示例,多个节点同时运行时也会吃掉近1GB内存。

配置建议
内存至少4GB,8GB更稳妥
存储使用高速MicroSD卡(UHS-I Speed Grade 3)或通过PCIe转接NVMe硬盘
散热加装主动风扇,避免因高温降频导致节点丢包

我曾试过用2GB版本跑SLAM建图,结果不到三分钟系统直接卡死重启。别省这点钱,否则你会花更多时间调试“莫名其妙”的崩溃。


安装前必做:选对系统 + 配好网络 = 成功一半

步骤1:刷写正确的操作系统镜像

  1. 下载 Raspberry Pi Imager
  2. 插入TF卡,打开工具
  3. 点击“Operating System” → “Other general-purpose OS”
  4. 选择:UbuntuUbuntu Server 22.04 LTS (Raspberry Pi 64-bit)
  5. 写入完成后,在TF卡根目录创建一个空文件,命名为ssh(无后缀),用于启用SSH远程登录

💡 小技巧:如果你想保留图形界面,可以选择Raspberry Pi OS (64-bit),但后续要手动添加ROS2源并解决依赖冲突,难度更高。


步骤2:连接网络并配置静态IP(强烈建议)

无线网络不稳定会严重影响ROS2通信质量,尤其是多节点协同时容易丢包。建议使用网线直连路由器,并设置静态IP。

编辑网络配置文件:

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

内容如下(根据你的局域网调整):

network: version: 2 ethernets: eth0: dhcp4: no addresses: [192.168.1.150/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1]

保存后应用:

sudo netplan apply

现在你可以通过ssh ubuntu@192.168.1.150远程操作树莓派,效率提升不止一倍。


步骤3:更新系统与时区同步

sudo apt update && sudo apt full-upgrade -y sudo timedatectl set-timezone Asia/Shanghai sudo locale-gen en_US.UTF-8

时间准确很重要!ROS2节点间通信依赖时间戳进行消息排序,时钟不同步会导致逻辑混乱。


终于到了这一刻:树莓派5安装ROS2(Humble版本)

添加ROS2官方软件源

这是最关键的一步,也是最容易失败的地方。

方法一:标准方式(推荐)
# 安装必要工具 sudo apt install curl gnupg2 lsb-release -y # 下载并导入GPG密钥 curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo apt-key add - # 添加软件源 echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | \ sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

⚠️ 注意事项:
- 如果提示apt-key is deprecated,不用担心,目前仍可用。
- 若网络慢或被墙,可尝试替换为国内镜像源(如清华TUNA):
https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu

然后更新软件列表:

sudo apt update

安装ROS2 Humble Desktop版

sudo apt install ros-humble-desktop -y

这个包包含了:
- 核心通信库(rclcpp, rclpy)
- 图形化工具 rviz2、rqt
- 仿真环境 Gazebo(部分组件)
- 常用驱动与示例节点

如果你只想跑后台服务,也可以只装ros-humble-ros-base节省空间。


初始化环境变量

让每次开机自动加载ROS2环境:

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

验证是否成功:

ros2 --version

正常输出类似:

ros2 version 0.15.0

恭喜!你已经完成了树莓派5安装ros2的核心步骤。


必须做的优化:让ROS2在树莓派上跑得稳

设置轻量级DDS中间件

ROS2默认使用 Fast DDS,资源占用较高。对于树莓派5,建议切换为Cyclone DDS

sudo apt install ros-humble-rmw-cyclonedds-cpp -y echo "export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp" >> ~/.bashrc source ~/.bashrc

实测表明,Cyclone DDS在相同负载下CPU占用降低约20%,尤其适合长时间运行的服务机器人。


解决内存不足问题(常见崩溃元凶)

编译自定义包时,colcon build极易因内存耗尽而中断。

方案:增加Swap交换空间
# 创建2GB Swap文件 sudo fallocate -l 2G /swapfile # 设置权限 sudo chmod 600 /swapfile # 格式化为Swap sudo mkswap /swapfile # 启用 sudo swapon /swapfile # 开机自动挂载 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

这相当于给树莓派“虚拟扩容”内存,虽不如物理内存快,但能防止编译过程突然崩溃。


降低Wi-Fi延迟:关闭节能模式

无线网卡默认开启节能模式,会导致数据包延迟高达数百毫秒,严重影响ROS2通信。

禁用方法:

# 查看无线接口名 iw dev # 输出通常为 wlan0 # 关闭节能 sudo iw dev wlan0 set power_save off

可将其加入/etc/rc.local实现开机自动执行。


验证安装成果:让C++和Python节点“对话”

打开两个终端,分别运行以下命令:

🔹 终端1(发布者):

ros2 run demo_nodes_cpp talker

🔹 终端2(订阅者):

ros2 run demo_nodes_py listener

你应该看到Python终端不断打印来自C++节点的消息:

I heard: [Hello World: 1] I heard: [Hello World: 2] ...

✅ 成功了!这意味着:
- ROS2环境正常
- 跨语言通信畅通
- DDS工作良好

这是你在机器人开发路上迈出的第一步,值得截图留念。


实战案例:用树莓派5搭建一台简易移动机器人

设想这样一个场景:你想做一个能自动巡逻的小车。

结构如下:

[树莓派5] ←WiFi→ [PC上的RVIZ] ↓ [USB串口] → [Arduino电机驱动板] ↓ [GPIO] → [超声波传感器]

如何组织代码?

  1. 编写一个节点读取超声波数据,发布到/obstacle_distance
  2. 另一个节点订阅该话题,判断是否需要转向
  3. 通过串口发送PWM指令控制左右轮速度
  4. 在远端PC上用rviz2查看机器人状态

所有节点通过ROS2的Topic和服务解耦,修改任何一个模块都不会影响整体系统稳定性。


性能瓶颈怎么办?

树莓派5毕竟不是工控机,复杂算法如ORB-SLAM3很难实时运行。

💡 我的做法是:边缘采集 + 上位机处理

  • 树莓派只负责传感器数据采集与转发
  • 数据通过WiFi传给高性能PC进行建图与规划
  • PC返回目标点,树莓派执行局部路径跟踪

这样既发挥了树莓派低功耗、体积小的优势,又弥补了算力短板。


遇到问题怎么办?这几个“坑”你一定会踩

❌ 问题1:E: Unable to locate package ros-humble-desktop

原因
- 系统非Ubuntu 22.04
- APT源未正确添加
- 架构非aarch64

排查步骤

uname -m # 看是否为aarch64 lsb_release -cs # 看是否为jammy(22.04代号) cat /etc/apt/sources.list.d/ros2.list # 检查源地址拼写

❌ 问题2:colcon build失败,提示内存不足

解决方法
- 添加Swap(见上文)
- 或限制编译线程数:
bash colcon build --parallel-workers 1


❌ 问题3:节点通信延迟高或丢包

检查项
- 是否使用Wi-Fi?尽量改用有线
- 是否启用了电源管理?关闭power_save
- 是否QoS配置不合理?调整队列深度和可靠性策略

例如,在Python中设置可靠传输:

from rclpy.qos import QoSProfile, ReliabilityPolicy qos = QoSProfile(depth=10) qos.reliability = ReliabilityPolicy.RELIABLE

写在最后:你现在已经比大多数人走得更远

回顾一下我们做了什么:

  • 明确了树莓派5安装ros2的前提条件:64位系统、足够内存、稳定网络
  • 成功部署了ROS2 Humble并验证跨语言通信
  • 掌握了性能优化的关键技巧:Swap、DDS切换、节能关闭
  • 理解了如何构建一个真实的机器人控制系统

这些经验,没有哪本手册会完整告诉你。它们来自无数次失败、日志分析和社区问答的积累。

下一步你可以尝试:
- 接入RPLIDAR A1激光雷达,运行slam_toolbox建图
- 使用teleop_twist_keyboard遥控机器人移动
- 配置systemd实现ROS2节点开机自启

🚀 技术没有捷径,但可以少走弯路。
如果你在实现过程中遇到了其他挑战,欢迎在评论区分享讨论。我们一起把这条路走得更宽。


🔧附录:常用命令速查表

功能命令
检查架构uname -m
查看ROS2版本ros2 --version
列出所有节点ros2 node list
查看话题ros2 topic list
测试通信ros2 run demo_nodes_cpp talker+listener
设置Cyclone DDSexport RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
添加Swapsudo fallocate -l 2G /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
http://www.jsqmd.com/news/190501/

相关文章:

  • 建筑工具插件终极指南:7步快速掌握专业建筑建模技巧
  • Vue项目集成IndexTTS2语音播报功能,增强信息可读性
  • 基于Arduino蜂鸣器音乐代码的互动玩具项目应用
  • 7天快速掌握:CodeCombat游戏化编程从零到精通实战指南
  • QQ音乐解析工具完整教程:一键掌握全网音乐资源
  • 喜马拉雅下载器:一键批量保存音频,打造专属离线声音库
  • Markdown语法编写IndexTTS2技术文档,简洁清晰易发布
  • DEAP进化算法:解锁大数据分析的7个高效策略与分布式计算技巧
  • 音乐加密文件一键解锁:免费在线工具完整使用指南
  • Handheld Companion:终极Windows掌机游戏体验优化神器
  • 虚拟岛屿设计大师:从零开始打造你的专属梦幻岛
  • CyberpunkSaveEditor:终极赛博朋克2077存档编辑解决方案
  • 基于上位机软件的串口数据接收实战案例解析
  • m4s转换器:B站缓存视频永久保存的完整解决方案
  • Google Sheets云端协作分析IndexTTS2小规模实验数据
  • 燃尽图跟踪IndexTTS2开发进度,及时调整人力投入
  • 树莓派Python读取DS18B20传感器数据图解说明
  • ESP32连接OneNet云平台控制LED实战演示
  • huggingface镜像网站CDN加速原理:提升模型下载速度
  • Venera漫画阅读器技术解析与高效使用指南
  • JavaScript动态控制IndexTTS2语音播放进度条,提升用户体验
  • 基于Arduino的有源蜂鸣器驱动完整示例
  • STL转STEP完整教程:3步解决3D格式兼容难题
  • 高效获取B站视频数据的完整解决方案
  • Venera漫画阅读器:跨平台资源整合与个性化阅读新体验
  • iperf3 Windows网络性能测试终极指南:从入门到精通 [特殊字符]
  • Speechless微博备份终极指南:如何一键将微博内容导出为PDF文件
  • cc2530与PC通信调试:IAR平台下的串口实战案例
  • 如何彻底优化Windows 11系统:隐私保护与性能提升完整指南
  • Venera漫画阅读器完整使用攻略:从零基础到高效阅读的实践指南