拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

树莓派4B+Ubuntu 22.04:RPLIDAR C1激光雷达ROS2建图

树莓派4B+Ubuntu 22.04:RPLIDAR C1激光雷达ROS2建图 1. 树莓派4B跑激光雷达这件事为什么值得动手做一遍把一台巴掌大的树莓派4B、一套Ubuntu 22.04系统、一颗思岚RPLIDAR C1激光雷达凑在一起能做出什么这是我这段时间反复被问到的问题。答案比很多人想的要实在一套能跑通的二维环境扫描与建图平台。这个东西不花哨但它是移动机器人、自动导航小车、室内测绘这些方向的入门底座——你能用它看到真实的距离数据流能让机器人在房间里转一圈就吐出一张地图还能把这套东西接到ROS2上继续往上叠算法。我之所以选树莓派4B作为主控理由很朴素。第一它便宜且好买几百块的板子烧了不心疼适合反复折腾。第二它自带40针GPIO、四个USB口、千兆网口和无线网卡思岚C1这类USB接口的雷达插上就能用不需要额外的转接板。第三ARM64生态这两年成熟得差不多了Ubuntu 22.04 LTS对树莓派4B有官方支持镜像apt源里的ROS2 Humble也是现成的省去了大量交叉编译的痛苦。相比之下如果你拿一台x86小主机功耗和体积都上去了拿一块单片机又跑不动完整的ROS2和建图算法。树莓派4B正好卡在那个够用且不贵的位置上。选Ubuntu 22.04而不是20.04主要是为了ROS2。ROS2 Humble的官方支持平台就是Ubuntu 22.04这是长期支持版本维护到2027年apt直接装不用自己编译源码。我在网上看到很多人还在纠结装20.04还是22.04其实如果你的目标就是激光雷达加ROS2建图22.04是更省事的那条路。20.04对应的ROS2 Foxy已经停止官方维护了新项目没必要再往上靠。当然如果你的项目里有一堆只支持Foxy的历史代码那就另说——这也是我在实际选型时踩过的判断点后面会专门聊。思岚RPLIDAR C1是我这次用的雷达。它是思岚产品线里偏入门的一款二维激光雷达360度扫描USB直连价格友好配套的SDK和ROS驱动都有开源仓库。很多人第一次买雷达容易犯迷糊看到参数表上写12米测距10Hz扫描频率就以为随便哪款都行实际上不同型号在室内强光下的表现、在深色物体上的回波质量、数据接口的稳定性差别很大。C1这个定位的雷达最适合的就是室内、中小场景、对成本敏感的建图需求比如房间级的地图构建、走廊导航、教学演示。这套组合能解决的问题说白了就是三件事让树莓派认得出雷达、让雷达的数据稳定地流出来、让数据变成一张能用的地图。听起来简单但每一步都有坑。系统镜像烧录、串口权限、udev规则、ROS2的驱动编译、TF坐标变换、建图参数调优任何一环出问题结果就是雷达转着但屏幕上什么都没有或者地图飘得没法看。这篇文章适合谁如果你是刚拿到树莓派和雷达、想从零跑通一套建图demo的爱好者这篇文章可以当成一份带坑位标注的操作记录如果你已经装好了系统卡在雷达能转但ROS2收不到数据这一步可以直接跳到权限和驱动那几节如果你在纠结硬件选型和系统版本前几章的对比分析能帮你少走弯路。我会把每一步为什么这么做讲清楚而不只是丢一串命令——因为真正让你卡住的往往不是命令本身而是命令背后的机制没搞明白。2. 硬件选型与系统镜像别在第一步就把自己坑了2.1 树莓派4B的版本差异与散热这个绕不开的话题树莓派4B有几个容易忽略的版本差异。内存有2GB、4GB、8GB之分。跑ROS2加建图我建议至少4GB起步。原因在于ROS2 Humble加Cartographer这类建图包运行时内存占用不低再加上Ubuntu桌面环境本身要吃掉一部分2GB版本会频繁触发交换分区建图过程中卡顿甚至进程被杀。4GB是舒服的入门线8GB适合你后面想在同一块板子上再叠视觉、导航这些模块。另一个坑是供电。树莓派4B对电源很挑官方要求5V/3A。很多人用手机充电头凑合结果就是雷达一转、CPU一满载电压跌下去系统直接重启或者USB设备掉线。我实测中最典型的症状就是雷达刚开始转得好好的建图跑到一半突然断连dmesg里刷一堆USB设备重新枚举的日志。换一个稳定的5V/3A电源问题立刻消失。这类看起来是软件问题、实际是供电问题的情况在树莓派项目里非常常见一定要先把电源排除掉。散热也是必须处理的。树莓派4B的SoC在持续负载下温度会冲到80度以上触发降频建图这种CPU密集型任务受影响明显。我用的是带风扇的金属外壳风扇接在GPIO的5V和GND针脚上常转。这里提醒一句树莓派4B的风扇针脚5V对应的是物理引脚2或4GND是6、9、14、20、25、30、34、39这些。如果你买的是三线风扇第三根线是测速线可以不接。接线时务必断电操作接错到3.3V针脚上风扇转速会变慢接反了风扇不转——这些都是新手常见的低级错误但确实会让人排查半天。存储方面我强烈建议用质量好的A2级别microSD卡容量32GB以上。别用那种便宜的大容量卡树莓派上随机读写性能差系统会明显拖慢。如果预算允许用USB3.0接口接一个SSD启动速度快一个档次建图时写日志、存地图的体验完全不一样。SSD启动需要在树莓派上先改一次启动顺序这个步骤官方文档写得很清楚照着做就行。2.2 Ubuntu 22.04 for Raspberry Pi的镜像选择与烧录要点Ubuntu官方为树莓派提供了专门的镜像路径是ubuntu.com/download/raspberry-pi。这里有个关键区分桌面版和服务器版。桌面版带图形界面方便你插显示器直接操作服务器版没有界面资源占用小适合远程SSH。我的建议是如果你手边有显示器和键盘先用桌面版把系统装起来、网络配好、确认硬件都正常再决定要不要换成服务器版。桌面版在树莓派的HDMI输出上第一次启动可能会遇到分辨率和黑屏问题这时候别慌多半是显示器的EDID识别问题换个显示器或者等系统完全启动后再插HDMI线通常能解决。烧录工具用Raspberry Pi Imager最省事它内置了Ubuntu镜像的下载选项还能在烧录前预配置WiFi和SSH。这一步非常重要在Imager的设置里提前填好WiFi名称密码、主机名、用户名密码烧录完插卡开机系统自动连上网络你直接SSH进去省去了接显示器配置的麻烦。我试过用Rufus这类通用工具烧录Ubuntu镜像也能用但Rufus不能预配置WiFi你得自己处理cloud-init或者手动配网反而更麻烦。所以树莓派场景下Raspberry Pi Imager是更顺手的选择。首次启动会比较慢系统在做初始化可能要三五分钟。耐心等别急着断电。启动完成后第一件事是更新系统sudo apt update sudo apt upgrade。树莓派的/boot/firmware分区里如果空间紧张apt upgrade可能会报空间不足这时候需要先清理一些不需要的包。这个坑挺隐蔽的我第一次遇到时以为是镜像坏了其实是boot分区满了。网络配置方面Ubuntu 22.04默认用netplan管理网络。如果你在Imager里配过WiFi开机就自动连上。如果没连上检查/etc/netplan/下的yaml文件。有个常见问题是树莓派4B的板载无线网卡在某些镜像版本里驱动加载不稳定表现为wlan0时有时无。遇到这种情况先rfkill list看是不是被软屏蔽了rfkill unblock all解开如果是驱动问题可以插一个USB无线网卡临时顶上。有线网口是最稳的做激光雷达项目我建议一开始就用网线排除无线变量。2.3 装完系统后的几项必做设置系统跑起来后有三件事建议立刻做完。第一换apt源。默认源在国外更新慢得让人崩溃。换成国内镜像源能提速十几倍具体源地址网上都有现成的改/etc/apt/sources.list即可。第二设置静态IP或者固定DHCP。树莓派做机器人平台IP变来变去很讨厌在netplan配置里给它绑一个固定地址后面SSH和ROS2多机通信都省心。第三关闭自动休眠和屏幕黑屏。Ubuntu桌面版默认几分钟无操作就黑屏在设置里改成永不或者用gsettings命令直接关掉。别小看这个建图过程中屏幕黑掉会让你误以为系统挂了。再补充一个关于时间同步的细节。ROS2节点之间通信对时间戳敏感如果树莓派时间不对TF变换会报时间外插值的错误。确保系统开了NTP自动对时timedatectl命令可以看到同步状态。这个坑我在调试Cartographer时踩过地图一直建不好最后发现是系统时间差了十几秒。3. RPLIDAR C1的硬件接入与底层通信确认3.1 C1的接口特性与USB转串口的本质思岚RPLIDAR C1通过USB接口和主机通信但它的底层其实是串口协议。雷达内部有一个USB转串口芯片所以你在系统里看到的不是USB设备而是一个/dev/ttyUSB0这样的串口设备。理解这一点非常关键因为后面所有的权限问题、波特率问题本质上都是在和这个串口打交道。C1的默认通信波特率是115200具体以你手上的型号文档为准思岚不同型号有差异。雷达通过这个串口持续输出扫描数据每一圈扫描给出角度和距离的点云。SDK负责把这些原始数据解析成结构化的扫描帧。你在代码里拿到的是这个角度上有多远的信息而不是裸字节。插上雷达后用lsusb能看到思岚的设备用ls /dev/ttyUSB*能看到串口设备节点。如果/dev/ttyUSB*里什么都没有那说明系统没识别到串口芯片可能是线的问题、口的问题或者雷达没供电。C1是通过USB线从主机取电的所以USB口的供电能力要够。树莓派4B的USB口供电普遍够用但如果同时接了多个USB设备可能出现供电不足导致雷达识别失败。遇到这种情况接一个有独立供电的USB扩展坞问题通常能解决。3.2 串口权限这个最常见的第一个坑Ubuntu默认情况下普通用户没有访问/dev/ttyUSB0的权限只有dialout组的成员才有。如果你直接用普通用户跑雷达程序会报Permission denied。解决办法是把自己加到dialout组sudo usermod -aG dialout $USER。注意加完组之后要重新登录或者重启才生效这一点很多人会忽略加完组发现还是没权限其实是没重新登录。单纯加到dialout组其实还不够稳因为设备节点是热插拔时动态创建的每次插拔后权限归属可能会有变化。更靠谱的做法是写一条udev规则把这个特定的雷达设备固定映射成一个别名比如/dev/rplidar并设置好权限。udev规则文件放在/etc/udev/rules.d/下文件名以.rules结尾。规则内容要根据你雷达的厂商ID和产品ID来写用lsusb命令能看到这两个ID。写好规则后sudo udevadm control --reload-rules sudo udevadm trigger让规则生效。这条udev规则的好处是双重的一是权限稳定二是设备名固定。因为如果你同时接了多个串口设备ttyUSB0和ttyUSB1的顺序可能变来变去程序里写死ttyUSB0就会出问题。用一个固定的别名不管插拔多少次、接了几个设备程序里永远指向那一个可靠性高得多。这是我强烈建议做的一步虽然看起来只是配置但它解决的是后面反复折腾的根源。3.3 用官方工具先验证雷达本身是好的在装任何SDK、任何ROS驱动之前先用思岚官方的测试工具确认雷达硬件本身没问题。思岚提供了跨平台的SDK和可视化工具你可以拉取源码编译也可以找现成的可执行文件。这个工具能直接显示出雷达的扫描点如果它能看到一圈圈散点说明雷达、线、供电、串口权限全都正常问题一定在后面对应的软件层。这一步的意义在于分层排查。如果我跳过这一步直接在ROS2里跑然后发现没数据我就要同时怀疑雷达坏没坏、权限对不对、驱动装没装对、话题名对不对、TF配置对不对——变量太多了。先用官方工具确认硬件层OK就把问题范围缩小到软件层排查效率天差地别。这是我在做所有传感器项目时都坚持的原则先把最底层的链路打通再往上叠。官方工具编译时可能会遇到依赖缺失。通常会需要CMake、编译器等基础工具如果树莓派上还没装sudo apt install build-essential cmake补上。编译过程中如果报找不到某个头文件多半是缺了对应的开发包看报错信息apt装一下就行。这一步一般不会太难如果卡住大概率是网络或者依赖的问题和雷达本身无关。4. Ubuntu 22.04上装ROS2 Humble与激光雷达驱动4.1 ROS2 Humble在ARM64上的安装路径选择ROS2 Humble在Ubuntu 22.04上的安装官方提供deb包安装方式。这套方式在x86上很成熟在ARM64上同样有对应的仓库树莓派可以直接用。流程大致是配置apt源、导入密钥、安装ros-humble-desktop或更精简的ros-humble-ros-base。这里我建议装ros-humble-ros-base不带图形化工具体积小、依赖少树莓派上更轻快。你需要的工具可以后面按需单独装。安装过程中最容易出的问题是源配置。如果apt源里加了ROS2的仓库但密钥没导入对apt update会报签名验证失败。这个错误信息的提示其实很明确照着手动导入密钥即可。另一个坑是网络问题导致的下载中断ROS2的包不小网络不稳时可能装到一半失败这时候重新apt installapt会从断点继续。装完之后ros2 run demo_nodes_cpp talker跑一下看能不能正常输出消息。这一步是验证ROS2环境本身OK的基准别跳过。如果demo都跑不起来后面装驱动也是白搭。环境变量方面每次打开新终端都要source一下ROS2的setup脚本否则找不到ros2命令。嫌麻烦的话把source写进.bashrc。这里有个细节如果你是多个工作空间叠加source的顺序会影响环境变量先source底层的ROS2再source你自己编译的工作空间顺序反了会有包路径问题。4.2 RPLIDAR的ROS2驱动获取与编译思岚官方维护了ROS2版本的RPLIDAR驱动包放在开源代码托管平台上。拿到源码后你需要在你的工作空间里编译它。ROS2用colcon作为构建工具命令是colcon build。这里有个ARM64特有的注意点RPLIDAR驱动依赖SDKSDK里有C代码编译时会用到系统的编译器和基础库。树莓派上编译前确认build-essential和cmake都装了不然会在编译阶段报错。编译时如果遇到和Python相关的构建错误通常是setuptools或者empy版本的问题。ROS2 Humble对Python包的版本有要求装一下python3-empy这类常见依赖能解决大部分问题。另一个常见错误是colcon build时某个包编译失败导致整个工作空间构建中断这时候看那个包的单独报错逐个解决别急着重跑整个构建。编译成功后source install/setup.bash然后启动雷达节点。启动命令会加载一个参数文件里面配置了串口名、波特率、帧率这些。这里就是你前面udev规则发挥作用的地方参数里把串口设成你固定的别名不管设备顺序怎么变雷达节点都能正确找到设备。如果启动后报cannot open serial port先检查串口名对不对、权限够不够、雷达插没插紧。这三个检查项按顺序过一遍基本都能定位到原因。4.3 让数据真正流出来话题、frame_id与可视化验证雷达节点启动后它会发布扫描数据话题。用ros2 topic list能看到这个话题用ros2 topic echo能看到具体的数据内容。如果话题在列表里但echo没有数据可能是雷达没有真正开始扫描或者数据发布被卡住。一个实用的检查手段是ros2 topic hz看一下话题的发布频率正常应该是接近雷达的扫描频率C1大概是10Hz左右以实际型号参数为准。如果hz很低或者时有时无多半是串口通信不稳定或者供电问题。frame_id是另一个容易被忽略但非常关键的配置。激光雷达发布的数据里带有一个坐标系名字就是frame_id通常默认是laser或laser_frame之类。后面做TF变换和建图时你要保证建图模块里配置的坐标系名字和雷达发布的frame_id完全一致错一个字母建图就会报no transform from xxx to xxx。我第一次配这个时就在frame_id上卡了很久因为报错信息不够直白容易被带偏到别的地方去排查。可视化验证用RViz2。在RViz2里添加一个LaserScan显示选对话题设置好固定坐标系就能看到雷达扫出的点云。如果RViz2里看不到点先确认话题选对了、坐标系设对了、然后看一眼是不是雷达的数据本身就在动。RViz2在树莓派上跑比较吃力如果卡顿明显可以用一台电脑通过ROS2的多机通信把数据从树莓派传出来在电脑上看这样可视化流畅很多。多机通信需要配置好两边的ROS_DOMAIN_ID一致以及网络能互通。5. 从数据流到一张能用的地图建图配置与调参5.1 建图方案的选择与Cartographer的适配性拿到稳定的激光扫描数据后下一步是把它变成地图。ROS2生态里做二维建图常见的选择有Cartographer、SLAM Toolbox这几种。Cartographer在激光建图上非常成熟回环检测做得好适合室内场景SLAM Toolbox启动更快、配置更简单适合快速上手。我这次主要用Cartographer这条线因为它在二维激光建图上的效果稳定社区资料也多。Cartographer的ROS2版本是cartographer_ros需要单独安装或从源码编译。在树莓派上我建议用apt安装预编译的版本省去编译的时间和踩坑。Cartographer的配置分几个部分Lua配置文件定义建图参数Launch文件定义节点启动的拓扑URDF或者静态TF定义传感器的坐标系关系。这几块要逐一对上任何一个坐标系名字对不上都会导致建图失败。坐标系这块要理清楚。典型的配置是三个坐标系map是最上层的全局地图坐标系odom是里程计坐标系base_link是机器人本体坐标系再加上雷达的laser坐标系。雷达的扫描数据从laser坐标系发出Cartographer通过TF把它们串起来。静态TF用来定义laser相对base_link的安装位置和姿态——哪怕你只是把雷达放在桌上没动也要配这个静态变换告诉系统雷达在哪儿。很多人以为雷达不动就不需要TF结果启动后一直报找不到变换就是这里的问题。5.2 建图过程中的参数调整与地图飘的成因地图飘是激光建图新手最常抱怨的问题。表现形式是走一圈回到原点地图上却对不上墙体扭曲、重影越走越乱。造成这个问题的原因有好几层要逐层排查。第一层是里程计。如果你有轮式底盘里程计来自编码器如果你像我一样只是手动拿着雷达走那里程计就没有。没有里程计的情况下Cartographer可以只靠激光做扫描匹配来建图但这就对激光数据的质量和扫描频率要求更高。C1这种入门级雷达在快速移动或者转向时数据稀疏会导致匹配误差累积地图就容易飘。解决办法是移动要慢、要稳转圈的时候尤其慢一点给算法足够的时间做匹配。第二层是时间戳和TF的时间同步。前面提过系统时间的问题如果时间戳不对TF变换在时间轴上对不上扫描匹配就会乱。用ros2 topic hz看TF话题的发布频率正常应该很稳定。如果TF发布抖动很大检查是不是某个节点的CPU占用过高导致发布时间不稳。第三层是环境特征。激光建图依赖环境里有足够的几何特征——墙、门、家具。如果你在一个空旷的、四壁都是纯白墙、几乎没有特征的房间里建图算法很难找到匹配点地图就会飘。这时候可以人为放一些纸箱、椅子增加特征。这是很实用的经验建图环境要有料纯白空旷房间是激光SLAM的噩梦。参数上Cartographer里有一组和扫描匹配相关的参数比如匹配的搜索窗口大小、点云采样密度。默认参数在一般室内场景够用但如果你的移动速度快可以把搜索窗口调大一些给匹配更多容错空间。调参的原则是先跑通、再优化不要一上来就改一堆参数那样出问题都不知道是哪个参数导致的。5.3 保存地图与验证结果的正确姿势建图完成后要保存地图。Cartographer提供保存地图的服务调用会生成两个文件一个.pgm图像文件就是地图的可视化图像一个.yaml文件描述地图的分辨率、原点位置、图像路径这些元信息。保存时要注意地图的坐标系原点和你建图时的原点是对齐的这个在后续导航里很重要。保存完成后验证地图质量。打开.pgm看墙体应该是清晰的直线点云填充均匀。如果看到墙体是锯齿状的、有明显的重影、或者直线是弯的说明建图过程中有漂移这张图拿去做导航会有问题建议重新建。重影最常见的原因是回环检测没做好——也就是你走一圈回到起点时算法没有把当前扫描和之前的扫描正确关联起来。Cartographer的回环检测参数可以调但更重要的是移动轨迹要合理别走得太快、别在同一个地方反复绕。还有一个实用建议地图保存后用RViz2加载地图话题看一下确认地图和当时的环境对得上。同时把建图时的bag包录下来是个好习惯ros2 bag record录下扫描话题和TF话题这样后面调参、重跑建图都不用重新推着雷达走一遍。Bag包在调试阶段的价值极高我强烈建议第一次建图就录下来。6. 实战中那些让我停下来想半天的坑6.1 雷达转但没数据一次完整的排查链路有一次我遇到雷达能转风扇在转、电机在响但ROS2里话题就是没数据的情况。这种情况最容易被误判因为它看起来在工作。我当时的排查链路是这样的第一步ls /dev/ttyUSB*确认设备节点存在存在。第二步ros2 topic hz看话题频率是0没有数据。第三步ros2 topic echo看内容空的。第四步回到底层用官方测试工具跑发现官方工具能出点——说明硬件和串口都正常问题在ROS驱动的配置层。继续往下检查驱动节点启动时的日志发现报的是串口打开失败但错误信息里提到的串口名和实际设备名不一致。原来是参数文件里写的串口名没更新成我udev规则里的别名它还在找旧的默认名字。改成正确的别名重启节点数据立刻出来了。这个坑的教训是每次改了udev规则或者换了USB口都要回头检查驱动参数文件里的串口名。这个细节特别容易被遗忘因为改规则的时候你不会想到驱动参数。还有一次是另一种转但没数据雷达转了半天官方工具也出点但一到ROS2里就没数据。最后发现是波特率配置不对。参数文件里的波特率和雷达实际的不一致导致驱动收到的是乱码解析不出有效的扫描帧。不同型号的雷达波特率可能不同一定要以你手上那颗雷达的规格为准去设置。这个坑很难从表象上判断因为设备节点存在、权限也对、官方工具也正常唯独ROS里不行很容易让人怀疑到驱动本身有bug。6.2 供电不足引发的间歇性断连前面提过供电但这里要展开说因为这个坑的表现极具迷惑性。症状是系统运行一段时间后雷达突然掉线/dev/ttyUSB0消失过几秒又重新出现。或者建图跑到一半整个程序崩了。这类间歇性问题非常难debug因为复现不稳定。我后来的判断方法是一边跑建图一边用dmesg -w盯着内核日志。掉线的那一刻内核会打印USB设备断开的日志说明是物理层的连接断了而不是软件逻辑的问题。顺着这个线索我把雷达单独接一个有源USB hub问题不再复现。结论就是树莓派USB口在负载下的供电波动导致雷达芯片复位。这个经验很值钱凡是间歇性、无规律、重启就好、跑一会儿又坏的问题先怀疑供电尤其是树莓派这种USB供电能力有限的平台。解决供电问题有几个手段。一是换更稳定的电源适配器确保5V/3A以上且电压稳定。二是用带独立供电的USB hub接雷达。三是尽量避免雷达和其他大功率USB设备共享同一个USB控制器——树莓派4B的两个USB口其实分属不同的控制器区分开接能减少相互干扰。这些做法我都试过组合起来用最稳。6.3 树莓派性能瓶颈下的可视化方案树莓派4B跑RViz2是真的吃力。RViz2是重的图形程序占CPU和内存都大和Cartographer抢资源结果就是建图卡顿、掉帧、地图质量下降。我一开始在树莓派本机上跑RViz2看图边建图边看效果很差整个系统都在卡。后来我改成分离方案树莓派只负责跑雷达驱动和Cartographer轻装上阵可视化放在一台x86电脑上通过同一个网络、同一个ROS_DOMAIN_ID把话题数据订阅过去看。这样树莓派专心建图可视化流畅两边互不干扰。配置多机通信的关键是两边IP能互通、ROS_DOMAIN_ID要一致、ROS_LOCALHOST_ONLY不能开开了就只监听本机外面看不到。这几个变量对上了跨机器订阅话题就很顺。这个方案对性能的提升是立竿见影的。树莓派上的CPU占用降下来之后Cartographer能更从容地做扫描匹配地图质量肉眼可见地变好。所以我给所有在树莓派上跑SLAM的人的建议都是别在本机跑可视化把计算和显示分开。这是树莓派平台的资源现实决定的不是软件优化能绕过去的。6.4 系统层面那些拖慢建图的隐形设置Ubuntu 22.04桌面版默认开着一些后台服务比如自动更新检查、无人值守升级、桌面搜索索引。这些小东西平时无所谓但在树莓派这种资源紧张的设备上它们会在你建图的时候突然占一波CPU或者IO导致建图卡顿甚至丢帧。我建议在建图前把这些关掉sudo systemctl stop unattended-upgrades、禁用snap相关的自动刷新等。换掉桌面环境也是一个选择。如果你确认不需要图形界面用Ubuntu Server版或者把桌面换成轻量的能省下几百MB内存。我自己长期用的是Server版加SSH只在需要的时候通过远程可视化看数据。这个选择让树莓派的资源几乎全部留给建图任务。交换分区也值得设置一下。树莓派的默认交换空间比较小内存紧张时容易OOM。适当地增大swap能缓解但swap在SD卡上会拖慢速度、增加卡损耗。所以治本之道还是保证内存够用选4GB以上版本加上减少不必要的后台进程。7. 把整套流程固化下来的一些个人习惯做这套东西做久了我慢慢形成了一些自己的习惯分享出来供参考。第一个习惯是分层验证。雷达项目涉及的层级很多——硬件、串口、SDK、ROS驱动、TF、建图。每引入一个新层级前一个层级必须是验证过的、稳定的。绝不跳级调试。这个习惯让我在遇到问题时能快速定位到是哪一层出的问题而不是一通乱试。第二个习惯是留底配置。udev规则、netplan网络配置、Cartographer的Lua参数、Laune文件、ROS2的环境变量这些东西我都在一个备份目录里存一份注释清楚每个参数为什么这么设。树莓派项目最爱折腾系统重装一次系统这些配置全没了有备份能省掉大量重复劳动。特别是udev规则里雷达的厂商ID产品ID重装后重新查一遍很烦存着直接用。第三个习惯是先录包再调参。第一次用某个雷达、某个环境建图时我会先把数据录成bag包再慢慢调参数。因为调参可能要试很多组如果每次都推着雷达重新走一遍时间和体力都受不了。有了bag包调参变成离线回放效率高得多还能反复对比不同参数的效果。第四个习惯是记录异常。我有个简单的文本记录专门记每次遇到的奇怪现象、当时的判断、最后的原因。比如雷达间歇掉线—怀疑软件—实为供电这条记录让我以后再遇到类似症状能秒想到供电方向。传感器和机器人项目里的坑有很强的重复性记录一次受益很久。这套树莓派加Ubuntu加RPLIDAR C1的组合从硬件到建图走完一遍最花时间的其实不是哪一步命令而是把每一层的原理搞明白之后的啊原来是这样。我最初也以为装了驱动就能出图实际做下来才发现从设备节点到话题到TF到地图每一环都有它自己的逻辑理解这些逻辑比记住一堆命令有价值得多。C1这颗雷达在这个价位上表现够用树莓派4B也扛得住这套负载只要你把供电、权限、时间同步、可视化分离这几件事处理好它稳定的样子会让你觉得前面折腾的每一步都值。最后分享一个小技巧如果你的地图总是局部漂移先别急着调Cartographer的复杂参数去看看是不是移动过程中雷达有轻微的俯仰晃动——雷达安装的稳固程度对建图质量的影响比很多软件参数都大。
返回列表