贵州省网站建设_网站建设公司_测试上线_seo优化
2026/1/7 8:20:29 网站建设 项目流程

树莓派5上跑ROS2?别再被依赖和架构坑了!一文搞定从系统刷机到节点运行的全流程

你是不是也曾在树莓派5上尝试安装ROS2时,卡在“Unable to locate package ros-humble-desktop”这行错误前束手无策?又或者好不容易装上了,编译工作空间直接内存爆掉、系统冻结重启?

别急——这不是你的问题,而是树莓派5 + ROS2 这个组合本身就藏着不少“暗坑”:操作系统选错版本、架构不匹配、swap太小、散热跟不上……每一个都可能让你白忙半天。

本文将带你一步步穿越这些陷阱,从最基础的系统选择开始,到最终在树莓派5上成功运行一个自定义的ROS2发布者节点。全程基于实测环境(Ubuntu Server 22.04 LTS + ROS2 Humble),拒绝“理论上可行”,只讲你能复现的操作。


为什么非得用 Ubuntu 而不是 Raspberry Pi OS?

很多人第一反应是:“我用惯了Raspberry Pi OS,图形界面友好,驱动齐全。”
但如果你要在上面跑ROS2,那这条路几乎走不通。

关键原因只有一个:ROS2官方根本不支持Debian系的Raspberry Pi OS

  • ROS2 Humble Hawksbill 明确要求Ubuntu 22.04 Jammy Jellyfish
  • Raspberry Pi OS 基于 Debian Bookworm/Bullseye,软件源完全不同
  • 即使你强行添加ROS2的APT源,也会因为架构(armhf vs aarch64)或依赖库版本冲突而失败

📌 简单说:你想在树莓派5上跑ROS2,就得接受它是一台“小型服务器”——放弃桌面GUI,拥抱Ubuntu Server ARM64


第一步:准备系统镜像——刷入 Ubuntu Server 22.04 LTS(ARM64)

推荐系统版本

Ubuntu Server 22.04.3 LTS (Preinstalled Server image for Raspberry Pi)

✅ 官方支持 | ✅ 内核优化 | ✅ APT完整 | ✅ 支持aarch64

⚠️ 不推荐使用 Ubuntu Desktop 版本:图形占用资源多,且对树莓派5显卡支持尚不稳定。

刷机工具推荐: Raspberry Pi Imager

  1. 打开Imager →Choose OSOther general-purpose OS
  2. 展开 →UbuntuUbuntu Server 22.04 LTS (64-bit)
  3. Choose Storage→ 选择你的SD卡(建议≥32GB Class 10)
  4. 点击右上角齿轮图标,启用高级选项:
    - 设置主机名(如ros-pi5
    - 启用SSH(推荐使用密码登录+公钥认证)
    - 配置Wi-Fi(可选,有线更稳定)
    - 设置用户名和密码(别用默认pi/ubuntu)
  5. 写入镜像

📌 提示:写完后不要急着拔卡!确保boot分区可见后再安全弹出。


上电启动后必做的五件事

插入SD卡,连接电源(务必使用5V/5A Type-C官方电源),等待约30秒后通过路由器查看设备IP,然后SSH登录:

ssh your_user@<raspberry_pi_ip>

1. 更新系统并安装基础工具

sudo apt update && sudo apt full-upgrade -y sudo apt install curl gnupg2 lsb-release neofetch htop -y

👉 推荐运行neofetch看一眼当前系统信息,确认架构为aarch64,代号为jammy

2. 检查系统架构与版本(关键!)

echo "Arch: $(dpkg --print-architecture)" echo "Codename: $(lsb_release -cs)"

✅ 正确输出应为:

Arch: aarch64 Codename: jammy

❌ 如果显示armhfbullseye,说明你刷错了系统!


添加ROS2官方源——别跳过GPG密钥验证!

很多教程直接让你add-apt-repository,但在ARM64环境下必须手动处理GPG密钥,否则会报签名错误。

添加密钥和软件源

# 安装必要工具 sudo apt install curl gnupg2 lsb-release -y # 下载并信任ROS2 GPG密钥 curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | \ sudo gpg --dearmor -o /usr/share/keyrings/ros-archive-keyring.gpg # 添加ROS2 Humble源 echo "deb [arch=$(dpkg --print-architecture) 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 > /dev/null

📌 注意事项:
-signed-by=必须指定路径,否则APT不会信任该源
- URL不能加s(即用http://而非https://),某些旧版curl不支持HTTPS代理

更新包索引

sudo apt update

如果出现类似“无法获取 http://packages.ros.org/…”的错误,请检查网络是否能访问国外站点,或尝试更换DNS(如Google DNS8.8.8.8)。


安装ROS2:根据用途选择合适版本

方案一:完整桌面版(适合调试开发)

sudo apt install ros-humble-desktop -y

包含:
- rclpy / rclcpp
- RViz2 可视化工具
- Gazebo仿真
- ros2cli 工具集(topic,node,param等)

方案二:最小运行环境(适合部署上线)

sudo apt install ros-humble-ros-base -y

仅包含核心通信库和CLI工具,体积小、启动快,适合嵌入式场景。

💡 小贴士:如果你打算后续自己编译包,建议额外安装构建工具:

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

初始化ROS2环境变量——让命令随时可用

每次打开终端都要手动source太麻烦?我们把它写进.bashrc

自动配置脚本(可直接复制执行)

cat << 'EOF' >> ~/.bashrc # Source ROS2 Humble if [ -f /opt/ros/humble/setup.bash ]; then source /opt/ros/humble/setup.bash fi # Enable colcon autocomplete if [ -f /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash ]; then source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash fi EOF # 立即生效 source ~/.bashrc

现在你可以直接使用ros2 --version查看是否安装成功:

$ ros2 --version ros2 command version 0.14.0

创建第一个ROS2工作空间

mkdir -p ~/ros2_ws/src cd ~/ros2_ws colcon build --symlink-install

首次构建时间较长(约2~5分钟),完成后你会看到:

Summary: 0 packages finished

这是正常的,因为我们还没放任何包进去。

🔍--symlink-install的作用是创建符号链接,修改Python脚本后无需重新编译即可生效,极大提升开发效率。

激活环境:

source install/setup.bash

建议也将这句加入.bashrc,避免每次都要手动输入。


写一个简单的发布者节点(Python版)

让我们动手写一个能持续发送消息的节点,验证整个链路是否通畅。

1. 创建包目录结构

cd ~/ros2_ws/src ros2 pkg create my_publisher --build-type ament_python --dependencies rclpy std_msgs

生成的结构如下:

my_publisher/ ├── my_publisher/ │ └── publisher_node.py ├── package.xml ├── setup.py └── resource/my_publisher

2. 编辑主节点代码

# my_publisher/my_publisher/publisher_node.py import rclpy from rclpy.node import Node from std_msgs.msg import String class MinimalPublisher(Node): def __init__(self): super().__init__('minimal_publisher') self.publisher_ = self.create_publisher(String, 'chatter', 10) timer_period = 0.5 # 每0.5秒发一次 self.timer = self.create_timer(timer_period, self.timer_callback) self.i = 0 def timer_callback(self): msg = String() msg.data = f'Hello ROS2 World: {self.i}' self.publisher_.publish(msg) self.get_logger().info(f'Published: "{msg.data}"') self.i += 1 def main(args=None): rclpy.init(args=args) node = MinimalPublisher() rclpy.spin(node) rclpy.shutdown() if __name__ == '__main__': main()

3. 修改 entry_points(让命令行可调用)

编辑setup.py,找到entry_points字段:

entry_points={ 'console_scripts': [ 'talker = my_publisher.publisher_node:main', ], },

这样就可以用ros2 run my_publisher talker启动节点。


构建并运行你的第一个ROS2节点!

cd ~/ros2_ws colcon build --packages-select my_publisher source install/setup.bash ros2 run my_publisher talker

你应该会看到不断输出:

[INFO] [1712345678.123] [minimal_publisher]: Published: "Hello ROS2 World: 0" [INFO] [1712345678.623] [minimal_publisher]: Published: "Hello ROS2 World: 1" ...

🎉 成功了!你已经在树莓派5上运行起了自己的ROS2节点。


常见问题与实战避坑指南

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

排查步骤
1. 检查lsb_release -cs是否返回jammy
2. 检查dpkg --print-architecture是否为aarch64
3. 检查/etc/apt/sources.list.d/ros-latest.list内容是否正确
4. 执行sudo apt update时是否有来自ROS源的索引下载记录

⚠️ 最常见原因是用了Raspberry Pi OS 或 32位系统。


❌ 问题2:编译时报错 “Killed” 或 “Out of memory”

树莓派5虽然有4GB/8GB内存,但默认swap只有100MB,colcon build很容易撑爆。

解决方案:扩大swap文件
# 关闭当前swap sudo dphys-swapfile swapoff # 修改配置 sudo sed -i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=2048/g' /etc/dphys-swapfile # 重建并启用 sudo dphys-swapfile setup sudo dphys-swapfile swapon

📌 建议设置为2048MB(2GB),尤其是你要编译OpenCV、PCL这类大包时。


❌ 问题3:节点通信延迟高、丢包严重

尤其是在WiFi环境下,tf变换抖动大,RViz显示异常。

优化建议:
  • 使用有线以太网替代WiFi
  • 在PC端和Pi端关闭防火墙:
    bash sudo ufw disable
  • 对非关键话题使用best_effortQoS策略:
    python from rclpy.qos import QoSProfile qos = QoSProfile(depth=10) qos.reliability = ReliabilityPolicy.BEST_EFFORT self.create_subscription(String, 'sensor_data', callback, qos)

❌ 问题4:开机过热降频,性能下降

树莓派5满载功耗可达8W以上,被动散热不够看。

应对措施:
  1. 安装金属散热外壳(推荐官方款)
  2. /boot/firmware/config.txt中添加温控策略:
# 温度控制:60°C开始降温,70°C强制限频 temp_soft_limit=60 temp_hard_limit=70
  1. 监控温度:
watch -n 1 vcgencmd measure_temp

理想运行温度应在60°C以下。


实战场景:把树莓派5变成移动机器人主控大脑

想象一下这个典型架构:

[树莓派5] ├── USB摄像头 → 图像采集 → image_transport ├── RPLIDAR A1 → 激光扫描 → SLAM Toolbox ├── TB6612电机驱动(GPIO PWM)→ 控制底盘运动 ├── MPU6050(I²C)→ IMU数据融合 → robot_localization └── Nav2导航栈 → 接收目标点 → 自主导航避障

所有模块通过ROS2话题互联,状态统一监控,真正实现“轻量级全栈机器人”。

你可以进一步接入:
- TensorFlow Lite模型做物体识别
- Micro-ROS连接STM32下位机
- MQTT桥接云端指令

这一切的基础,就是你现在完成的这套树莓派5 + ROS2环境。


结语:你已经迈出了机器人工程师的第一步

当你在树莓派5上成功运行第一个ros2 run命令时,你就不再是“爱好者”了——你是能落地系统的开发者

本文没有堆砌术语,也没有跳过任何一个看似微不足道的细节。因为我们知道,正是那些“明明照着做却不行”的瞬间,最让人沮丧。

而现在,你有了完整的知识链:
- 知道该用什么系统
- 知道怎么配源
- 知道如何避免内存爆炸
- 知道怎么写出可运行的节点
- 更重要的是,你知道出了问题该怎么查

下一步,不妨试试把摄像头接上,跑通usb_cam驱动,再用cv_bridge把图像转成OpenCV格式处理。你会发现,整个机器人世界的大门,正在缓缓打开

如果你在实践中遇到新问题,欢迎留言讨论。毕竟,真正的技术,永远生长在真实的问题土壤里。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询