树莓派4B 加 Ubuntu 22.04 再挂思岚 RPLIDAR C1 激光雷达这套组合我拿来做室内移动机器人原型已经有一段时间了。它最直接的价值是把一个原本偏贵、偏实验室味的激光雷达 SLAM 门槛压到了个人开发者能接受的成本区间树莓派4B 负责跑系统、驱动和 ROS2 节点Ubuntu 22.04 提供长期支持环境RPLIDAR C1 负责输出 360 度扫描数据后面接 Cartographer 或 slam_toolbox 就能建图、定位、避障。适合谁看如果你手里已经有树莓派4B想玩激光雷达建图或者在做 ROS2 小车、服务机器人、巡检原型但又不想一上来就碰多线激光雷达和复杂标定这套方案很合适。它不适合谁想直接做自动驾驶级别 3D 感知、室外强光长距离建图、或者要求厘米级高频定位的人C1 和树莓派4B 都会很快摸到瓶颈。下面我按自己实际搭机的顺序把选型、系统、串口、驱动、ROS2、建图、保存和踩坑细节全部拆开讲。1. 方案整体设计与选型思路1.1 为什么是树莓派4B 加 Ubuntu 22.04 这套底座树莓派4B 的优势不是性能爆炸而是生态成熟、资料多、价格相对可控。它用的是 4 核 Cortex-A72常见 4GB 和 8GB 版本跑 Ubuntu Server 22.04 64 位足够应付激光雷达数据采集、ROS2 节点转发和轻量 2D SLAM。Ubuntu 22.04 LTS 对应 ROS2 Humble这是目前 ROS2 里资料最完整、arm64 支持最稳的版本之一。很多人一上来装 Desktop 版结果树莓派桌面占掉大量内存和 CPURViz2 一开就卡雷达数据也跟着掉。我自己的习惯是树莓派上装 Ubuntu Server 22.04 64 位只跑驱动、SLAM 和必要节点需要看 RViz2 时用另一台电脑连同一个 ROS2 域或者直接 SSH 加命令行验证。这样做的理由很直接树莓派4B 的瓶颈通常在内存带宽、USB 和散热而不是单核性能少一层桌面就少一层干扰。另一个考虑是系统版本。Ubuntu 20.04 对应 ROS2 Foxy已经进入维护后期新包越来越少Ubuntu 22.04 对应 Humble官方支持周期更长Cartographer、slam_toolbox、Nav2、rviz2 这些包在 arm64 上更容易找到可用版本。树莓派4B 装 Ubuntu 22.04 时优先选 64 位镜像不要选 32 位。激光雷达 SDK 和 ROS2 的很多依赖在 64 位下编译更顺内存寻址也更宽裕。如果你之前只玩过树莓派官方系统第一次装 Ubuntu 可能会遇到 Wi-Fi、串口、启动分区路径不一样的问题这些后面会逐个说。1.2 RPLIDAR C1 的定位和关键参数RPLIDAR C1 是思岚面向低成本机器人市场的一颗三角测距激光雷达定位很明确室内、中短距离、2D 建图和避障。它不像多线雷达那样输出三维点云而是给出一圈一圈的二维距离数据。二维数据听起来简单但对扫地机、送餐车、巡线小车、教学机器人来说已经非常够用因为大多数室内地面机器人只需要知道“周围哪里有墙、哪里有腿、哪里能走”。我手里这台 C1 的典型规格可以看下面这张表不同批次和固件可能有细微差异最终以官方规格书和包装说明为准项目典型参数实际影响测距范围约 0.05m 到 12m白墙、纸箱反射好黑色吸光物体、玻璃、强光会缩短扫描角度360 度一圈完整覆盖适合建图和避障采样率约 5000 点每秒10Hz 下每圈约 500 点角分辨率约 0.72 度扫描频率约 10Hz推车建图时速度不能太快否则点云会拉稀通信接口UART常见 115200 波特率配 USB 转串口模块后在系统里是 /dev/ttyUSB0供电5V建议独立供电或带源 USB Hub别和树莓派抢电体积和重量小巧轻量适合小车上顶装或前装C1 的核心优势是便宜、体积小、ROS 生态能接。它的短板也很明显三角测距对远距离、强光、黑色物体和透明物体的稳定性不如 TOF 雷达10Hz 扫描频率在快速旋转或快速移动时容易丢匹配单线扫描没有高度信息桌面边缘、悬空障碍、低矮台阶不一定能识别。想清楚这些再决定它适不适合你的场景比盲目上项目更重要。1.3 软件栈怎么选裸 SDK、ROS2 驱动、Cartographer 还是 slam_toolbox我建议分三层验证不要一上来就装全套 SLAM。第一层用思岚官方 SDK 的抓取程序直接读串口确认雷达能转、能出距离、角度正常。第二层装 ROS2 Humble 和 RPLIDAR 的 ROS2 驱动在 RViz2 或命令行里看到/scan。第三层再上 Cartographer 或 slam_toolbox 建图。这样排错最省时间因为问题会被隔离在硬件、驱动、ROS 通信、SLAM 配置四个层面不会一锅粥。建图算法怎么选Cartographer 的优点是闭环和精度在 2D 里口碑很好适合房间结构复杂、需要回环修正的场景缺点是配置项多、资源占用高树莓派4B 上跑起来 CPU 很容易吃满。slam_toolbox 的优点是安装简单、在线异步模式轻量、和 Nav2 配合顺缺点是参数调不好时大场景漂移比 Cartographer 明显。我的实际选择是树莓派4B 4GB 版本优先 slam_toolbox8GB 版本可以试 Cartographer但要把分辨率、采样率和运动滤波放宽别拿台式机参数硬套。2. 树莓派4B Ubuntu 22.04 系统安装与基础配置2.1 镜像选择与烧录前的准备树莓派4B 装 Ubuntu 22.04最稳的路径是去 Ubuntu 官方获取 Raspberry Pi 版镜像选 64 位 Server 版。不要随便下桌面版除非你确定要在树莓派本机跑 RViz2。烧录工具用 Raspberry Pi Imager 或者 balenaEtcher 都行前者可以在烧录前预设主机名、用户名、Wi-Fi、SSH省去第一次启动没有显示器的麻烦。我一般会设置主机名pi-robot用户名不要用默认的Wi-Fi 填 2.4G 频段因为树莓派4B 的 2.4G 穿墙更稳USB 3.0 对 2.4G 有干扰但雷达通常插 USB 2.0 口影响小一些。烧录完成后先别急着插雷达。第一次启动只插电源、网线或等 Wi-Fi 起来用 SSH 登进去。首次启动会做分区扩展和 cloud-init可能要等几分钟。如果你用 HDMI 接显示器看到登录提示后也要给它一点时间不要反复断电。系统起来后先做三件事改时区、更新软件、确认内核和架构。uname -a lsb_release -a sudo apt update sudo apt full-upgrade -y sudo reboot重启后检查/boot/firmware/是否存在Ubuntu 22.04 树莓派版的启动文件通常在这里不是老教程里的/boot/config.txt。这个路径差异会影响后面改串口和配置。还有一点树莓派4B 的电源要求是 5V 3A 左右官方电源最省心。如果同时接雷达、USB Hub、风扇、HDMI电源余量不够会出现雷达反复掉线、系统重启、Wi-Fi 断流。这类问题看起来像软件故障实际是供电不足。2.2 串口控制台、GPIO 串口和 USB 串口的区别RPLIDAR C1 通常通过原厂 USB 适配器接到树莓派系统里看到的是/dev/ttyUSB0不是 GPIO 上的/dev/ttyS0或/dev/serial0。这一点必须分清楚。很多教程讲树莓派串口配置是在关 GPIO 串口的登录控制台那是为了接 GPIO 串口设备。你用 USB 适配器时核心是 USB 转串口芯片驱动和 dialout 权限不是 GPIO 串口复用。不过如果你打算用 GPIO 的 UART 直接接雷达 TTL 线那就要处理串口控制台。Ubuntu 22.04 上可以安装raspi-config也可以手动编辑/boot/firmware/cmdline.txt把consoleserial0,115200这一段去掉再确认/boot/firmware/config.txt里enable_uart1。手动改之前先备份改错了可能导致系统启动日志看不到。我的建议是新手一律用 USB 适配器稳定、可替换、不碰 GPIO 复用排错也简单。雷达供电如果从 GPIO 5V 取要注意电流和地线共地线径太细会导致雷达启动瞬间掉压。2.3 基础环境与常用工具安装系统更新完装一批后面会用到的工具编译工具、串口工具、Git、Python 依赖、网络排查工具。树莓派4B 的 SD 卡读写速度有限编译大项目时最好用 USB 3.0 固态硬盘启动或者至少用 A2 级别高速卡。下面这套命令不重但很实用sudo apt install -y git cmake build-essential libudev-dev \ python3-pip python3-venv python3-colcon-common-extensions \ minicom screen htop usbutils udev net-tools装完后用lsusb看 USB 设备。插入雷达再执行一次如果多出一个CP210x或CH340设备说明 USB 转串口芯片被识别了。再用dmesg | tail -30看内核有没有报ttyUSB0。如果lsusb看得到但/dev/ttyUSB0不出现通常是内核模块没加载、线材只有供电没有数据、或者 USB Hub 供电不足。把雷达直接插树莓派 USB 2.0 口试一次排除 Hub 问题。3. RPLIDAR C1 驱动安装与原始数据验证3.1 编译官方 SDK 并跑通第一帧数据在装 ROS2 之前我强烈建议先用官方 SDK 验证硬件。思岚的rplidar_sdk在 GitHub 上可以获取编译过程不复杂。这样做的好处是如果 SDK 都读不到数据就不用怀疑 ROS2 配置了问题一定在硬件、串口或权限。cd ~ git clone https://github.com/Slamtec/rplidar_sdk.git cd rplidar_sdk git submodule update --init --recursive make -j4编译完成后在output/Linux/Release/下面会有测试程序。常见的有ultra_simple和simple_grabber。先给串口权限再运行sudo chmod 666 /dev/ttyUSB0 ./output/Linux/Release/ultra_simple /dev/ttyUSB0 115200如果终端里开始刷角度和距离比如theta: 123.45 Dist: 1.234说明雷达已经正常出数。注意C1 的波特率通常是 115200但不同固件或适配器可能不同如果刷不出数据先确认官方文档里的默认值。看到数据后不要急着关观察几秒看距离值是否稳定、角度是否连续、有没有大面积 0 值。如果角度跳变、距离乱飞先检查供电和线材再检查雷达前方有没有强反光或黑色吸光物体。3.2 串口权限与 udev 规则怎么配sudo chmod 666只是临时方案重启就没了而且每次插拔设备名可能从ttyUSB0变成ttyUSB1。正确做法是加 dialout 组和 udev 规则。先看 USB 转串口芯片的 VID/PIDlsusb常见 CP2102 是10c4:ea60CH340 是1a86:7523。根据你的实际输出写规则下面以 CP2102 为例sudo usermod -aG dialout $USER sudo tee /etc/udev/rules.d/99-rplidar.rules EOF KERNELttyUSB*, ATTRS{idVendor}10c4, ATTRS{idProduct}ea60, MODE:0666, SYMLINKrplidar EOF sudo udevadm control --reload-rules sudo udevadm trigger执行完重新登录groups 里能看到 dialout。之后不管插拔几次雷达都会有一个固定软链接/dev/rplidar。ROS2 启动时直接用这个路径比写死ttyUSB0稳得多。注意如果你用的是 CH340VID/PID 要换成1a86和7523。另外Ubuntu 上有时 ModemManager 会抢串口表现是打开设备失败或数据断断续续可以停掉它sudo systemctl disable --now ModemManager这个操作对纯机器人设备通常没问题但如果你还要用树莓派接 4G 模块就要根据实际情况保留。3.3 原始数据阶段的常见硬件故障这个阶段最容易遇到几类问题。第一/dev/ttyUSB0不存在。优先查线、Hub、供电再看dmesg。第二权限拒绝。把用户加入 dialout 后必须重新登录或者临时用 sudo 跑一次确认。第三雷达不转。C1 上电后应该能看到旋转如果不转可能是供电不足或电机驱动异常换独立供电试。第四数据乱跳。检查波特率、串口线长度、附近大功率电机干扰。第五跑几分钟后掉线。大概率是 USB 供电或散热问题给雷达单独供电USB 线尽量短带屏蔽更好。现象优先排查处理办法无 /dev/ttyUSB0USB 线、Hub、芯片驱动直插 USB 2.0 口换线看 dmesg打开串口失败权限、ModemManager加入 dialout重登停 ModemManager有数据但乱跳波特率、供电、干扰确认 115200独立供电远离电机线雷达不转供电、电机、固件换电源测 5V 电流联系售后运行中掉线电源余量、发热、USB 松动带源 Hub固定接插件加散热4. ROS2 Humble 安装与 RPLIDAR 节点4.1 Ubuntu 22.04 上安装 ROS2 HumbleUbuntu 22.04 对应 ROS2 Humble。树莓派 arm64 上可以用 apt 安装基础版不建议一上来装 desktop因为依赖太多树莓派磁盘和 CPU 都吃不消。先设置软件源和密钥再安装ros-humble-ros-base。命令如下sudo apt update sudo apt install -y software-properties-common curl gnupg lsb-release sudo add-apt-repository universe -y 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 $(source /etc/os-release echo $UBUNTU_CODENAME) main \ | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null sudo apt update sudo apt install -y ros-humble-ros-base python3-argcomplete python3-colcon-common-extensions安装完成后把环境变量写进.bashrcecho source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc验证一下ros2 doctor ros2 topic list如果ros2命令找不到就是环境变量没生效。树莓派上每个新终端都要 source写进.bashrc后新开终端自动生效。如果你的网络环境下载慢可以换用可信的软件镜像源但不要把 ROS 源和系统源混错Ubuntu 22.04 的代号是jammyROS2 版本是humble这两个不能写错。4.2 获取 RPLIDAR 的 ROS2 驱动思岚官方有 ROS2 驱动包常见的是sllidar_ros2对 C1、S 系列等支持比较直接。也可以用rplidar_ros的 ROS2 分支但不同版本对 C1 的支持程度不一样我建议优先用官方 ROS2 仓库。创建工作空间mkdir -p ~/ros2_ws/src cd ~/ros2_ws/src git clone https://github.com/Slamtec/sllidar_ros2.git cd ~/ros2_ws colcon build --symlink-install source install/setup.bash编译时如果报缺少sensor_msgs、std_srvs之类通常是因为没有 source ROS2 环境重新source /opt/ros/humble/setup.bash再编译。树莓派4B 编译这个包不算重几分钟能完成。编译完成后先用ros2 pkg executables sllidar_ros2看看有哪些可执行文件。常见启动文件有sllidar_launch.py和view_sllidar_launch.py后者会带 RViz2 配置但树莓派本机跑 RViz2 可能卡建议只在有桌面的机器上用后者。启动雷达节点ros2 launch sllidar_ros2 sllidar_launch.py serial_port:/dev/rplidar frame_id:laser如果你的设备名还没做 udev就换成/dev/ttyUSB0。frame_id很重要后面 TF 和建图都靠它。我一般统一用laser如果你用laser_frame所有配置都要跟着改。4.3 验证 /scan、QoS 和 RViz2 显示节点起来后另开终端source /opt/ros/humble/setup.bash source ~/ros2_ws/install/setup.bash ros2 topic list ros2 topic hz /scan ros2 topic echo /scan --onceros2 topic hz /scan应该接近 10Hz。如果只有 2Hz 到 5Hz可能是树莓派 CPU 被占满、USB 掉速、或者雷达供电不足。ros2 topic echo能看到ranges和intensities数组。接下来可以在另一台电脑上开 RViz2设置 Fixed Frame 为laser添加 LaserScan话题选/scan。如果树莓派本机装了 RViz2也可以直接ros2 launch sllidar_ros2 view_sllidar_launch.py serial_port:/dev/rplidarRViz2 里看不到点先查三个地方Fixed Frame 是否是laserLaserScan 的 Topic 是否是/scanQoS 是否默认。ROS2 的 QoS 不匹配会导致“有话题没数据”表现很迷惑。可以在 RViz2 里把 LaserScan 的 Reliability 改成 Best Effort 试一次。如果命令行hz有数据、RViz2 没有多半是 QoS 或 Fixed Frame 问题。5. 用 Cartographer 和 slam_toolbox 建图并保存5.1 Cartographer 的安装与最小配置Cartographer 在 ROS2 Humble 上可以 apt 安装也可以源码编译。树莓派 arm64 上先试 aptsudo apt install -y ros-humble-cartographer ros-humble-cartographer-ros如果找不到包再考虑源码编译但树莓派4B 编译 Cartographer 比较耗时建议在性能更好的机器上交叉编译或者直接用 slam_toolbox。Cartographer 需要一个 Lua 配置文件。先建目录mkdir -p ~/cartographer_config cd ~/cartographer_config nano my_robot_2d.lua下面是一份适合单线雷达、无里程计或弱里程计的最小配置重点是tracking_frame、published_frame、use_odometry和测距范围include map_builder.lua include trajectory_builder.lua options { map_builder MAP_BUILDER, trajectory_builder TRAJECTORY_BUILDER, map_frame map, tracking_frame laser, published_frame laser, odom_frame odom, provide_odom_frame true, publish_frame_projected_to_2d false, use_odometry false, use_nav_sat false, use_landmarks false, num_laser_scans 1, num_multi_echo_laser_scans 0, num_subdivisions_per_laser_scan 1, num_point_clouds 0, lookup_transform_timeout_sec 0.2, submap_publish_period_sec 0.3, pose_publish_period_sec 5e-3, trajectory_publish_period_sec 30e-3, rangefinder_sampling_ratio 1., odometry_sampling_ratio 1., fixed_frame_pose_sampling_ratio 1., imu_sampling_ratio 1., landmarks_sampling_ratio 1., } MAP_BUILDER.use_trajectory_builder_2d true TRAJECTORY_BUILDER_2D.min_range 0.05 TRAJECTORY_BUILDER_2D.max_range 12. TRAJECTORY_BUILDER_2D.missing_data_ray_length 5. TRAJECTORY_BUILDER_2D.use_imu_data false TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching true TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians math.rad(0.1) TRAJECTORY_BUILDER_2D.num_accumulated_range_data 1 return options这份配置里max_range不要超过雷达实际有效距离C1 在室内白墙 12 米左右但实际建图我会压到 8 到 10 米减少远处噪声。missing_data_ray_length控制无回波时射线长度太大容易把地图“刷空”。motion_filter.max_angle_radians放宽到 0.1 弧度能减少树莓派计算量但太小又会丢闭环需要实车调。启动 Cartographersource /opt/ros/humble/setup.bash source ~/ros2_ws/install/setup.bash ros2 run cartographer_ros cartographer_node \ -configuration_directory ~/cartographer_config \ -configuration_basename my_robot_2d.lua再开一个终端启动占据栅格发布ros2 run cartographer_ros occupancy_grid_node \ -resolution 0.05 -publish_period_sec 1.0如果雷达话题不是scan需要 remap。可以用ros2 run cartographer_ros cartographer_node \ --ros-args -r scan:/scan \ -configuration_directory ~/cartographer_config \ -configuration_basename my_robot_2d.lua建图时先让车缓慢移动沿着房间边缘走一圈最后回到起点附近完成闭环。不要原地快速旋转也不要贴着墙走雷达容易被自身结构遮挡。树莓派4B 上如果 CPU 长期 100%把occupancy_grid_node的发布周期从 1.0 改到 2.0能省一点资源。5.2 slam_toolbox 的轻量替代方案如果你用树莓派4B 4GB或者不想折腾 Lua 参数slam_toolbox 更友好。安装sudo apt install -y ros-humble-slam-toolbox启动在线异步建图ros2 launch slam_toolbox online_async_launch.py默认配置会订阅/scan发布/map和map到odom的变换。但有一件事必须提前处理slam_toolbox 需要 TF 树至少要有base_link到laser的静态变换以及odom到base_link的变换。如果你没有轮式里程计可以先用静态变换把odom和base_link连起来让 slam_toolbox 靠扫描匹配去修正ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 odom base_link ros2 run tf2_ros static_transform_publisher 0.05 0 0.2 0 0 0 base_link laser上面第二个变换表示雷达安装在车体前方 5 厘米、高 20 厘米的位置具体数值要按你的实际安装量。没有里程计时slam_toolbox 依然能建图但快速旋转、地面打滑、走廊特征少时会飘。想稳最好加一个轮式编码器或 IMU即使精度一般也能给 SLAM 一个先验。配置参数可以用 YAML 覆盖。一个常用片段slam_toolbox: ros__parameters: mode: mapping map_frame: map odom_frame: odom base_frame: base_link scan_topic: /scan resolution: 0.05 max_laser_range: 12.0 minimum_time_interval: 0.2 transform_timeout: 0.2 use_scan_matching: true use_scan_barycenter: true minimum_travel_distance: 0.2 minimum_travel_heading: 0.2启动时指定参数文件ros2 launch slam_toolbox online_async_launch.py \ params_file:$HOME/slam_config/my_slam.yaml5.3 建图实操推车、闭环和地图保存建图时的动作比参数更重要。我的习惯是先把雷达固定死不能有晃动然后让小车或手持平台以 0.1 到 0.2 米每秒的速度移动先沿房间边界走一圈再走内部通道最后回到起点完成闭环。走的时候不要急转不要频繁原地旋转不要让人腿一直挡在雷达前面。C1 是单线雷达人的腿会被切成一条线建图时最好清场或者至少保持人员静止。保存地图用 Nav2 的 map_saversudo apt install -y ros-humble-nav2-map-server ros2 run nav2_map_server map_saver_cli -f ~/my_map成功后会得到my_map.pgm和my_map.yaml。如果报“Map topic not received”先确认/map正在发布ros2 topic list | grep map ros2 topic echo /map --onceCartographer 的/map由occupancy_grid_node发布slam_toolbox 的/map由自身发布。保存前让建图节点保持运行不要先 CtrlC。map_saver_cli默认保存/map如果你的地图话题是/cartographer/map之类需要加--ros-args -r map:/你的地图话题。保存路径最好用绝对路径避免权限问题。地图分辨率 0.05 米时一个 10 米乘 10 米的房间大约 200x200 像素文件不大树莓派完全存得下。对比项Cartographerslam_toolbox安装难度中等配置多低apt 直接装树莓派4B 资源占用高中低闭环精度通常更好依赖参数和场景适合场景房间复杂、回环多快速原型、小场景保存地图occupancy_grid_node 加 map_savermap_saver 直接保存我的建议8GB 版本再试4GB 版本优先6. 常见问题与排查技巧实录6.1 雷达找不到、权限拒绝和运行中掉线雷达找不到时不要先改 ROS2 代码。按顺序查lsusb有没有设备dmesg | tail有没有ttyUSBls -l /dev/ttyUSB*有没有节点groups有没有 dialout。四步里哪一步断了问题就在那一层。权限拒绝最常见的原因是改完用户组没重新登录或者 udev 规则没生效。运行中掉线最常见的原因是供电尤其是用树莓派 USB 口直接带雷达、同时还有 Wi-Fi 和风扇的时候。可以给雷达接带源 USB Hub或者从稳定的 5V 电源单独供电注意共地。提示树莓派4B 的 USB 3.0 口对 2.4G Wi-Fi 有干扰雷达适配器优先插 USB 2.0 口能减少掉线和丢包。另一个坑是设备名漂移。今天/dev/ttyUSB0明天变成/dev/ttyUSB1启动脚本就挂了。用 udev 软链接固定成/dev/rplidar所有配置都写这个路径。如果你用 CH340 芯片规则里的 VID/PID 要改成1a86:7523别照抄 CP2102 的。6.2 点云方向反了、TF 错误和建图飘RViz2 里点云方向反了先看雷达安装方向。C1 有默认的 0 度方向如果装反了地图会镜像。可以在静态 TF 里加一个 180 度旋转或者调整雷达物理朝向。更常见的错误是 TF 树断裂base_link到laser没有发布或者odom到base_link缺失RViz2 会报错SLAM 也无法工作。用ros2 run tf2_tools view_frames生成 TF 树图看map、odom、base_link、laser是否连成一条链。建图飘的原因很多按概率排没有里程计或里程计太差轮子打滑雷达安装不牢移动太快场景特征太少参数太激进。解决顺序是先降低移动速度再固定雷达再检查轮子最后调参数。Cartographer 可以打开use_online_correlative_scan_matching降低motion_filter的角度阈值但会增加 CPU。slam_toolbox 可以降低minimum_travel_distance和minimum_travel_heading让匹配更频繁。走廊、长直通道、空旷大厅是 2D 激光 SLAM 的噩梦特征少时飘是正常的别指望单线雷达能完美解决。6.3 树莓派性能、发热和风扇针脚树莓派4B 跑 Cartographer 加雷达驱动CPU 温度很容易上 70 度夏天更高。建议加散热片和风扇外壳留风道。树莓派4B 的小风扇通常接 Pin 4 的 5V 和 Pin 6 的 GND上电常转想安静一点可以接 Pin 1 的 3.3V但风量会下降。不要用 GPIO 直接驱动大电流风扇也不要接错正负极。温度一高树莓派会降频雷达数据频率也会掉表现就是建图卡顿、点云稀疏。软件上能关的服务就关。用 Server 版、关桌面、关蓝牙如果不用、别开一堆 SSH 会话跑编译。用htop看 CPU 和内存用vcgencmd measure_temp看温度。如果/scan只有 5Hz先看 CPU 是不是被cartographer_node吃满再看 USB 是否掉速。树莓派4B 的 SD 卡如果是低速卡record rosbag 时会卡 IO建议用 USB 3.0 固态或者高速 A2 卡。问题现象快速处理CPU 占满点云掉帧、建图卡降分辨率、关 RViz2、用 slam_toolbox温度过高降频、频率不稳加风扇、散热片、降低环境温度内存不足节点被杀用 8GB 版本关不必要节点SD 卡慢rosbag 掉帧换 USB SSD 或高速卡串口占用打开失败停 ModemManager检查多进程占用6.4 map_saver 保存失败和 RViz2 不显示map_saver_cli保存失败先看地图话题有没有数据。ros2 topic echo /map --once如果卡住说明没有消息。检查 SLAM 节点是否还在跑/scan是否有数据TF 是否完整。如果/map有数据但保存报权限错误换成-f /home/pi/maps/my_map这种绝对路径并确认目录存在。保存出来的 PGM 如果是全黑或全白说明地图没有更新通常是建图时没有移动或者雷达数据没有进入 SLAM。RViz2 不显示点云在树莓派本机跑时还可能是 OpenGL 驱动问题。如果系统装了桌面且使用 WaylandRViz2 可能黑屏或闪退。可以编辑/etc/gdm3/custom.conf取消WaylandEnablefalse的注释切到 X11 再试。但更推荐把 RViz2 放到另一台电脑上通过 ROS2 网络共享查看。设置ROS_DOMAIN_ID一致同一网段就能看到话题树莓派只负责跑节点省资源也省心。7. 从建图到定位与数据落盘7.1 用保存的地图做 Nav2 定位地图保存后下一步通常是定位和导航。Nav2 可以加载my_map.yaml用 AMCL 做粒子滤波定位再规划路径。树莓派4B 上跑 Nav2 加 SLAM 会比较重建议定位阶段不要同时建图先加载静态地图启动map_server、amcl、planner_server、controller_server。定位时雷达仍然必须发布/scanTF 树里map到odom由 AMCL 发布odom到base_link由里程计发布。如果你没有轮式里程计Nav2 的定位会很飘还是建议加编码器或 IMU。7.2 点云数据记录和离线处理做算法验证时可以把原始数据录下来离线慢慢跑。ROS2 的ros2 bag record很好用ros2 bag record -o lidar_bag /scan /tf /tf_static录制时注意磁盘空间C1 数据量不大但长时间录也会积累。回放ros2 bag play lidar_bag回放时再启动 SLAM 或 RViz2就能复现建图过程。如果你想把 LaserScan 转成 PointCloud2 做点云处理可以用pointcloud_to_laserscan的反向工具或者自己写一个 Python 节点订阅/scan把极坐标转成 XYZ。树莓派4B 不适合跑重型 3D 目标检测但做简单的聚类、障碍物提取、区域统计还是可以的。真要跑深度学习模型建议把数据传到性能更好的机器上处理。7.3 长时间运行的几个小习惯最后分享几个我长期跑树莓派雷达系统的小习惯。第一所有设备名用 udev 固定别写ttyUSB0。第二启动脚本里先 source ROS2 和工作空间再启动节点避免环境变量丢失。第三雷达供电和树莓派供电分开走至少用带源 Hub减少玄学掉线。第四建图前先跑五分钟空转看/scan频率和温度稳定了再推车。第五地图文件按日期和场景命名比如room_20240512后面做定位时不会搞混。我个人在实际操作中的体会是树莓派4B 加 Ubuntu 22.04 加 RPLIDAR C1 这套东西难点从来不是某一个命令而是硬件、供电、串口、TF、QoS、SLAM 参数之间的连锁反应。先把 SDK 跑通再把/scan跑稳最后再上建图每一步都留好验证手段基本不会陷入“不知道哪里错了”的状态。雷达数据稳定之后这套平台能做的事很多建图、定位、避障、路径记录、远程监控甚至当个移动的数据采集车。真正决定效果的往往是你有没有把雷达装牢、电源给足、速度放慢以及愿不愿意花时间调那几个看起来不起眼的参数。