
前段时间收拾工作台翻出一块吃灰挺久的树莓派4B4GB内存版之前一直当小型服务器跑点脚本性能绰绰有余。最近在折腾ROS2机器人开发手头又没有多余的x86主机做测试节点就琢磨着把这台树莓派利用起来直接装一套ROS2 Humble跑仿真和SLAM。结果一搜资料发现网上教程要么是旧版Ubuntu 20.04配ROS2 Foxy要么就是用Docker临时解决能在一台完整Ubuntu Desktop系统上长期稳定跑ROS2 Humble的实操记录很少。这篇就总结一下我在这块板子上从零配置Ubuntu Desktop 22.04到ROS2 Humble的完整过程顺便把踩过的坑和排查思路都整理出来给想在ARM平台玩ROS2的朋友做个参考。先说结论树莓派4B跑ROS2 Humble完全没问题前提是选对系统版本——别用树莓派官方系统直接用Ubuntu Server或Desktop 22.04 LTS因为ROS2 Humble官方支持的就是Ubuntu 22.04 Jammy。桌面版内存占用比Server版高一些4GB版运行起来会有压力但也不是不能接受后面会具体说怎么优化。这套环境装好之后不仅能跑通小乌龟demo和Rviz2还能在本地编译自己的功能包我实测跑了nav2仿真和机械臂URDF加载一张32GB的SD卡完全够用。如果你手里恰好也有树莓派4B想用它入坑ROS2开发这篇文章从系统烧录、ROS2安装方式对比、环境配置到工作空间创建和常见问题排查都会覆盖到可以直接照着操作。官方文档和一些中文教程对x86平台支持比较友好但到了ARM平台就容易遇到各种“意外”这篇算是我把坑都填平之后的实操手册。1. 硬件与系统准备树莓派4B跑ROS2的硬性门槛1.1 树莓派4B的硬件底子够不够用先说硬件选型。树莓派4B有好几个内存版本2GB、4GB、8GB。如果要装Ubuntu Desktop 22.04并且完整运行ROS2 Humble桌面版包含Rviz2、Gazebo这些图形工具我强烈建议至少有4GB内存8GB版当然更好。2GB版跑Server版做无界面节点还行跑Desktop版加可视化工具会非常卡基本不具备实操价值。CPU方面树莓派4B用的是BCM2711四核Cortex-A72主频1.5GHz可超频到1.8GHz/2.0GHz。这个性能跑ROS2的纯计算任务是够用的比如话题消息转发、tf树更新、简单导航算法但跑Gazebo大型仿真或者点云处理就会比较吃力。我的建议是树莓派4B适合跑轻量级机器人应用和教学demo重负载的仿真还是交给PC或者远程服务器。存储方面系统加ROS2 Humble桌面版包含Gazebo和Rviz2整体占用在15GB左右如果有额外的日志和源码空间需求建议用64GB以上的SD卡速度选A2级别U3速度等级。TF卡写入速度直接影响系统流畅度别省这个钱。我用的是一张闪迪A2 64GB安装完成后SD卡剩余空间还有约40GB足够放几个功能包和bag文件。散热是一个经常被忽视的点。树莓派4B满载跑ROS2编译时CPU温度很容易飙到80℃以上温度过高会触发降频编译速度和运行流畅度都会明显下降。我加了一个带风扇的铝合金散热壳实测编译时温度能控制在60℃左右。没有散热条件的话至少也要保证通风良好不要让板子闷在密闭盒子里。1.2 为什么选择Ubuntu Desktop 22.04而不是树莓派官方系统ROS2对操作系统版本有严格对应关系不是随便在哪个Linux发行版上装个包就能跑。ROS2 Humble对应的操作系统是Ubuntu 22.04 Jammy。官方支持列表里面有x86_64和arm64架构的Ubuntu 22.04树莓派4B的CPU架构正好是arm64所以用Ubuntu 22.04 arm64版本是完全契合的。很多新手会选择树莓派官方Raspberry Pi OSDebian系因为装完就能用桌面环境工具链也很齐全。问题在于Raspberry Pi OS基于DebianROS2预编译包不是针对它构建的用源码编译又极其漫长——在树莓派4B上从源码编ROS2的编译时间动辄四五个小时中途还容易因为内存不足或网络不稳失败。如果硬要用树莓派系统可以考虑用Docker跑OSRF官方镜像但这又绕了一层性能损失先不说USB设备映射、网络配置、权限管理都容易出问题对嵌入式开发来说非常不方便。换用Ubuntu Desktop 22.04 arm64后可以直接用官方预编译二进制包安装ROS2 Humble一条apt命令就能搞定不需要从源码编译安装时间基本控制在十几分钟到半小时以内。官方二进制包虽然不是为树莓派专门调优过但稳定性是最高的后续排查问题也方便因为遇到的大多数坑在x86平台上同样存在搜索解决方案很容易命中。需要说明一点Ubuntu Desktop 22.04对树莓派4B的GPU支持比较一般桌面动画效果会有轻微卡顿所以装好后建议把桌面视觉特效关掉后面在性能优化部分细说。1.3 系统烧录步骤与初始设置烧录系统我用的官方工具Raspberry Pi Imager新版已经内置了Ubuntu镜像下载选项。操作步骤非常简单下载并安装Raspberry Pi ImagerWindows/macOS/Linux都有对应版本。打开Imager点击“Choose OS”选择“Other general-purpose OS” - “Ubuntu” - “Ubuntu Desktop 22.04.5 LTS (64-bit)”。选择SD卡点击“Write”开始烧录。烧录过程大约5-10分钟。注意Imager里Ubuntu有Desktop和Server两个版本这里选的是Desktop。烧录完成后系统默认账号是ubuntu初始密码是ubuntu首次登录会强制修改密码。我这里补充一个非坑提示如果网络环境无法直接访问Ubuntu官方镜像点Imager烧录时可以通过右下角的齿轮图标预先配置WiFi和SSH密钥这样上电后就能直接通过网络访问省去接显示器和键盘的麻烦。上电后建议先执行一次系统更新sudo apt update sudo apt upgrade -y升级包比较多视网络情况可能要等十几分钟耐心等就行。升级完成后重启一次确保系统处于干净状态。2. ROS2 Humble安装两种方案对比与实操2.1 为什么选择Humble而不是别的发行版ROS2的发行版命名按字母表顺序目前常见的有Foxy、Galactic、Humble、Iron、Jazzy等。Humble Hawksbill是2022年5月发布的LTS版本官方支持到2027年是目前ROS2生态里面生命周期最长的版本之一。对于树莓派来说选Humble还有一个重要理由大量教程、示例代码、开源项目都基于Humble遇到问题很容易在论坛找到解决方案而新版本比如Jazzy虽然功能更新但教程数量和社区积累明显少很多。Foxy也是一个LTS版本对应Ubuntu 20.04但Foxy已经进入维护尾声很多新工具链兼容性不好不太值得再投入。如果你手里正好有树莓派4B并且已经装了Ubuntu 20.04那就用Foxy如果是新烧录系统直接选22.04 Humble这是目前最稳妥的组合。2.2 一键安装脚本实操鱼香ROSROS2在官方文档里给出了标准安装流程但步骤比较多还包括设置软件源、添加密钥、安装一堆依赖包等。如果你不想折腾这些细节可以使用“鱼香ROS”的一键安装脚本。需要说明一下这是一个社区作者维护的脚本方便快捷但毕竟是外部脚本建议大家先浏览一下脚本内容再执行养成安全习惯。执行命令wget http://fishros.com/install -O fishros . fishros执行后会弹出交互菜单选择1安装ROS2再选择对应的Humble版本。脚本会自动检测系统版本、CPU架构并配置软件源、安装依赖、初始化rosdep等后面过程基本不用管。实测下来在树莓派4B上安装速度还是比较快的大约15-20分钟可以完成。脚本本身还集成了很多实用功能比如安装ROS1/ROS2、安装VSCode、安装MicroROS等方便后续开发环境搭建。提示执行外部脚本前建议先使用cat fishros或者vim fishros查看内容确认没有可疑操作。社区项目可以信任但养成这个习惯没有坏处。2.3 官方二进制安装的详细过程如果想走官方标准流程不依赖第三方脚本操作也不复杂只是步骤多一些。以下是在Ubuntu 22.04 arm64上的完整流程。第一步设置软件源。Ubuntu 22.04代号是JammyROS2官方源在packages.ros.org。终端依次执行sudo apt install software-properties-common curl sudo add-apt-repository universe sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [archarm64 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 sudo apt update注意上面的[archarm64]字段在x86电脑上这里是amd64树莓派上不要照抄别人的x86教程不加架构字段否则apt会警告或直接不识别软件源。第二步安装ROS2 Humble桌面版。桌面版包含了机器人相关的核心库、通信中间件、Rviz2可视化工具、Gazebo仿真、示例包和教程。如果不打算用图形界面可以只装ros-humble-ros-base体积小很多。但对于开发来说桌面版更省心不建议省略。sudo apt install ros-humble-desktop这步安装的依赖非常多总大小在2GB左右在树莓派上耗时视SD卡速度和网络状况而不同一般来说15-30分钟。期间如果apt安装中断可以重复执行同一命令apt会继续未完成的安装。第三步安装编译工具链和rosdep工具sudo apt install python3-colcon-common-extensions python3-rosdep python3-vcstoolcolcon是ROS2的工作空间编译工具rosdep用于自动解析功能包依赖vcs可以批量管理多个Git仓库这些在做开发时都会用到。第四步初始化rosdepsudo rosdep init rosdep update这一步在树莓派上有个需要注意的点如果ROS软件源访问比较慢rosdep update可能失败。可以尝试配置镜像源或者手动导入ROS的rosdep.yaml并指定本地源。由于网络环境的差异这里不展开具体镜像配置遇到问题可以先重复执行几次rosdep update很多时候是网络瞬断。安装完成后验证是否成功source /opt/ros/humble/setup.bash ros2 --help能输出usage: ros2 [-h] ...则说明安装成功。3. 环境配置与核心概念让ROS2“活”在你的终端里3.1 环境变量与.bashrc配置ROS2安装完成后每次打开新终端都需要执行source /opt/ros/humble/setup.bash否则ros2命令找不到。为了省事建议把环境配置写进.bashrcecho source /opt/ros/humble/setup.bash ~/.bashrc echo source /usr/share/colcon_cd/function/colcon_cd.sh ~/.bashrc echo export _colcon_cd_root/opt/ros/humble/ ~/.bashrc source ~/.bashrcPost说过colcon_cd这个功能后面编译完工作空间后可以用colcon_cd快速切换到功能包目录很实用。另一个值得配置的是RMW实现。ROS2的通信底层有一个中间件抽象层RMW不同实现包括Fast DDS、Cyclone DDS、RTI Connext等。Humble默认使用Fast DDS这个在x86平台用的很广泛但在树莓派上和部分外设可能存在兼容性问题。如果后续遇到话题发现不稳定的情况可以尝试切换到Cyclone DDSsudo apt install ros-humble-rmw-cyclonedds-cpp echo export RMW_IMPLEMENTATIONrmw_cyclonedds_cpp ~/.bashrc source ~/.bashrc两种DDS在树莓派上我都试过日常使用体验差别不大但跑micro-ROS和ESP32通信时Fast DDS的支持案例更多暂时不用换。3.2 节点、话题、服务、动作这些概念怎么理解ROS2对新手来说最劝退的地方就是概念多节点、话题、服务、动作、参数、QoS。用生活化的方式理解其实很简单。节点就是机器人程序里的一个个“小员工”每个节点干一件专门的活。比如摄像头驱动节点负责采集图像定位节点负责计算坐标导航节点负责规划路径。节点之间不直接打电话而是通过“话题”Topic来传递消息类似电台广播。一个节点把消息放到话题上其他感兴趣的节点订阅这个话题就行双方互不认识也能通信。服务Service则像打电话一问一答。客户端发送请求服务端返回响应。适合那些需要即时确认的操作比如“打开灯”、“读取传感器状态”。动作Action是服务的长任务版本适合“把车开到目标点”、“抓取物体”这类需要持续一段时间、并且可以随时取消的任务。动作由目标、反馈、结果三部分组成执行过程中可以持续收获进度信息。参数Parameter是节点的可配置项比如摄像头分辨率、PID控制参数等。在不修改代码的前提下运行中也能动态调整。QoSQuality of Service是ROS2相比ROS1的核心升级它决定消息在网络传输中的可靠性策略。不同QoS组合会影响延迟、丢包行为。比如传感器数据适合用“尽力传输”Besteffort模式因为丢一帧图像没关系但要用最新数据而控制指令就需要“可靠传输”Reliable保证每条指令都送达。这个概念在树莓派这类网络环境不稳定的设备上尤其重要后面调试时会遇到相关报错。3.3 通信中间件Fast DDS在树莓派上的表现Fast DDS是Humble默认的DDS实现完全开源由eProsima维护在ROS2生态中用户量最大。它的优势是功能完善对ROS2的支持最及时但代价是占用资源偏高。树莓派4B性能有限跑多个节点时偶尔有话题发现延迟但影响不大。测试过在不同树莓派设备之间通过Fast DDS通信性能表现还算稳定局域网内的消息延迟大概在几毫秒到几十毫秒之间取决于话题频率和消息大小。如果做多机分布式系统建议把主机名和IP地址写进/etc/hosts避免域名解析带来的发现延迟。4. 安装验证与第一个Demo小乌龟和命令行工具4.1 经典小乌龟demo实测环境配置好之后第一件事是跑通官方经典demo——小乌龟。这个demo虽然简单但完整走一遍就能确认ROS2通信栈、节点发现、话题/服务机制是否正常。打开终端1启动小乌龟模拟器ros2 run turtlesim turtlesim_node如果环境配置正确终端会输出[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim屏幕上会弹出一个蓝色背景的窗口中间有一只小乌龟。打开终端2启动键盘控制节点ros2 run turtlesim turtle_teleop_key这个终端会变成控制台按方向键可以控制小乌龟移动。此时在终端3输入ros2 node list可以看到两个节点/teleop_turtle和/turtlesim。输入ros2 topic list能看到乌龟的位置和速度话题。这个测试验证了节点注册、话题发布与订阅、消息传递三个核心机制都正常工作。如果小乌龟窗口没有弹出说明图形环境有问题检查DISPLAY变量或者确认是否在桌面会话中运行。SSH远程连接时需要用export DISPLAY:0指到本地显示器上。4.2 常用CLI命令速查ROS2的CLI命令行界面工具使用非常频繁掌握这些命令能让你在没有图形界面的时候也能游刃有余。整理一份速查表命令功能ros2 node list列出当前所有在线节点ros2 node info node_name查看节点详细信息订阅、发布、服务等ros2 topic list列出所有话题ros2 topic info topic_name查看话题数据类型和统计信息ros2 topic echo topic_name实时打印话题上的消息内容ros2 topic pub topic_name type data手动发布一条消息到话题ros2 service list列出所有服务ros2 service call service_name type request手动调用服务ros2 param list列出节点参数ros2 action list列出所有动作ros2 pkg list列出所有已安装功能包ros2 run package executable运行某个功能包的可执行程序ros2 launch package launch_file启动launch文件可同时启动多个节点这几个命令覆盖了大部分日常调试场景。出现ros2: command not found时基本就是环境变量没有source对先执行source /opt/ros/humble/setup.bash再试。如果source之后还是不行检查软件包是否真正安装完毕可以用apt list --installed | grep ros-humble确认。5. 建立工作空间并编写第一个功能包5.1 colcon工作空间初始化ROS2开发中功能包都组织在一个“工作空间”workspace里。工作空间通常包含src目录功能包源码放在里面编译后生成build、install和log目录。colcon就是ROS2的编译管理工具类似ROS1里的catkin。创建和初始化工作空间mkdir -p ~/ros2_ws/src cd ~/ros2_ws colcon build执行colcon build时如果当前目录没有src内容会编译一个空工作空间。完成后会在~/ros2_ws下生成build、install、log目录。此时还需要source一下source install/setup.bash为了让新终端自动识别工作空间的功能包把上面这行也追加到.bashrc里并放在source ROS2之后。echo source ~/ros2_ws/install/setup.bash ~/.bashrc这样每次开终端都会把工作空间环境带起来。注意如果之后改了.bashrc里工作空间的位置要重新source或者重开终端。5.2 编写一个简单的Python发布-订阅节点建好了工作空间来写一个最经典的发布-订阅节点。这里用Python因为语法简单适合树莓派上快速验证逻辑。后面如果需要更高的性能再转C实现。先创建功能包cd ~/ros2_ws/src ros2 pkg create --build-type ament_python py_demo这会在src下生成一个名为py_demo的Python功能包目录结构如下py_demo/ ├── package.xml ├── py_demo/ │ └── __init__.py ├── resource/ ├── setup.cfg ├── setup.py └── test/接下来在py_demo/py_demo/目录下新建talker.py写入import rclpy from rclpy.node import Node from std_msgs.msg import String class Talker(Node): def __init__(self): super().__init__(talker) self.publisher self.create_publisher(String, chatter, 10) self.timer self.create_timer(1.0, self.timer_callback) def timer_callback(self): msg String() msg.data Hello from Raspberry Pi ROS2! self.publisher.publish(msg) self.get_logger().info(Publishing: %s % msg.data) def main(argsNone): rclpy.init(argsargs) node Talker() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__ __main__: main()再新建listener.pyimport rclpy from rclpy.node import Node from std_msgs.msg import String class Listener(Node): def __init__(self): super().__init__(listener) self.subscription self.create_subscription(String, chatter, self.callback, 10) def callback(self, msg): self.get_logger().info(I heard: %s % msg.data) def main(argsNone): rclpy.init(argsargs) node Listener() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__ __main__: main()还需要修改setup.py把这两个脚本注册成可执行入口entry_points{ console_scripts: [ talker py_demo.talker:main, listener py_demo.listener:main, ], },编译和运行cd ~/ros2_ws colcon build --packages-select py_demo source install/setup.bash ros2 run py_demo talker新开终端运行ros2 run py_demo listener可以看到listener终端实时打印出“I heard: Hello from Raspberry Pi ROS2!”说明两个节点通过chatter话题完成了通信。如果出现ModuleNotFoundError: No module named py_demo多半是最后source工作空间那步没做或者当前终端环境顺序有问题重新source install/setup.bash即可。5.3 编译过程中树莓派上容易踩的坑树莓派上跑colcon build最常见的编译错误有两类。一类是内存不足导致编译进程被系统杀掉。colcon默认会并行编译多个功能包内存峰值较高。解决方法是限制并行编译任务数colcon build --parallel-workers 1如果需要彻底避开内存问题还可以创建一个swap文件树莓派系统默认swap太小。创建2GB swap的做法sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo /swapfile none swap sw 0 0 | sudo tee -a /etc/fstab第二类是编译C包时CPU过热降频这个在1.1节已经提到过。树莓派4B长时间满载跑编译任务时温度会很高散热措施一定不能省。另外如果使用了zsh或其他shell确保.bashrc中的环境配置确实被加载有些用户用了zsh但只写了.bashrc导致终端里找不到ros2命令。6. 图形化工具与玩法扩展Rviz2、Gazebo与更多可能6.1 Rviz2可视化与加载URDF机器人模型ROS2开发离不开Rviz2它是ROS2的可视化工具可以显示传感器数据、机器人模型、路径规划结果等。在树莓派Desktop版本中安装desktop包后Rviz2已经自动装好直接运行ros2 run rviz2 rviz2首次启动Rviz2会显示一个空界面。通过左下角“Add”按钮添加不同显示类型比如添加RobotModel并指定机器人的URDF文件就可以看到3D模型。URDFUnified Robot Description Format是ROS2中描述机器人结构的XML文件定义了连杆link、关节joint以及它们之间的几何和物理关系。如果你想加载一个URDF模型可以先用robot_state_publisher功能包发布机器人的tf树ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:$(cat your_robot.urdf)再在Rviz2中添加RobotModel显示选择/robot_description话题就能看到模型了。对于树莓派来说加载一个包含几千个网格的小型URDF模型性能没问题但大型模型会略卡可以做网格降面处理。6.2 Gazebo仿真与nav2导航的拓展玩法Gazebo是ROS2常用的三维物理仿真器Humble桌面版自带Gazebo 11。在树莓派上跑Gazebo的效果要看仿真场景复杂度简单环境比如一个房间、一个差速机器人能跑到10-20FPS凑合能用大型户外场景基本跑不动。跑一个简单的差速机器人Gazebo仿真ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py前提是安装turtlebot3相关包sudo apt install ros-humble-turtlebot3-gazebo ros-humble-turtlebot3-navigation2 export TURTLEBOT3_MODELburger跑起来之后可以用teleop_twist_keyboard控制机器人移动再用Rviz2加载Nav2导航界面实现SLAM建图和自主导航。这个过程在树莓派上勉强能跑但计算负载较高如果卡顿明显可以把turtlebot3_burger换成更轻量的模型或者把画质调低。还有几个热门扩展方向比如用micro-ROS把ESP32接入ROS2网络将树莓派作为ROS2主机节点ESP32作为微控制器节点发布传感器数据或者接上Intel RealSense depth相机如D435i跑实时SLAM。这些方向都在Humble的支持范围内树莓派做这些任务的“大脑”虽然算力有限但学习和小型项目完全够用。6.3 ROS2与嵌入式开发micro-ROS和ESP32既然热词里出现不少micro-ROS和ESP32的内容这里简单提一下这个常见的扩展分支。micro-ROS是ROS2的微控制器版本能在ESP32、STM32这类单片机上运行ROS2节点。树莓派4B在这里的作用有几种一是作为micro-ROS Agent的宿主机负责和ESP32上的micro-ROS节点通信。启动agent的命令是docker run -it --rm -v /dev:/dev -v /dev/shm:/dev/shm --privileged --nethost microros/micro-ros-agent:humble serial --dev /dev/ttyUSB0 -b 115200或者用串口直连的方式ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0二是作为上位机接收ESP32采集的传感器数据再在树莓派上做处理、显示或控制。这样的架构在机器人教学中非常典型。如果micro-ROS的Docker镜像拉取时提示unable to find image microros/micro-ros-agent:humble locally说明Docker尝试从远程仓库拉取失败检查网络连接和镜像源配置。因为不同时间点镜像标签可能不同需要到Docker Hub上确认标签是否存在再执行。7. 常见问题排查与系统性能优化7.1 安装和使用中的高频报错速查问题现象可能原因解决方案ros2: command not found环境变量未source执行source /opt/ros/humble/setup.bash并写入.bashrcUnable to locate package ros-humble-desktop软件源未配置或架构字段错误核对/etc/apt/sources.list.d/ros2.list确认[archarm64]字段正确colcon build中途被杀内存不足设置swap或使用--parallel-workers 1限制并行编译rosdep update报错网络源不可达检查网络重试或配置rosdep镜像源小乌龟窗口启动失败图形环境变量问题确认DISPLAY变量或者直接物理终端运行节点之间无法互相发现DDS发现机制问题查看/etc/hosts配置尝试export ROS_DOMAIN_ID0统一域IDmicro-ROS Docker镜像拉取失败网络或镜像标签问题检查网络到Docker Hub确认标签存在或改用源码方式编译agent第5个问题在树莓派上更容易遇到。如果你是通过SSH远程操作树莓派需要在SSH命令里加-X参数做X11转发同时客户端也要有X ServerWindows下用MobaXterm或VcXsrv小乌龟窗口才能显示在本地电脑上。7.2 ARM平台性能优化与内存管理心得树莓派4B跑Ubuntu Desktop ROS2桌面版默认设置下可用内存大约只剩1.5-2GB跑GAZEBO或者Rviz2时很容易内存吃紧。我的优化经验有以下几点。第一关掉桌面动画特效。Ubuntu桌面在GNOME环境下可以通过“设置 - 外观”里选择“性能模式”或直接安装优化工具如gnome-tweaks关闭动画减少GPU和CPU负载。此外桌面版自带了不少效果组件可以用sudo apt remove gnome-shell-extension-desktop-icons-ng等命令清理不用的扩展。第二减少不必要的后台服务。树莓派系统装完后会有蓝牙、Avahi、CUPS等后台服务这些对于纯开发用途基本用不上可以用systemctl禁用sudo systemctl disable cups.service bluetooth.service hciuart.service第三调整DDS共享内存。Fast DDS默认使用共享内存传输开启后同一设备上的通信性能会好不少。默认情况下如果检测到共享内存可用就会自动启用一般不需要手动改。如果确认节点需要跨设备通信需要关闭共享内存传输否则可能出现“话题在部分节点可见部分不可见”的诡异问题。可以通过环境变量强制使用UDPexport FASTRTPS_DEFAULT_PROFILES_FILE/path/to/fastdds_profile.xml第四用htop监控系统资源如果发现某个节点CPU占用过高行业惯例是从代码层面优化算法比如降低话题发布频率、减少消息队列长度、用更高效的日志输出方式。第五这是长期使用后的经验尽量少在树莓派上运行Jupyter Notebook之类的开发工具。这些工具占用的资源远超想象而且频繁读写SD卡会缩短卡的寿命。开发调试还是用远程的VSCode或SSH方式树莓派专注于跑ROS2节点。写在最后的实操体会这套环境装完之后我蹲了大概两周的日常使用日常干活都在板子上跑中间又测试过激光雷达驱动、AMCL定位、move_base导航还顺手把micro-ROS的agent跑起来了整体算稳定。一个很真实的感受是树莓派4B确实算不上性能怪兽尤其在跑可视化工具的时候别指望它能像台式机一样丝滑。但ROS2本身对算力要求其实没有那么苛刻只要别同时把所有重负载任务叠在一起它完全能承担起一台学习机器人开发实验平台的重任。最后分享一个小技巧如果你打算长期在树莓派上做ROS2开发建议给系统盘做一次镜像备份备份完再折腾新功能包出了问题恢复起来非常快。用dd或者树莓派官方Imager的备份功能都行毕竟配置一套带ROS2的Ubuntu环境也需要半小时到一个小时能省则省。