2026/2/20 18:28:52
网站建设
项目流程
手机怎么做3d短视频网站,建筑公司企业愿景,黑马教育培训官网,如何制作出优秀的ui设计树莓派5上跑ROS2#xff1f;别再被依赖和架构坑了#xff01;一文搞定从系统刷机到节点运行的全流程 你是不是也曾在树莓派5上尝试安装ROS2时#xff0c;卡在“ Unable to locate package ros-humble-desktop ”这行错误前束手无策#xff1f;又或者好不容易装上了…树莓派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 OSROS2 Humble Hawksbill 明确要求Ubuntu 22.04 Jammy JellyfishRaspberry Pi OS 基于 Debian Bookworm/Bullseye软件源完全不同即使你强行添加ROS2的APT源也会因为架构armhf vs aarch64或依赖库版本冲突而失败 简单说你想在树莓派5上跑ROS2就得接受它是一台“小型服务器”——放弃桌面GUI拥抱Ubuntu Server ARM64。第一步准备系统镜像——刷入 Ubuntu Server 22.04 LTSARM64推荐系统版本Ubuntu Server 22.04.3 LTS (Preinstalled Server image for Raspberry Pi)✅ 官方支持 | ✅ 内核优化 | ✅ APT完整 | ✅ 支持aarch64⚠️ 不推荐使用 Ubuntu Desktop 版本图形占用资源多且对树莓派5显卡支持尚不稳定。刷机工具推荐 Raspberry Pi Imager打开Imager →Choose OS→Other general-purpose OS展开 →Ubuntu→Ubuntu Server 22.04 LTS (64-bit)Choose Storage→ 选择你的SD卡建议≥32GB Class 10点击右上角齿轮图标启用高级选项- 设置主机名如ros-pi5- 启用SSH推荐使用密码登录公钥认证- 配置Wi-Fi可选有线更稳定- 设置用户名和密码别用默认pi/ubuntu写入镜像 提示写完后不要急着拔卡确保boot分区可见后再安全弹出。上电启动后必做的五件事插入SD卡连接电源务必使用5V/5A Type-C官方电源等待约30秒后通过路由器查看设备IP然后SSH登录ssh your_userraspberry_pi_ip1. 更新系统并安装基础工具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❌ 如果显示armhf或bullseye说明你刷错了系统添加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_publisher2. 编辑主节点代码# 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 fHello ROS2 World: {self.i} self.publisher_.publish(msg) self.get_logger().info(fPublished: {msg.data}) self.i 1 def main(argsNone): rclpy.init(argsargs) 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节点。常见问题与实战避坑指南❌ 问题1E: Unable to locate package ros-humble-*排查步骤1. 检查lsb_release -cs是否返回jammy2. 检查dpkg --print-architecture是否为aarch643. 检查/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只有100MBcolcon build很容易撑爆。解决方案扩大swap文件# 关闭当前swap sudo dphys-swapfile swapoff # 修改配置 sudo sed -i s/CONF_SWAPSIZE100/CONF_SWAPSIZE2048/g /etc/dphys-swapfile # 重建并启用 sudo dphys-swapfile setup sudo dphys-swapfile swapon 建议设置为2048MB2GB尤其是你要编译OpenCV、PCL这类大包时。❌ 问题3节点通信延迟高、丢包严重尤其是在WiFi环境下tf变换抖动大RViz显示异常。优化建议使用有线以太网替代WiFi在PC端和Pi端关闭防火墙bash sudo ufw disable对非关键话题使用best_effortQoS策略python from rclpy.qos import QoSProfile qos QoSProfile(depth10) qos.reliability ReliabilityPolicy.BEST_EFFORT self.create_subscription(String, sensor_data, callback, qos)❌ 问题4开机过热降频性能下降树莓派5满载功耗可达8W以上被动散热不够看。应对措施安装金属散热外壳推荐官方款在/boot/firmware/config.txt中添加温控策略# 温度控制60°C开始降温70°C强制限频 temp_soft_limit60 temp_hard_limit70监控温度watch -n 1 vcgencmd measure_temp理想运行温度应在60°C以下。实战场景把树莓派5变成移动机器人主控大脑想象一下这个典型架构[树莓派5] ├── USB摄像头 → 图像采集 → image_transport ├── RPLIDAR A1 → 激光扫描 → SLAM Toolbox ├── TB6612电机驱动GPIO PWM→ 控制底盘运动 ├── MPU6050I²C→ IMU数据融合 → robot_localization └── Nav2导航栈 → 接收目标点 → 自主导航避障所有模块通过ROS2话题互联状态统一监控真正实现“轻量级全栈机器人”。你可以进一步接入- TensorFlow Lite模型做物体识别- Micro-ROS连接STM32下位机- MQTT桥接云端指令这一切的基础就是你现在完成的这套树莓派5 ROS2环境。结语你已经迈出了机器人工程师的第一步当你在树莓派5上成功运行第一个ros2 run命令时你就不再是“爱好者”了——你是能落地系统的开发者。本文没有堆砌术语也没有跳过任何一个看似微不足道的细节。因为我们知道正是那些“明明照着做却不行”的瞬间最让人沮丧。而现在你有了完整的知识链- 知道该用什么系统- 知道怎么配源- 知道如何避免内存爆炸- 知道怎么写出可运行的节点- 更重要的是你知道出了问题该怎么查下一步不妨试试把摄像头接上跑通usb_cam驱动再用cv_bridge把图像转成OpenCV格式处理。你会发现整个机器人世界的大门正在缓缓打开。如果你在实践中遇到新问题欢迎留言讨论。毕竟真正的技术永远生长在真实的问题土壤里。