树莓派4B搭建RPLIDAR C1激光雷达环境:SDK编译与ROS2对接实战指南
最近在折腾树莓派4B、Ubuntu 22.04 和思岚 RPLIDAR C1 激光雷达这套组合从摸不着门道到把 SDK 跑起来、再接到 ROS 2 里看扫描话题中间踩了不少坑。写这篇指南就是想把这套环境的搭建过程、SDK 编译方法、串口权限配置和 ROS 对接思路一次性说清楚。做机器人底盘、建图小车或者单纯想玩雷达数据的朋友照着走一遍就能上手不用再去零散翻资料了。1. 这套组合怎么选为什么是树莓派4B、Ubuntu 22.04 与 RPLIDAR C11.1 树莓派4B主控选型的关键考虑树莓派4B 一直是我做机器人原型验证的首选主控原因很现实性能够、生态成熟、资料多。它的 BCM2711 四核 Cortex-A72 处理器配合 4GB 或 8GB 内存跑 Ubuntu Server 22.04 毫无压力编译小型 C SDK、运行 ROS 节点、甚至挂一个轻量 SLAM 算法都撑得住。选树莓派4B 而不是树莓派 Zero 或者更小的板子主要看两点一是内存RPLIDAR SDK 本身不占多少内存但后续接 ROS、跑建图算法时内存不够会很痛苦二是接口丰富度USB 3.0 口接 RPLIDAR C1 的 USB 转接板非常稳定网口、Wi-Fi 也都有调试起来方便。从供电角度看树莓派4B 官方推荐 5V/3A 的电源。激光雷达通过 USB 取电如果电源质量不行雷达电机转速会波动表现就是数据跳变、断连。很多雷达转起来了但数据异常的问题根源其实是供电不稳这一点后面详细说。1.2 Ubuntu 22.04 的取舍与 C1 雷达的定位树莓派可以跑的系统很多Raspberry Pi OS 和 Ubuntu 是主流。我这里选 Ubuntu 22.04 Server 版主要原因是 ROS 2 Humble 官方支持 Ubuntu 22.04而 ROS 2 是我后面接雷达驱动、做 SLAM 的必经之路。RPLIDAR C1 是思岚科技推出的低成本 360 度激光雷达标称测距范围在 0.12 米到 12 米左右通过 USB 转接板输出串口数据。它的定位很明确给入门级机器人、教学实验、扫地机原型提供可靠但价格友好的测距方案。它的分辨率、采样频率没法跟高端的 RPLIDAR A2/A3 比但在室内环境做避障、建图测试完全够用。SDK 这块思岚官方提供了 rplidar_sdk 开源项目支持直接在 Linux 下编译运行跨平台做得不错。C1 这款雷达在 SDK 里是直接支持的不需要额外适配这是选它而不是杂牌雷达的一个重要原因——省时间、少踩坑。2. 系统安装与环境配置先把基础环境打牢2.1 烧录 Ubuntu 22.04 Server 镜像树莓派4B 安装 Ubuntu 22.04 最稳妥的方式是用 Raspberry Pi Imager 烧录官方镜像而不是手动下载镜像后用 dd 命令硬写。Imager 会自动处理分区、扩展文件系统等步骤省心很多。我用的是 Ubuntu 22.04.3 Server 版镜像对应版本代号 jammy。Imager 在烧录前会弹出设置界面可以提前配置用户名、密码、Wi-Fi 和 SSH这一步非常关键。建议在烧录阶段直接把 SSH 打开、把 Wi-Fi 配好不然树莓派放在角落还要接显示器键盘调试体验会很差。烧录完成后把 SD 卡插进树莓派4B接上网线和电源。第一次启动时间会稍长因为它要做文件系统初始化。等两三分钟从路由器后台找到树莓派的 IP 地址用 SSH 连接ssh ubuntu树莓派IP如果之前配置过密码直接输入密码登录。登录成功后再补一句系统默认用户是 ubuntusudo 提权时要用你自己的密码。2.2 首次启动、SSH 连接与软件源配置进入系统后我习惯先做三件事更新系统、配置软件源、检查内存和温度。首先是软件源。Ubuntu 官方源在国内速度一般建议换成清华或阿里源。修改 /etc/apt/sources.listsudo sed -i s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo apt update sudo apt upgrade -y注意Ubuntu 22.04 的源文件可能不再用 archive.ubuntu.com 前缀而是用 ports.ubuntu.comarm 架构。如果你的源文件内容不对干脆用编辑器直接改把 jammy 相关的行替换成清华镜像格式deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports jammy main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports jammy-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports jammy-security main restricted universe multiverse树莓派4B 用的是 arm64 架构源地址要用 ubuntu-ports这个细节很容易被网上教程漏掉我当初配错之后 apt update 一直报 404。然后是安装基础编译工具因为后面要编译 rplidar_sdksudo apt install -y build-essential cmake git vim同时确认串口工具方便后面排查sudo apt install -y usbutils minicom3. SDK 编译与串口通信让雷达真正转起来3.1 获取 rplidar_sdk 并理解工程结构思岚的 SDK 在 GitHub 上开源仓库地址是 Slamtec/rplidar_sdk。用 git clone 拉下来cd ~ git clone https://github.com/Slamtec/rplidar_sdk.git cd rplidar_sdk拉下来后先别急着编译先看目录结构。SDK 的核心在 sdk/ 子目录里面是 SDK 库源码和头文件app/ 子目录放的是官方示例应用包括 ultra_simple简单扫描读取、simple_grabber带 OpenGL 可视化的扫描展示等。对于新手来说重点先用 ultra_simple 跑通数据链路理解雷达数据的本质再考虑可视化。我见过不少人一上来就折腾 simple_grabber结果被 OpenGL 依赖搞得头大其实没必要。3.2 串口权限、设备识别与编译验证雷达通过 USB 转接板连接到树莓派先确认系统是否识别到设备。插上雷达的 USB 线后执行lsusb正常会看到一行类似 Silicon Labs CP210x UART Bridge 的设备信息这是 USB 转串口芯片。然后确认串口设备节点ls /dev/ttyUSB*一般是 /dev/ttyUSB0。如果 lsusb 能看到但 /dev 下没有设备文件大概率是权限问题或者 udev 规则没触发。先试试直接读取sudo cat /dev/ttyUSB0 | head -c 100 | xxd正常情况下雷达默认不会主动发数据要收到特定命令帧才会启动扫描所以这一步看不到有效数据是正常的。确认设备节点存在即可。然后要解决权限问题。如果不加权限运行 ulra_simple 时通常报 Failed to open serial port。把当前用户加入 dialout 组sudo usermod -aG dialout $USER然后退出 SSH 重新登录让组权限生效。或者干脆在运行命令前用 sudo不过时间长了还是加组省事。接下来编译 SDKcd ~/rplidar_sdk mkdir build cd build cmake .. make -j4编译过程很快树莓派4B 四核并行跑一两分钟就完事。编译产物在 build/output/ 目录下面不同平台子目录结构略有差异找到 ultra_simple 可执行文件即可。提示如果 cmake 时报错找不到编译器确认 build-essential 是否装好。如果报缺少 C 标准库头文件多半是因为系统里只装了 gcc 没装 g用 apt install g 补上即可。3.3 跑通 ultra_simple 并理解扫描数据格式编译完成后直接运行./output/linux/release/ultra_simple /dev/ttyUSB0注意SDK 的 demo 程序需要通过启动参数指定串口设备不传参数默认访问 /dev/ttyUSB0但建议还是显式传一次避免默认设备不对。跑起来后终端会持续输出一串数据格式是角度、距离、信号质量theta: 0.01 dist: 0.20 quality: 130 theta: 0.03 dist: 0.21 quality: 128 theta: 0.05 dist: 0.20 quality: 131这三个字段的含义theta 表示当前扫描点的角度单位是度范围 0 到 360 度dist 是该角度下的测距结果单位是米直接反映障碍物距离quality 是信号质量0 到 255 之间数值越高说明该点反射信号越稳定。如果 data 一直为 0 或跳变厉害先检查供电再看雷达转动是否顺畅。C1 内部有电机带动激光头旋转转速由固件控制如果听到明显的卡顿声或转速忽快忽慢基本都是供电问题。想进一步确认数据稳定性可以做一个小试验把雷达放在桌面上观察一个固定障碍物的 dist 值是否稳定。如果数据在固定值附近波动说明串口链路没问题如果出现大量 0 值间隙可能是有遮挡盲区也可能雷达转到了测距盲区位置。4. 进阶玩法接入 ROS 2 做建图前准备4.1 安装 ROS 2 Humble 并编译 rplidar_ros跑通 SDK 只是第一步做机器人应用基本都要接入 ROS。树莓派4B 跑 Ubuntu 22.04官方支持的 ROS 发行版是 ROS 2 Humble这也是我推荐 Ubuntu 22.04 而不是 20.04 的原因省去 ROS 1 各种编译依赖的折腾。安装 ROS 2 Humble 走官方 apt 源即可前提是先把软件源加好sudo apt install -y 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 [arch$(dpkg --print-architecture) 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 sudo apt install -y ros-humble-ros-base如果 curl 下载 ros.key 失败可以多试几次或者配置代理注意国内网络环境有时候不稳定。装完后 source 环境echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc然后克隆 rplidar_ros 驱动包。这里有个关键点rplidar_ros 的默认分支是 ROS 1 版本要在 ROS 2 环境下用必须拉取 ros2 分支cd ~ git clone -b ros2 https://github.com/Slamtec/rplidar_ros.git cd rplidar_ros接着编译。ROS 2 用 colcon 构建工具先装好sudo apt install -y python3-colcon-common-extensions cd ~/rplidar_ros colcon build编译成功后再 source 本地安装环境source ~/rplidar_ros/install/setup.bash4.2 启动驱动、检查 /scan 话题与接入 SLAM 工具启动 rplidar_ros 驱动节点ros2 launch rplidar_ros rplidar.launch.py默认的 launch 文件会尝试打开 /dev/ttyUSB0如果设备名不同可以在 launch 命令后面传参覆盖ros2 launch rplidar_ros rplidar.launch.py serial_port:/dev/ttyUSB0启动之后节点会发布 /scan 话题。开一个新终端查看话题列表ros2 topic list能看到 /scan 字样。再查看数据内容ros2 topic echo /scan --once这个数据就是驱动节点处理后的标准雷达扫描消息类型是 sensor_msgs/msg/LaserScan里面包括角度范围、角分辨率、每个角度的距离值。有一点值得提一下SDK 直接输出的数据是方便阅读的文本格式而 ROS 驱动内部做了坐标转换和时间戳标准化直接输出标准消息后续接导航、建图都能直接用。如果一切正常接下来就可以接 SLAM Toolbox 或 Cartographer 做建图了。安装 slam_toolboxsudo apt install -y ros-humble-slam-toolbox运行 SLAM 节点之前需要提供里程计或类似的运动估计信息来源。如果是纯雷达静态建图可以用简单的 tf 发布节点模拟静止底盘如果底盘已经有轮式编码器建议先跑通 /odom 话题再接 SLAM。SLAM 调试需要看实时地图树莓派4B 的图形界面性能一般建议把地图数据通过局域网转发到开发机上可视化或者用 RViz2 远程显示。5. 疑难问题排查与实战经验分享5.1 高频问题速查表现象可能原因排查和解决思路运行 ultra_simple 报 Failed to open serial port串口设备不存在或权限不足用 ls /dev/ttyUSB* 确认设备执行 sudo usermod -aG dialout $USER 后重新登录雷达转动但输出全为 0供电不足或雷达处于盲区换 5V/3A 电源尽量不用 USB HUB 给雷达供电lsusb 能看到设备但 /dev/ttyUSB0 不出现USB 驱动问题或系统未重新加载拔插雷达USB线执行 sudo dmesg 查看内核日志数据频繁跳变、断连USB 线质量差或电磁干扰换一根短线、带屏蔽的 USB 线远离电机和大电流线缆cmake 编译报错缺少依赖或 cmake 版本过老执行 sudo apt install build-essential cmake git确认版本 3.16 以上ros2 launch 后 /scan 无数据串口号不对或驱动加载失败用 ros2 topic info /scan 查看发布者信息检查驱动日志Ubuntu 22.04 启动后无 Wi-Fi系统未启用无线网卡驱动先接网线 apt update再安装 linux-firmware 重启这张表覆盖了我遇到的大部分问题但有一次特别曲折雷达数据整体正常就是某个固定角度经常缺数据排查半天才发现是雷达朝向的一面有一根细支架遮挡属于物理遮挡而不是故障。5.2 容易忽略但影响很大的几个细节第一个细节是电源。树莓派4B 是出了名的电源敏感型设备我之前用手机充电头供电电压不稳导致雷达时好时坏一度以为雷达坏了。后来换成正经的 5V/3A 电源适配器问题迎刃而解。做机器人调试电源这块千万别省。第二个细节是串口权限和 udev 规则。虽然把用户加入 dialout 组能解决大多数问题但每次插拔 USB 后设备节点可能变比如从 ttyUSB0 变成 ttyUSB1。更稳的做法是写一个 udev 规则根据 USB 设备的 VID/PID 固定生成一个别名节点比如 /dev/rplidar。这样不管插在哪个 USB 口设备路径都不变launch 文件配置一次就完事。sudo vi /etc/udev/rules.d/99-rplidar.rules内容KERNELttyUSB*, ATTRS{idVendor}10c4, ATTRS{idProduct}ea60, MODE:0666, SYMLINKrplidar保存后执行sudo udevadm control --reload-rules之后插上雷达应该能看到 /dev/rplidar 设备。用这个路径启动驱动再也不用担心设备号漂移。第三个细节是散热。树莓派4B 在跑 SDK 时不热但跑 ROS SLAM 时 CPU 占用高温度飙升会导致性能降频间接影响串口读取的实时性。建议加装一个带风扇的散热片给树莓派一个稳定的工作温度区间。第四个细节是数据率。串口波特率默认是 115200C1 的标准使用方式不需要改波特率。如果自己改配置导致乱码恢复方法就是删掉 SDK 里的临时配置或者重新 clone。我在实际使用中的体会是这套组合的价值在于软件链路非常完整从裸 SDK 到 ROS 驱动再到 SLAM 对接每一步都有官方支持和社区案例。对于想入门激光雷达和机器人建图的朋友它是一个性价比极高的练手环境。如果后续要升级可以把树莓派换成性能更强的平台雷达和驱动代码几乎不用动这也是选成熟 SDK 的好处。最后再分享一个小技巧调试时尽量把雷达固定在一个稳定的高度周围留出足够的空旷区域这样数据干净更容易把注意力放在链条本身而不是被环境干扰误导。