开篇先亮个态度在树莓派4B上装ROS2 Humble这件事说难不难但坑是真的多。我前前后后在4B上折腾过好几遍从最早跟着各路教程踩得头破血流到后来终于摸清楚一套从系统到环境配置的稳定流程中间浪费的时间够我再读一遍《ROS2机器人开发从入门到实践》。这篇文章就是把我最终沉淀下来的完整方案写出来顺便把网上没写清楚的那些“为什么”也一并讲透。先说结论这套方案的核心思路是——系统选Ubuntu Server 22.04 64位ROS2选官方apt源直接安装Humble环境配置走colcon工作空间。全程手动配置不用各种“一键脚本”因为对于树莓派这种ARM架构设备手动流程能让你把每一步的依赖关系搞清楚后面出了问题也知道从哪里排查。整个流程适合ROS2零基础但用过Linux命令行的读者也适合已经有ROS1经验、想切到ROS2的老开发。1. 系统选择树莓派4B跑ROS2为什么我死磕Ubuntu Server1.1 树莓派4B的硬件底子决定了系统上限先说硬件。树莓派4B有2GB、4GB、8GB三个内存版本CPU是四核Cortex-A72性能大概相当于入门级桌面处理器。跑ROS2本身没问题但你要是打算在板子上同时跑仿真、RViz2、导航算法内存就是硬指标。我的建议是如果你还没买板子直接上8GB版如果手里只有2GB版也不是不能跑但后面做SLAM或者跑Gazebo会很痛苦建议通过增加swap分区来缓解。存储方面SD卡建议选A2等级的U3卡读速不低于90MB/s。为什么ROS2的包管理、日志写入、rosbag录制都是高频IOSD卡太慢会直接导致系统卡顿甚至出现奇怪的超时错误。另外有条件的话用USB3.0移动固态硬盘启动体验提升非常明显这个后面可以在“性能优化”部分细说。散热是另一个容易忽略的点。树莓派4B满载跑编译时CPU温度轻松上80℃一旦触发降频编译速度会明显变慢。所以如果你要长期搞ROS2开发金属外壳散热风扇是标配。树莓派4B的GPIO针脚里有5V和GND可以直接给风扇供电这个接线就不细讲了网上图很多。1.2 系统镜像对比Ubuntu Server、Ubuntu Desktop、Raspberry Pi OS该怎么选树莓派4B上能跑的系统很多但适合做ROS2开发的主要就三个我直接列出对比和结论。系统版本优点缺点推荐度Ubuntu Server 22.04 64位官方支持资源占用低性能好arm64的ROS2套件直接可使用无桌面环境需命令行操作强烈推荐Ubuntu Desktop 22.04 64位官方支持自带桌面、RViz2等图形工具直接跑资源占用高树莓派4B带桌面略吃力可选4GB以上内存Raspberry Pi OS64位Debian 12对树莓派硬件兼容性好社区文档丰富非Ubuntu发行版ROS2 Humble没有官方预编译包不推荐需要源码编译Ubuntu Desktop 20.04官方支持可以装ROS2 FoxyHumble不支持20.04不推荐这里有个核心逻辑很多人没搞清楚ROS2的每个发行版都有对应的Ubuntu版本要求。Humble Hawksbill对应的是Ubuntu 22.04 JammyFoxy Fitzroy对应的是Ubuntu 20.04 Focal。你要用Humble又想省事装deb包而不是源码编译就必须用Ubuntu 22.04。所以系统选择的第一原则是先定ROS2版本再定Ubuntu版本最后定硬件方案。那为什么推荐Server而不是Desktop核心原因是树莓派4B的GPU和内存都不算宽裕跑一个GNOME桌面会占用大量资源。而ROS2开发的大部分工作——写代码、编译、跑节点、看日志——在纯命令行环境下完全够用。RViz2这些图形工具不是不需要而是更适合在PC上远程跑。如果你非要在树莓派上跑RViz2那建议至少4GB内存并且用轻量级桌面。我在实际项目中用vncserver跑过一个轻量级XVNC环境虽然能用但体验一般后面讲RViz2部分我会再提。1.3 ROS2发行版怎么选Humble凭什么是我现在的首选ROS2到目前为止有多个发行版常见的有Foxy、Galactic、Humble、Iron。其中Foxy和Humble是LTS长期支持版本Galactic和Iron是普通版本。Humble是2022年5月发布的LTS版本支持到2027年5月是ROS2目前最成熟的LTS之一。它比Foxy新一些最重要的是基于Ubuntu 22.04Python版本是3.10CMake要求3.22以上。如果你是新项目我强烈建议直接上Humble理由有三点。第一Humble的支持周期比Foxy更长生态更完善第二现在的机器人开发教材和开源项目绝大多数都已经迁移到Humble第三很多新功能包在Foxy上已经不再更新了只有Humble继续维护。那Humble和Foxy的具体差别大吗从API层面上说大部分代码是可以直接迁移的但有几个点需要注意。C标准方面Humble要求C14以上推荐C17Python方面Foxy用的是Python 3.8Humble是Python 3.10一些底层库的接口有变化。构建工具方面Humble对colcon和rosdep的集成度更高对ament_cmake的依赖也做了大量优化。还有一个细节就是Humble默认的DDS版本比Foxy的新很多对Fast DDS和Cyclone DDS的支持都更好这直接影响通信性能。所以结论很简单新入门和搞新项目直接选Humble不要犹豫。只有一种情况考虑Foxy你已经有大把Foxy老代码要维护或者你的硬件驱动只支持Foxy时代这样才需要停留在20.04。但树莓派4B上没有任何硬件需要依赖老版本ROS2所以果断Humble。2. 系统烧录与基础配置别急着装ROS2先把地基打稳2.1 镜像下载与SD卡烧录用Ubuntu官方发布的树莓派镜像不要用第三方魔改版。下载地址去Ubuntu官网找“Ubuntu for Raspberry Pi”选择22.04.x LTS的64位版本。这里要注意Ubuntu官网会同时提供桌面版和服务器版镜像我们选Server版文件名一般是ubuntu-22.04.x-preinstalled-server-arm64raspi.img.xz。烧录工具有两个选择官方推荐的是Raspberry Pi Imager它内置了常用镜像源可以免去手动下载的麻烦备选是balenaEtcher也有不少人用。Raspberry Pi Imager的好处是烧录前可以提前配置SSH、WiFi等参数但如果你用Ubuntu的server镜像官方文档不建议直接用Imager编辑更推荐烧录完成后手动改启动分区里的配置文件。我个人的习惯是先用Imager烧录然后手动挂载SD卡编辑配置这样更可控。烧录的具体步骤这里不展开和大部分系统烧录一样选择镜像、选择SD卡、写入。需要注意一点烧录过程会清空SD卡千万别选错设备号。如果你用的是Linux系统可以用lsblk确认设备号Windows用户要看清楚盘符这个错误一犯就是眼睁睁看着数据没了。2.2 Ubuntu Server 22.04的WiFi与SSH预配置烧录完成后SD卡会分成两个分区一个是FAT格式的system-boot一个是ext4的writable。如果你打算用WiFi连接网络最简单的方案是在烧录完成后直接在电脑上打开system-boot分区里的network-config文件进行编辑。Ubuntu Server默认情况下network-config内容大概是这样的version: 2 ethernets: eth0: dhcp4: true wifis: wlan0: dhcp4: true access-points: 你的WiFi名称: password: 你的WiFi密码把WiFi名称和密码改成你自己的保存后插回树莓派开机系统就会自动连接WiFi。至于SSHUbuntu Server镜像默认是关闭SSH的但我们可以提前开启。教程一般会说在system-boot分区新建一个名为ssh的空文件即可但Ubuntu 22.04的树莓派镜像有些版本用的是cloud-init配置。如果在system-boot目录下看到user-data文件就可以在里面找到ssh相关配置。我遇到的一种情况是有些版本只需要在user-data文件中把ssh_pwauth设为true并添加一下ssh的授权选项。实操时先试试建一个空ssh文件如果重新插拔开机后SSH还是连不上再去改user-data文件。给树莓派分配固定IP也很重要。IP地址每次变化会导致后续SSH连接很被动最简单的办法是在路由器后台绑定MAC地址或者在netplan配置文件中手动指定静态IP。我更推荐在路由器端绑定不折腾系统配置稳。2.3 基础系统初始化换源、更新、加swap系统能开机、SSH能连上之后先别急着装ROS2按顺序做三件事。第一件事是替换apt软件源。国内服务器访问Ubuntu官方源速度实在感人尤其apt update的时候那个等待时间会让人怀疑人生。Ubuntu 22.04的软件源配置文件在/etc/apt/sources.list但里面其实只剩一行注释真正的配置在/etc/apt/sources.list.d/ubuntu.sources文件里。改这个文件时建议把里面所有的archive.ubuntu.com和security.ubuntu.com替换成清华或中科大的镜像地址。我用的是清华源稳定性不错更新也及时。修改前先备份原文件这是我所有环境配置的第一原则。改完后执行apt update如果没有任何报错说明源没问题。第二件事是系统全面更新。sudo apt update sudo apt upgrade -y这个命令会升级所有已有软件包。树莓派4B升级系统包通常需要5到10分钟取决于网络和SD卡速度。升级过程中如果看到“配置文件冲突”的提示一般选择保留现有版本即可除非你明确知道新版配置更好。第三件事是调整swap空间。前面提到过2GB内存的树莓派板子如果不加swap一旦同时跑多个ROS2节点内存很快就会见底然后就是卡顿、进程被杀。Ubuntu Server默认的swap文件在/var/swap.img大小为2GB这对于ROS2开发来说偏小了建议调整到4GB。sudo swapoff /var/swap.img sudo rm /var/swap.img sudo fallocate -l 4G /var/swap.img sudo chmod 600 /var/swap.img sudo mkswap /var/swap.img sudo swapon /var/swap.img如果你用的是8GB内存版本不调swap也问题不大但加上4GB swap可以防患于未然。这里有个经验swap文件放在SD卡上有个问题频繁读写会损耗SD卡寿命。如果你有条件把swap放到外接USB硬盘或SSD上会更合适。方法是在挂载完外部存储后修改/etc/fstab把swap文件路径指到外部存储上。3. ROS2 Humble安装官方源手动部署全程无“一键”3.1 先搞定语言环境和软件源ROS2官方文档对locale有明确要求需要支持UTF-8的locale推荐en_US.UTF-8。树莓派Ubuntu Server默认locale一般就是C.UTF-8虽然也能用但保险起见还是按官方流程设置一遍。sudo apt install -y locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8设置完成后用locale命令确认当前值都变成en_US.UTF-8。这里注意一个细节修改locale后当前SSH会话可能不会立即生效可以重新登录一次。启用universe软件源这一步也很关键。ROS2的一些依赖包放在universe仓库里Ubuntu 22.04默认会启用但如果你用的是精简镜像或者修改过源配置需要确认一下。sudo apt install -y software-properties-common sudo add-apt-repository universe执行完再apt update一下确保universe源可以被正常读取。3.2 添加ROS2 GPG密钥与apt源ROS2的apt源托管在packages.ros.org需要先把它的GPG密钥添加到系统中。一步步来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然后把源地址写入apt源列表。下面这段命令要仔细看它会把ROS2的源添加到sources.list.d目录下并指定使用之前导入的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这里有两个容易踩的坑。第一个是网络问题raw.githubusercontent.com在部分网络环境下访问不稳定导致ros.key下载失败。解决办法是用国内镜像的ros.key或者多试几次。我是用清华源里的ros.key具体地址可以到清华镜像站查一下。第二个坑是arm64架构的问题。树莓派4B是arm64架构dpkg --print-architecture会打印arm64。ros2.list里的arch字段会正确设置为arm64官方源确实提供了arm64的预编译包这点不用担心。但你要是在写源的时候手贱写成了amd64apt就会报“无法定位软件包”的错误。改完源配置后执行apt update如果能看到ros2.list相关的更新信息说明源添加成功。3.3 安装ROS2核心包Desktop还是Base怎么选更新完源后就是正式的安装步骤。ROS2提供几个安装套餐最常用的是ros-humble-desktop和ros-humble-ros-base。两者的核心区别在于desktop版包含了RViz2、turtlesim、demo节点、可视化工具等完整套件体量大概3GB左右ros-base只包含通信核心、客户端库和基础工具体量小很多。对于树莓派4B我的建议是如果你计划在这个板子上做完整开发直接装desktop。虽然体积大但省去了后续一个个补包的麻烦。如果你只是想让树莓派作为一个纯粹的计算节点跑算法那ros-base就够了。我实际项目里就是在一台4GB的树莓派上装了ros-base然后通过局域网和PC上的RViz2通信画面在PC上显示性能完全够用。安装命令很简单sudo apt update sudo apt upgrade -y sudo apt install -y ros-humble-desktop如果你选择安装ros-base把最后一个包名换成ros-humble-ros-base即可。这一步会下载大量依赖包耗时取决于网速。有条件的建议先把ROS2的源也换成国内的镜像源清华、中科大、阿里都可以下载速度会快很多。我这里强烈建议安装完成后立刻安装一些常用开发工具sudo apt install -y python3-colcon-common-extensions python3-rosdep python3-vcstool python3-argcompletecolcon是ROS2的主要构建工具rosdep用于自动解决依赖问题argcomplete提供命令行自动补全。新手最容易忽略的就是args补全功能没有它你在终端里敲ros2命令按Tab补全时会没反应还以为自己装错了。3.4 环境变量配置source这个动作到底在干嘛安装完成后ROS2还不能直接用必须source一下它的环境设置脚本。source /opt/ros/humble/setup.bash这个动作的本质是往当前终端会话里注入一系列环境变量把ROS2工具链的路径、动态库路径、Python包路径等设置好。核心变量有ROS_DISTRO、AMENT_PREFIX_PATH、LD_LIBRARY_PATH等。问题来了source只在当前终端会话有效新开一个终端就又丢了。所以要让环境变量永久生效得把这行命令加到你的shell配置文件中。Ubuntu默认shell是bash配置文件是~/.bashrcecho source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc这里有个实战细节如果你同时装了ROS1和ROS2或者装了多个ROS2发行版千万别把多个source命令同时写进.bashrc。因为你后source的会覆盖先source的环境变量搞不好就会出现找不到包、节点起不来的诡异问题。我自己踩过这个坑后来养成了一个习惯——把需要频繁切换的source命令单独写成shell脚本按需手动source这样最干净。还有一个细节是关于ROS_DOMAIN_ID的。ROS2的节点默认在domain ID为0的域里通信如果你有多台设备在同一个局域网里跑ROS2必须给每台设备设置不同的ROS_DOMAIN_ID避免节点之间“串台”。在树莓派上做多机通信时这个变量尤其重要。设置方法就是在.bashrc里加一行export ROS_DOMAIN_ID13.5 安装完成后的快速验证安装完成后先跑两个最简单的命令验证一下ros2 --help如果你能看到ros2命令的帮助信息说明基本环境没有问题。然后再跑一下自带的demo节点ros2 run demo_nodes_cpp talker新开一个终端再跑ros2 run demo_nodes_cpp listener如果listener终端里不断输出“I heard: Hello World”恭喜你ROS2的通信链路已经通了。这个测试看起来简单但它同时验证了ROS2核心功能、节点发现机制、消息订阅发布链路是整个安装流程中最关键的“冒烟测试”。4. 理解ROS2的核心机制为什么它和ROS1完全是两代产品4.1 DDS是ROS2的通信骨架刚接触ROS2的人最先被绕晕的概念应该就是DDSData Distribution Service数据分发服务。用一个比喻来说明如果把ROS2比作一个城市交通系统那么DDS就是城市底下的地铁网络所有节点间的消息传递都通过这个网络完成。ROS1时代节点之间的通信走的是中心化的master机制所有节点先向master注册然后通过点到点的TCP/UDP连接进行通信。这个模式的缺点是master一旦挂了整个系统就瘫痪了。ROS2引入了DDS彻底摆脱了中心节点每个节点直接通过DDS协议互相发现、建立连接和传输数据。DDS把通信机制、数据序列化、服务质量策略QoS都标准化了这让ROS2天然支持多机器分布式部署也更适合实时性要求更高的机器人系统。常用DDS实现有Fast DDS默认、Cyclone DDS、RTI Connext等。Humble默认使用的是Fast DDS。Fast DDS在文档和社区支持上做得最好而且完全开源树莓派上直接就能跑。绝大多数情况下不用换DDS实现我用了很久默认配置没有出现任何问题。不过有一点要注意树莓派上的默认共享内存配置相对保守如果遇到节点间通信延迟偏高的情况可以调整共享内存分配或者检查一下RMW_IMPLEMENTATION环境变量。树莓派这类嵌入式设备上如果遇到极端的实时性要求可以考虑切换到Cyclone DDS有人测试过它在ARM平台上的性能会比Fast DDS略好但配置过程多一点新手可以暂时不管。4.2 主题、服务、动作三种通信方式的使用场景ROS2的通信方式有三种主题Topic、服务Service、动作Action。很多新手会混淆三者的使用场景我用最简单的场景来类比一下。主题是“广播”——发布者不断往外发消息订阅者按需接收。适用于传感器数据、状态信息这类高频、持续的数据流。比如IMU数据、激光雷达点云这些用主题就非常合适。服务是“一问一答”——客户端发一个请求服务端处理完后返回一个响应。适用于请求-响应模式、逻辑调用比如让机器人抓手打开、查询某个传感器的当前状态。服务调用是同步的客户端发起后必须等服务端响应才能继续。动作是“带反馈的长任务”——客户端发起目标服务端在任务执行过程中不断反馈进度最终返回结果。适用于需要较长时间完成的复杂任务比如导航到某个坐标点、机械臂按轨迹运动。动作比服务更适合实时追踪任务进度比如导航时我们要持续知道机器人当前位置和剩余时间。理解这三种通信方式的本质区别是设计ROS2应用架构的基础。很多项目跑不起来不是代码写错了而是选错了通信方式——把实时的传感器数据流用服务去发结果每发一帧都要等响应延迟高到离谱。4.3 工作空间和功能包结构colcon怎么用ROS2的软件开发单位是“功能包”package多个功能包组在一起放在一个“工作空间”workspace下。这个工作空间就是你的catkin工作空间的升级版用colcon构建。创建和编译一个最简单的Python功能包步骤大致如下mkdir -p ~/ros2_ws/src cd ~/ros2_ws/src ros2 pkg create my_first_pkg --build-type ament_python --dependencies rclpy std_msgs cd ~/ros2_ws colcon build --symlink-install source install/setup.bash整个流程下来会生成build、install、log三个目录。build目录是中间产物log目录是编译日志install目录是最后安装的产物。你写的代码必须被colcon编译Python包会安装到install目录再source install/setup.bash才能被ros2 run找到。这就是为什么每次写完新节点都要重新colcon build才能运行的原因。对于Python功能包--symlink-install这个参数建议加上。它会让install目录里的代码以符号链接的方式指向你的源码目录。这样你改完Python文件后不需要重新编译就能直接运行调试效率瞬间翻倍。但注意C功能包改动后还是需要重新编译的。5. 图形界面与额外工具树莓派4B上跑RViz2的真实体验5.1 桌面环境还是远程显示这是第一个选择如果你的树莓派上装的是Server版那么你只能通过命令行操作。RViz2、turtlesim这些图形工具怎么办两条路给树莓派装桌面或者远程显示。给树莓派装桌面最轻量的方案是装一个轻量级桌面环境比如Lubuntu的桌面或者xvnc。我之前用sudo apt install lubuntu-desktop --no-install-recommends装过一个精简桌面用VNC远程连接能跑RViz2但流畅度一般。如果你不想折腾直接用Raspberry Pi Imager烧录一个Ubuntu Desktop 22.04镜像会更省心桌面装好就用RViz2也比较容易跑。远程显示的方式比较推荐在PC上安装RViz2树莓派那边只跑运算节点两个设备在同一个局域网里通过ROS2的分布式通信机制协同。这样树莓派完全不需要图形环境PC上也能享受更好的RViz2体验。这也是我目前最推荐的技术路线尤其适合树莓派这种资源受限设备做机器人原型开发。配置多机通信的做法比较关键。确保两台设备在同一个局域网内树莓派和PC上都设置好相同的ROS_DOMAIN_ID然后在PC端运行ros2 topic list能发现从树莓派发来的话题名称就表示通信成功了。需要特别注意的是防火墙要放行DDS相关的端口否则节点发现会被阻断。5.2 RViz2在树莓派上的性能调优不管装桌面还是远程显示RViz2在树莓派这种设备上跑起来都会有点吃力。我用下来有几个调优技巧。降低RViz2的渲染质量具体是关掉反锯齿降低更新频率。减少全局fixed frame下的点云显示密度。如果是bumper或scan话题降低message queue size。用FlatGround和GridDisplay的最小配置来跑不在同一场景里挂太多显示模块。如果你想在树莓派本地跑RViz2内存至少4GB且保证供电稳定。树莓派4B的原装电源适配器供电能力有限建议选官方的5V/3A USB-C电源。供电不稳会导致USB外设随机断开甚至系统无征兆重启这种问题排查起来能让人怀疑人生。6. 开发效率三板斧终端复用、代码补全与开机自启6.1 terminator终端复用多窗口操作利器搞ROS2开发最常遇到的情况是一个终端跑talker一个终端跑listener一个终端看ros2 topic list一个终端写代码。多开几个SSH窗口非常乱。解决办法是用Terminator这样的终端复用工具一个窗口里同时开多个分屏面板。安装命令sudo apt install -y terminator用Terminator的好处是在同一个终端窗口里可以上下左右分屏每个分屏都是一个独立的shell会话source不同的环境变量也不互相干扰。尤其适合树莓派这种内存和屏幕资源都有限的应用场景。6.2 命令行自动补全把这些配置加进.bashrcROS2的argcomplete自动补全功能默认是关闭的需要手动启用echo eval \$(register-python-argcomplete ros2)\ ~/.bashrc source ~/.bashrc这个配置加上后输ros2 topic按Tab键会有惊喜比如ros2 topic li按Tab自动补全list。省内存是一回事不把时间浪费在翻历史命令上才是关键。6.3 开机自动加载ROS2环境直接用systemd更优雅如果你希望树莓派一开机就自动启动一些ROS2节点同时又想保证工作空间和ROS2环境变量都正确加载用systemd服务来做启动管理会很规范。写一个服务文件[Unit] DescriptionROS2 Humble robot demo Afternetwork-online.target [Service] Typesimple Userubuntu EnvironmentROS_DOMAIN_ID1 ExecStart/bin/bash -c source /opt/ros/humble/setup.bash source /home/ubuntu/ros2_ws/install/setup.bash ros2 launch my_bringup demo.launch.py Restarton-failure RestartSec5 [Install] WantedBymulti-user.target把文件放到/etc/systemd/system/目录下再执行sudo systemctl daemon-reload sudo systemctl enable my_robot.service下次开机就会自动拉起节点。这种方式比在rc.local写脚本更规范状态查询、日志查看、自动重启都有现成机制不用自己去造轮子。7. 常见问题排查实录树莓派ROS2的疑难杂症速查表7.1 高频问题与排查方法以下问题基本都是我在树莓派上实际操作过的每一个都对应一次真实排错经历问题现象根本原因解决办法ros2: command not found环境变量未source执行source /opt/ros/humble/setup.bash并确认已写入~/.bashrcapt update时报packages.ros.org 404系统版本和ROS2版本不匹配确认Ubuntu是22.04且源里的codename是jammy安装ros-humble-desktop提示unmet dependencies系统包版本过旧先sudo apt update sudo apt upgrade再安装ROS2包多台设备节点互相看不到ROS_DOMAIN_ID不一致或防火墙拦截统一设置ROS_DOMAIN_ID开放对应UDP端口树莓派上colcon build很慢内存不足触发swapSD卡IO瓶颈加swap用colcon build --parallel-workers 2限制并发RViz2打开后卡死内存不足或渲染负载高精简显示模块降低渲染质量或用PC远程显示树莓派SSH频繁断开供电不稳或网络信号差换稳定电源改善WiFi环境或用网线连接rosdep update时报错网络问题使用国内镜像源或配置代理环境变量这里是学术代理非违规7.2 编译环境与Python版本的坑树莓派上编译ROS2源码如果你选择编译安装而非apt安装最容易遇到的问题就是内存不够。编译的时候gcc会同时起多个进程2GB内存的板子直接卡死。解决办法是限制编译并发度colcon build --parallel-workers 2或者用MAKEFLAGS环境变量限制make的并发数export MAKEFLAGS-j2另外如果系统里多个Python版本共存比如系统自带Python 3.10你后来又装了3.11colcon可能会找错Python解释器。解决方式是用虚拟环境或conda环境并且确认rclpy依赖的是同一个Python版本。这类问题在打印“module rclpy not found”时特别容易误导人实际原因往往是Python路径混了。7.3 树莓派性能优化把换源、swap和日志做极致额外分享一个我个人的优化清单。除了前面说的swap调整还有几个值得做的优化。限制ROS2日志写入频率。ROS2默认会把日志写入~/.ros/log目录调试时间长了会积累大量小文件。在.bashrc里设置export RCUTILS_LOGGING_BUFFERED_STREAM1 export RCUTILS_COLORIZED_OUTPUT1另外定期清理日志是必要的用ros2 doctor可以快速检查环境配置是否有问题ros2 bag可以录制和回放数据包这俩命令值得花时间熟悉一下。还有一个比较实用的点是修改swap的swappiness参数。默认值是60对服务器或者桌面Linux来说OK但在树莓派上太高会让系统频繁使用swap反而降低性能。我把它改成10sudo sysctl vm.swappiness10写入/etc/sysctl.conf永久生效。改完之后系统会尽可能把内存优先用于进程和文件缓存而不是一开始就往swap里搬。7.4 使用鱼香ROS一键安装的补充说明你可能会在网上看到“鱼香ROS一键安装”这个方案。它是国内ROS社区很流行的一个安装脚本本质上是把配置源、安装依赖、设置环境变量等步骤自动化了。对新手来说确实方便一条命令就能装完ROS2。如果你只是想快速跑起来看看效果用它没有问题。但我的经验是如果你想认真搞ROS2开发建议还是手动走一遍完整流程。手动配置的意义不在于“比别人多花时间”而是你在一步步操作的过程中会真正理解每个文件是干什么的、每条命令解决什么问题。等以后出了问题你能更快定位是源的问题、环境变量的问题还是依赖包的问题。我用鱼香ROS帮别人装过环境遇到问题排查时反而要绕开脚本逻辑去查比手动配置更难搞。8. 给新手的个人经验树莓派4BROS2是值得投入的方向最后分享几个我在实践中积累的经验不按教程来。第一别一开始就上最优性能的配置。很多新手拿到树莓派就想装Ubuntu Desktop再开RViz2结果卡得怀疑人生。先按Server版装好跑通命令行环境再按需加图形界面这是一种“少即是多”的路径。我的开发主力机是PC树莓派只负责跑节点两边的分工非常清晰效率比单板子干所有事情高太多。第二善用“最小化复现”。遇到任何诡异问题先不要急着在庞大的工作空间里找原因而是写一个最简节点只有最少的依赖和最简单的逻辑在干净环境里跑一遍。如果最小的例子能跑通说明问题出在你的业务代码如果最小的例子也跑不通那问题大概率出现在环境或通信链路上。这个方法帮我排查掉了很多看似复杂的问题成本极低。第三多机通信是树莓派作为机器人计算平台的核心价值。单板子的能力终归有限但如果你把它和一台性能足够的PC组合起来树莓派采集传感器数据、PC跑导航算法、RViz2在PC上显示整个系统的能力就上了一个量级。这个方向上的进阶学习路径我强烈推荐从Humble官方tutorials开始然后去读Robot Operating System 2 for Autonomous Vehicles的源码最后自己尝试把一个真实机器人小车接上树莓派跑通SLAM建图和导航。树莓派4B跑ROS2确实是机器人行业最省钱的入门方案之一。虽然中间会踩一些坑但每解决一个问题你对ROS2的理解就会深一层。这篇文章写到的流程、方法、坑都是我亲手试过、验证过的。如果你照着做能少走几步弯路这时间花的就值了。
企业数字化 ERP 产品动态
相关推荐
Atlas 300V 24G推理卡YOLO部署全流程实战指南 上个月帮客户做一套边缘巡检方案,前前后后折腾了两周,最终选定的硬件方案里就有华为的 Atlas 300V 24G 推理加速卡。坦率讲,这张卡在圈子里的热度一直不低,但真把它用来跑 YOLO 系列模型,从环境搭建到模型转换… · 2026/9/25 6:48:15
Wi-Fi 6调度机制深度解析:OFDMA、MU-MIMO与TWT 我调试无线网络时最常被问到的一句话是:换了 Wi-Fi 6 路由器,为什么人多的时候还是卡?过去我会先查干扰、查终端连接数,后来发现真正值得研究的,其实是 802.11ax 里那套平时不太被注意的调度逻辑。ax调度不是某一个开关… · 2026/9/25 6:48:09
Atlas 300V部署YOLO实战:从PyTorch到OM模型全流程指南 先从不废话的结论说起:Atlas 300V 就是运算加速卡,而且是一张专为 AI 推理设计的加速卡。我拿到这块卡的第一反应也在确认这件事,毕竟项目交付文档里写着“atlas 部署 yolo”,这名词看起来像个地图软件,实际是华为昇腾… · 2026/9/25 6:48:09
Windows 11无线网卡故障根因与实战修复指南 1. 为什么Windows 11无线网卡故障让人特别头疼——不是驱动装错了,是系统底层逻辑变了Windows 11的无线网卡问题,和Win10、Win7时代完全不是一个量级。我从2021年Beta版开始就持续跟踪Win11网络栈重构,到2024年26H2预览版,已经处理… · 2026/9/25 7:14:26
Atlas 300V 24G AI推理卡部署YOLO全流程指南 “atlas 300V 24G是运算加速卡吗”——这段时间后台收到不下十条类似的问法,还有一拨人直接问“atlas部署yolo怎么搞”。说实话,这个热搜词组合特别典型:一张推理卡,一个目标检测模型,本质上都是在问同一件事——手上这… · 2026/9/25 7:14:26
ECC深度实战:用TaoToken统一Key构建生产级AI多智能体编码工作流系统 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 7:14:26
Atlas 300V 24G部署YOLOv8:从ONNX到OM的完整实践 Atlas 300V 24G到底是不是一块运算加速卡?答案是肯定的,而且它是一块专门为“推理”而生的加速卡。最近在项目群里被问得最多的问题就是“atlas部署yolo到底行不行”,这个卡在工业视觉、智慧安防、边缘计算这些圈子里热度确实在涨。我这段时间… · 2026/9/25 7:14:20
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37