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

树莓派5安装ROS2:新手入门必看的完整指南

树莓派5跑通ROS2:从零开始的实战部署全记录

最近在捣鼓一个小型移动机器人项目,主控平台选了刚入手的树莓派5。这板子性能确实够劲——四核A76、2.4GHz主频、支持M.2 SSD扩展,怎么看都比前代强一大截。但真正上手才发现,想让它稳稳地跑起ROS2,远不是装个系统那么简单。

尤其是当你第一次面对E: Unable to locate package ros-humble-desktop这种报错时,那种“明明步骤都对,怎么就不行”的挫败感,我太懂了。

所以这篇文不走花哨路线,也不堆术语。我会像带徒弟一样,一步步带你把树莓派5安装ROS2这件事彻底搞定。中间踩过的坑、绕过的雷、调过的参数,全给你摊开讲明白。两个小时后,你的树莓派也能跑出第一个talker/listener通信节点。


为什么非得是Ubuntu Server 64位?

很多人第一步就栽在这儿:用了默认的Raspberry Pi OS(32位),结果后面装ROS2各种包找不到、编译失败。

关键点就一个:ROS2官方二进制包只针对AArch64架构提供完整支持,而32位系统连ros-humble-ros-base都装不上。

树莓派5虽然硬件是64位的(Cortex-A76 + LPDDR4X),但出厂镜像默认还是32位桌面版。你得主动选——而且必须用Ubuntu Server 22.04.3 LTS ARM64镜像。

别小看这个选择。Ubuntu Server有几个致命优势:
- 原生64位内核,突破4GB内存限制;
- 无GUI,资源占用低,适合长时间运行机器人任务;
- APT源与ROS2完美兼容,不用自己编译一万个依赖;
- systemd服务管理靠谱,开机自启ROS节点不翻车。

✅ 检查命令:烧录完成后启动,执行uname -m,看到输出aarch64才算过关。


系统初始化不能跳,尤其网络和用户配置

很多教程直接跳到“添加ROS源”,可如果你连SSH都登不上去,怎么继续?

我建议首次启动时做好三件事:

1. 用cloud-init自动配置基础环境

microSD卡烧录完后,打开system-boot分区,新建两个文件:

user-data(注意权限设为600):

#cloud-config hostname: robot-controller timezone: Asia/Shanghai users: - name: pi plain_text_passwd: 'raspberry' shell: /bin/bash sudo: ['ALL=(ALL) NOPASSWD:ALL'] lock_passwd: false package_update: true packages: - vim - htop - net-tools - openssh-server write_files: - path: /etc/netplan/99-wifi.yaml content: | network: version: 2 wifis: wlan0: dhcp4: yes access-points: "your_wifi_ssid": password: "your_wifi_password" runcmd: - [ systemctl, enable, ssh ] - [ systemctl, start, ssh ]

meta-data(留空即可)

这样插电启动后,树莓派会自动连接Wi-Fi、设置主机名、开启SSH,你只需要从路由器后台查IP就能远程登录,根本不用接显示器。


ROS2 Humble到底怎么装才不报错?

现在终于可以动真格的了。重点来了:不要照搬ROS官网x86的安装脚本!

ARM64平台有些细节不一样,稍不留神就会卡住。

第一步:确认系统版本匹配

ROS2 Humble只支持Ubuntu 22.04(代号 jammy)。执行:

lsb_release -cs

如果输出不是jammy,说明你用错了镜像,赶紧换。

第二步:正确添加软件源

很多人复制粘贴curl命令,结果密钥导入失败。稳妥做法分两步走:

# 安装必要工具 sudo apt update && sudo apt install -y curl gnupg lsb-release # 下载并信任ROS GPG密钥 curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | \ sudo gpg --dearmor -o /usr/share/keyrings/ros-archive-keyring.gpg # 添加源(注意arch=arm64) echo "deb [arch=arm64 signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \ http://packages.ros.org/ros2/ubuntu jammy main" | \ sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

这里特别强调arch=arm64,否则APT可能误判架构导致找不到包。

第三步:安装核心包

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

ros-base是最小化安装,适合嵌入式设备。如果你打算在树莓派上开RViz调试,再加一句:

sudo apt install -y ros-humble-desktop

但说实话,除非你接了HDMI屏,否则还是推荐远程用PC跑RViz更流畅。

第四步:装好构建工具链

以后要写自己的ROS节点,少不了colcon:

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

然后把环境变量写进去:

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

验证:让C++和Python节点说上话

最简单的验证方式,不是看版本号,而是让两个语言写的节点通上信。

新开终端,运行:

ros2 run demo_nodes_cpp talker

再开一个终端:

ros2 run demo_nodes_py listener

如果看到Python终端不断打印"I heard: [Hello World]",恭喜你,ROS2通信链路已经打通!

这是DDS中间件在背后工作——基于Fast DDS实现的发布/订阅模型,跨语言、跨进程都没问题。


实战场景:我的小车是怎么跑起来的

我在一台差速驱动小车上做了集成测试,结构很简单:

  • 树莓派5作为主控,通过UART读取IMU数据,I²C接ToF传感器;
  • GPIO输出PWM控制TB6612电机驱动板;
  • 摄像头模块走CSI接口,用raspicam2_node发布图像流;
  • 上位机通过Wi-Fi连接,用rviz2查看TF变换和地图。

启动流程全交给systemd托管:

# /etc/systemd/system/robot.service [Unit] Description=ROS2 Robot Stack After=network.target [Service] Type=simple User=pi WorkingDirectory=/home/pi ExecStart=/bin/bash -c "source /opt/ros/humble/setup.bash && ros2 launch my_robot bringup.launch.py" Restart=always [Install] WantedBy=multi-user.target

执行sudo systemctl enable robot,下次上电自动拉起整个导航栈。


踩过最多的三个坑,你现在就可以避开

❌ 坑一:摄像头打不开,提示/dev/video0: No such file or directory

原因:没启用相机支持。

解决办法:编辑/boot/firmware/config.txt,加上这两行:

start_x=1 gpu_mem=128

重启后就能看到设备节点了。


❌ 坑二:节点之间ping不通,甚至发现不了彼此

典型症状:ros2 node list空空如也。

排查方向:
1. 检查是否设置了相同的ROS_DOMAIN_ID(默认是0,不同设备要一致)
bash export ROS_DOMAIN_ID=1
2. 关闭防火墙或放行UDP多播端口(DDS用5353等)
3. Wi-Fi路由器是否禁用了AP隔离?这个功能会阻止设备互访。


❌ 坑三:系统越跑越慢,最后死机

树莓派5发热不小,特别是跑SLAM的时候。

应对策略:
- 加装散热片+风扇;
- 使用M.2 NVMe SSD替代microSD卡,减少IO等待;
- 禁用蓝牙:sudo systemctl disable bluetooth
- 降低CPU温度阈值触发降频前预警:
bash vcgencmd measure_temp


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

当你成功在树莓派5上跑通第一个ROS2程序,其实才刚刚推开机器人世界的大门。

接下来你可以尝试:
- 接入激光雷达做建图(Lidar + SLAM Toolbox);
- 部署Nav2实现自主导航;
- 用MoveIt2控制机械臂;
- 或者干脆做个ROS2+Arduino双MCU架构,分工协作。

更重要的是,这套部署逻辑完全可以复用到其他ARM64平台——Jetson Nano、Orange Pi、Radxa Rock等等。掌握了“操作系统 → 环境配置 → 包管理 → 服务部署”这条主线,你就不再是个只会抄命令的新手。

如果你正在做类似项目,或者遇到了我没提到的奇葩问题,欢迎留言交流。毕竟搞嵌入式,谁还没被内核日志折磨过呢?

http://www.jsqmd.com/news/190787/

相关文章:

  • 终极指南:快速搭建智能拟人化微信聊天机器人的完整方案
  • Divinity Mod Manager终极指南:告别模组管理烦恼的神器
  • BERTopic可视化实战:从数据迷雾到洞察清晰的5大场景解析
  • Pokémon Showdown完全解析:从新手到高手的宝可梦对战平台
  • 新浪邮箱移动端调用IndexTTS2 API实现驾车模式
  • OpenAI API JSON数据解析实战指南
  • 文字驱动CAD设计:智能建模技术深度解析
  • CatServer终极配置手册:快速搭建高性能Minecraft服务器
  • 如何5分钟快速修复损坏MP4视频:新手必备的终极解决方案
  • javascript debounce防抖处理IndexTTS2频繁请求
  • LibreCAD免费开源2D CAD设计终极指南:从零基础到专业精通完整教程
  • 使用Arduino IDE实现ESP32-CAM拍照功能实战案例
  • Nginx反向代理配置解决公网访问IndexTTS2 WebUI的安全隐患
  • 5分钟掌握:Oni-Duplicity如何让你成为《缺氧》游戏的主宰者
  • Mi-Create:零代码打造小米手表个性化表盘的终极方案
  • SlopeCraft终极指南:轻松创作惊艳的Minecraft立体地图画
  • 3分钟搞懂特征值分解:数据降维的魔法钥匙
  • Inno Setup中文界面配置完整指南:实现专业级本地化体验
  • ControlNet++终极指南:从零掌握多条件AI图像生成技术
  • typora mermaid流程图绘制IndexTTS2数据流向
  • 微信小程序开发canvas绘图展示IndexTTS2声谱图
  • 如何快速迁移语雀文档:免费开源工具完整指南
  • 如何通过本地化策略实现全球化用户增长:Windhawk案例分析
  • Moonlight安卓修改版:打造终极游戏串流体验的完整指南
  • 5分钟搞定语雀文档迁移:免费开源导出工具完整指南
  • 游戏日常任务自动化:一键完成的终极解决方案
  • huggingface镜像网站evaluate加载指标评估IndexTTS2性能
  • 3天快速上手!用YiShaAdmin构建你的第一个企业级后台管理系统
  • 深度剖析Arduino IDE中ESP32开发的FreeRTOS任务调度机制
  • 将IndexTTS2接入企业微信机器人实现自动语音通知功能