
树莓派4B这个板子我前前后后折腾了不少玩法但要说最有机器人味儿的组合还是拿它跑ROS2。Humble是ROS2里目前生态最稳、教程最多、第三方包兼容性最好的一个发行版配上树莓派4B基本就是入门机器人开发最划算的一套硬件方案。这篇文章就把我从烧录系统到跑通小乌龟、再到建工作空间编译节点的完整过程捋一遍中间所有踩过的坑、验证过能用的命令、以及第一次装容易懵的地方全部写清楚。这篇文章适合手里有树莓派4B、刚接触ROS2、又不想被网上各种碎片教程绕晕的读者。不管你是学生做课设还是工程师想低成本验证算法按这个流程走一遍基本当天就能把环境跑起来后面再学话题、服务、动作这些概念就有地方动手试了。1. 整体拆解这么一套组合为什么值得折腾1.1 树莓派4B ROS2到底解决了什么问题很多人在电脑上装完Ubuntu和ROS2之后发现最大的瓶颈是代码写出来了但没有真实硬件可以验证。买个现成的移动机器人底盘至少两三千起步而树莓派4B加一堆传感器的成本要低得多性能也够跑导航、SLAM这类入门级的机器人应用。更关键的是树莓派4B的GPIO引脚可以直接接电机驱动、激光雷达、摄像头等于你有一套可以自己攒的机器人小脑。我选树莓派4B而不是更便宜的三代或者Zero原因很直接ROS2本身对内存和CPU的要求不低编译工作空间、跑rviz2可视化、同时开好几个节点4B的4核Cortex-A72处理器和4GB起步的内存才能扛得住。你要是用Zero跑ROS2光编译一个小功能包就能等得怀疑人生。1.2 为什么选Humble而不是别的ROS2版本ROS2的发行版更新节奏比较快但真正常被教程、第三方库、硬件驱动支持的版本就那么几个。Humble Hawksbill是2022年发布的LTS长期支持版本支持到2027年这意味着你现在装的这套环境后面两三年都不用担心官方停止维护。对比一下更容易理解Foxy是ROS2早期的LTS很多老教程基于它写的但功能包生态已经慢慢往新版本迁移Jazzy是2024年的新LTS功能先进但一些硬件驱动和第三方库还没完全跟上。Humble卡在中间既有新版本的特性又有足够长的维护周期社区里的踩坑记录也最多遇到问题一搜就能找到解决方案。对于树莓派4B这种性能不算富裕的板子Humble的稳定性和兼容性明显更友好。2. 准备阶段硬件清单与系统镜像选择2.1 硬件配置建议别在电源和存储上省钱树莓派4B虽然是一块几百块钱的板子但外围配件的选择直接影响后面能不能稳定跑ROS2。我第一台树莓派就是因为电源不达标Wi-Fi模块频繁掉线、USB设备随机断开排查了半天才发现是供电不稳。关键的几样东西树莓派4B主板建议8GB内存版本预算有限至少也要4GB。ROS2跑起来以后Ubuntu桌面系统本身就吃掉将近2GB再开几个节点和rviz24GB会非常紧张8GB才能谈得上从容。TF卡建议64GB起步读写速度要选A2等级。ROS2的日志、编译中间文件、Docker镜像都很占空间32GB我实际用下来很快就满了。电源5V/3A USB-C口原装电源最稳。千万别用手机充电头凑合很多手机头虽然写着支持PD协议但树莓派4B的USB-C口用的是特殊的协商方式供电识别有问题直接导致性能下降和USB外设掉线。散热必须加装。编译ROS2功能包的时候CPU长时间满载没有散热片和风扇温度轻松到85度以上降频之后编译速度慢到怀疑人生严重时直接关机。网络有条件插网线没条件用5G Wi-Fi也行但后面运行多机通信或micro-ROS的时候有线网络稳定性优势非常明显。2.2 Ubuntu 22.04镜像是关键别用错版本ROS2 Humble官方支持的是Ubuntu 22.04 Jammy这一点不能搞错。之前有人拿Ubuntu 20.04装Humble装到一半各种依赖错误最后折腾一晚上还是得重装系统。树莓派4B跑Ubuntu 22.04有两种官方渠道的镜像可以选择一种是Ubuntu Server 22.04.x纯命令行占用资源少适合远程开发或者搭建无桌面机器人系统另一种是带图形界面的完整Desktop版本视觉上更友好开箱就能看到桌面。标题里说的是Desktop版本但实际做机器人开发我更推荐一个折中方案装Server版后面按需自己装一个轻量级桌面或者完全不装桌面直接用SSH VS Code Remote开发。这样系统资源全部留给ROS2树莓派跑起来流畅很多。如果你一定要装完整Desktop版也不是不行但有两个心理准备一是开机后内存占用可能直接飙到2GB以上二是系统UI动画会有轻微卡顿。我的处理方式是关掉桌面特效、卸载不必要的预装软件尽量让系统保持干净。镜像从Ubuntu官网下载树莓派专用版本就行别拿PC版的ISO硬刷引导方式不一样刷进去也起不来。3. 实操第一步系统烧录与开机基础配置3.1 烧录镜像的两个方法小白推荐官方工具烧录树莓派系统目前最省事的是用树莓派官方出的Raspberry Pi Imager工具。这个工具有个好处它不只是把镜像写进TF卡还会在写完之后帮你配置SSH开关、Wi-Fi账号、默认用户名密码这些基础设置省得开机以后还要接显示器键盘操作一遍。用官方Imager烧录的步骤把TF卡通过读卡器插到电脑上打开Raspberry Pi Imager。点击Choose OS往下翻到Other general-purpose OS选Ubuntu再选22.04.x版本对应的树莓派4B镜像。点击Choose Storage选中你的TF卡注意别选错磁盘。点Next之后工具会问你是否要应用个性化设置这里选Edit settings把SSH开启、Wi-Fi账号密码填好、设置一个自定义用户名和密码。确认写入等进度条跑完把TF卡插回树莓派通电开机。如果不想用官方工具也可以用balenaEtcher直接烧录下载好的Ubuntu镜像。但注意用Etcher烧完以后SSH默认是关闭的也没有预设Wi-Fi第一次必须接显示器和键盘进系统手动配置麻烦不少。3.2 第一次开机先把源和基础工具配好树莓派开机以后如果用Ubuntu官方镜像默认用户名可能是你在Imager里设置的名字也可能是ubuntu/ubuntu这个默认组合密码会在第一次登录时强制修改。登录成功后我习惯先做三件事第一件事是换软件源。Ubuntu官方源在国内访问速度不稳定装软件动不动就等半天。打开/etc/apt/sources.list.d/ubuntu.sources这个文件把里面的地址从archive.ubuntu.com换成国内镜像站地址我常用的是清华或者阿里的源具体地址根据自己的网络环境选。第二件事是安装基础工具链包括git、curl、vim这些后面经常要用的东西一条命令解决sudo apt update sudo apt upgrade -y sudo apt install -y git curl vim net-tools第三件事是设置静态IP或者至少固定一下DHCP分配的IP。树莓派放路由器下面如果每次开机IP都变后面SSH连接非常难受。可以在Ubuntu的netplan配置里直接把IP写死具体路径是/etc/netplan/01-network-manager-all.yamlDesktop版可能是其他文件名改完以后sudo netplan apply生效。4. ROS2 Humble安装一键脚本还是手动编译4.1 鱼香ROS一键安装实测最省心的方式树莓派4B装ROS2 Humble我验证过两条路一种是完全按照官方文档手动添加源、手动安装另一种是用社区的一键安装脚本。两条路都能通但如果你不想在环境配置上浪费太多时间我强烈建议用鱼香ROS的一键安装脚本。说起来这个脚本最开始我也是抱着试试看的心态用的毕竟网上教程里推荐的安装命令五花八门谁也不知道靠不靠谱。但实际跑下来这个脚本确实做到了自动化处理依赖和源配置执行完就能直接用省掉了手动配源、解决依赖冲突这些最磨人的环节。执行方式很简单wget http://fishros.com/install -O fishros . fishros脚本运行后会弹出菜单选择安装ROS2再选humble版本根据自己的系统配置选桌面版或基础版。整个过程脚本自动完成中间可能会问几个选项新手全部保持默认即可。装完以后关掉终端重新打开先验证一下环境变量有没有配置好printenv | grep ROS_DISTRO能输出humble就说明装成功了。4.2 手动安装流程理解原理的备选方案如果你有洁癖不想用第三方脚本或者想搞明白ROS2到底装了哪些东西手动安装的完整流程也不复杂核心步骤就几步添加ROS2的软件源导入GPG密钥sudo apt install -y software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install -y curl sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null然后安装完整桌面版包含rviz2、demo、tutorials等sudo apt update sudo apt install -y ros-humble-desktop最后初始化rosdep并配置环境变量sudo rosdep init rosdep update echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc手动安装的好处是你能清楚地知道系统里多了哪些东西以后排查问题更快。坏处是如果网络环境不理想下载ros-humble-desktop这个包的时候可能会反复超时解决起来挺闹心的。两种方式我建议这样选择第一次装用一键脚本跑通了以后再去翻官方文档理解原理已经有一定基础了完全可以手动装体验一下完整的安装流程。5. 核心实操跑通小乌龟、创建自己的工作空间5.1 小乌龟测试验证ROS2通信是否正常很多教程上来就让你跑小乌龟demo但没说清楚为什么要跑这一步。其实小乌龟demo是验证ROS2安装是否成功的最快方法它能跑起来说明ROS2的核心通信机制、节点发现、话题订阅发布全链路都是通的。打开一个终端启动乌龟模拟器ros2 run turtlesim turtlesim_node这时候会弹出一个蓝色背景的窗口里面有一只小乌龟这个窗口就是turtlesim节点渲染出来的画面。再打开一个终端启动键盘控制节点ros2 run turtlesim turtle_teleop_key焦点切到键盘控制节点的终端按方向键小乌龟就会在窗口里移动并且身后会画出移动轨迹。我习惯再追加一步验证用命令行看当前有哪些节点在运行ros2 node list正常情况下会输出两个节点名/teleop_turtle和/turtlesim这就说明整个系统通信正常。小乌龟demo跑通以后还可以顺手试一下ros2 topic list、ros2 topic echo /turtle1/pose这些命令提前感受一下ROS2的话题机制是怎么运作的。5.2 创建工作空间第一个Python发布订阅节点小乌龟跑通只是验证了系统环境真正的开发工作要从创建工作空间开始。ROS2的工作空间本质上就是一个固定的目录结构用来组织你的功能包、编译中间文件和安装产物。我现在演示创建一个名为ros2_ws的工作空间里面放一个订阅发布的小节点完整走一遍创建-编译-运行的流程mkdir -p ~/ros2_ws/src cd ~/ros2_ws/src ros2 pkg create --build-type ament_python py_pubsub这个命令会生成一个标准的Python功能包结构包含package.xml、setup.py、setup.cfg和resource目录。接下来在py_pubsub/py_pubsub目录下新建两个Python文件一个发布节点一个订阅节点。发布节点publisher.py的核心逻辑import rclpy from rclpy.node import Node from std_msgs.msg import String class Publisher(Node): def __init__(self): super().__init__(publisher) self.publisher self.create_publisher(String, topic, 10) self.timer self.create_timer(1.0, self.callback) def callback(self): msg String() msg.data Hello ROS2 Humble self.publisher.publish(msg) self.get_logger().info(Publishing: %s % msg.data) def main(argsNone): rclpy.init(argsargs) node Publisher() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__ __main__: main()订阅节点subscriber.py的核心逻辑import rclpy from rclpy.node import Node from std_msgs.msg import String class Subscriber(Node): def __init__(self): super().__init__(subscriber) self.subscription self.create_subscription(String, topic, self.callback, 10) def callback(self, msg): self.get_logger().info(Received: %s % msg.data) def main(argsNone): rclpy.init(argsargs) node Subscriber() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__ __main__: main()写完代码以后还需要修改setup.py把入口点配置好entry_points{ console_scripts: [ publisher py_pubsub.publisher:main, subscriber py_pubsub.subscriber:main, ], },回到工作空间根目录编译cd ~/ros2_ws colcon build --symlink-install source install/setup.bash编译参数--symlink-install值得多说一句它会把源码目录用软链接的方式链接到install目录这样你修改Python代码后不用重新编译直接生效对于Python功能包开发来说效率提升非常明显。跑起来验证终端Aros2 run py_pubsub publisher终端Bros2 run py_pubsub subscriber终端B收到消息并且打印出来就说明工作空间开发流程完全跑通了。5.3 rviz2可视化装上你的机器人之眼ROS2生态里最常用的可视化工具是rviz2它能把传感器数据、机器人模型、路径规划结果都显示在三维画面里。Humble的desktop版本默认已经装好了rviz2直接用命令启动rviz2第一次打开rviz2界面是空的需要在左侧的Displays面板里点击Add添加显示组件。常用的是添加RobotModel来显示机器人URDF模型添加LaserScan来显示激光雷达数据添加Map来显示导航地图。rviz2这种插件化的设计本质上就是把不同数据话题以可视化插件的形式挂载到同一个三维场景中这个概念理解了后面玩导航、机械臂仿真就顺了。6. 常见问题与排查技巧实录6.1 安装和编译阶段的高频报错我在树莓派4B上装ROS2的过程中以及后来帮身边朋友排查问题的时候遇到过不少报错下面这些是出现频率最高的报错现象根本原因解决方法运行ros2命令提示command not found环境变量没配置执行source /opt/ros/humble/setup.bash并写入~/.bashrccolcon build时卡住或内存不足被kill树莓派内存不够编译消耗加swapsudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfileapt install时部分依赖版本冲突系统源和ROS源版本不匹配先sudo apt update再更新系统sudo apt full-upgrade编译时CPU温度过高自动关机散热不足加装散热片和风扇编译时放在通风处启动多个节点后界面卡顿严重内存不足系统频繁Swap减少同屏运行的节点数量或者使用Server版系统减少桌面开销Wi-Fi连接不稳定节点间歇性丢失5G频段信号弱或电源供电不足优先插网线检查电源是否原装5V/3A6.2 运行时的性能调优技巧树莓派4B跑ROS2性能调优的核心思路只有一个尽可能把资源留给ROS2系统本身越精简越好。我实际用下来有几个立竿见影的操作。禁用桌面自带的动画特效。在Desktop版Ubuntu上GNOME桌面的动画效果有轻微GPU消耗通过安装gnome-tweaks把动画关掉系统流畅度会有改善这个操作虽然省不了太多资源但胜在无风险。调整swap策略。树莓派默认的swap配置在内存压力大的时候交换速度很慢容易拖垮整个系统的响应速度。我习惯把swap的swappiness值调到10意思是只有内存使用超过90%才使用swap避免系统没事就去读写swap文件。echo vm.swappiness10 | sudo tee /etc/sysctl.d/99-swappiness.conf sudo sysctl -p /etc/sysctl.d/99-swappiness.conf再说一个关于日志的技巧。ROS2默认会给每个话题的消息记录日志写到~/.ros/log目录时间长了非常占空间。在做长时间测试的时候我习惯在启动命令后面加上--ros-args --log-level warn只输出警告以上级别的日志减少I/O开销。树莓派的TF卡读写寿命有限少写日志对TF卡也是一种保护。6.3 扩展方向micro-ROS和嵌入式开发树莓派4B跑ROS2玩熟以后最大的扩展方向是micro-ROS。简单理解micro-ROS就是让ESP32、STM32这类单片机也能接入ROS2网络的客户端库。机器人系统通常是上位机加下位机的架构树莓派作为上位机负责复杂计算和决策单片机作为下位机负责电机控制和传感器采集两端通过micro-ROS Agent建立通信。我踩过的一个典型坑是拉取micro-ROS Agent镜像时提示unable to find image microros/micro-ros-agent:humble locally这是因为Docker本地没有缓存这个镜像而网络又拉取不下来。解决方式是先手动确认Docker能正常访问镜像仓库再执行拉取docker pull microros/micro-ros-agent:humble如果镜像拉不下来检查一下Docker的镜像源配置。这个方向一旦跑通树莓派4B的力量才能真正全部发挥出来后面做一辆完整的ROS2小车基本就是把这篇文章里的环境复制到机器人上然后加上电机驱动和传感器就行。7. 写在最后的个人体会树莓派4B跑ROS2 Humble这套环境我自己前前后后完整装过不下五次第一次花了一整个下午最后一次半小时就搞定。经验这东西就是这样第一次每一步都小心翼翼反而不顺后面熟练了知道哪里容易出错反而快得多。我对新手的建议是第一遍严格按教程走不要跳步第二遍故意把环境弄坏几次再从头装一遍这个过程比看十篇教程都有用。装完环境以后别急着学复杂的概念先把小乌龟玩熟了把发布订阅节点自己写一遍然后在rviz2里把传感器数据显示出来这才是ROS2最核心的话题-节点-数据流心智模型。另外提醒一句树莓派4B的GPIO引脚功能图最好存一份在手机里后面接电机驱动、路由器模块、激光雷达的时候经常要翻省得每次上网查。现在这套环境搭好了下一步无论是做SLAM导航、机械臂仿真还是接ESP32做micro-ROS下位机都有了坚实的基础剩下的就是选一个方向坚持下去遇到问题慢慢查、慢慢试基本都能走出来。