☰
树莓派4B实测RPLIDAR C1:从激光雷达数据读取到ROS2环境扫描
2026/10/3 9:40:47 网站建设 项目流程

做机器人或者搞SLAM的朋友,应该都有过这种经历:想验证一个建图算法,但找不到合适的传感器;或者好不容易弄到一台激光雷达,光是把驱动跑起来就折腾了好几天。我第一次接触思岚RPLIDAR C1的时候,最大的感受就是“这玩意儿是真的便宜”,但同时也在想——这么便宜的雷达,到底能不能稳?地跑起来?后来我用树莓派4B配合Ubuntu22.04,把RPLIDAR C1从SDK编译、串口调试、数据可视化到简单环境扫描,完整走了一遍,整体体验比预期要省心不少。

这篇文章就是我个人完整实操的记录,适合手里有树莓派4B、想低成本入门激光雷达和ROS2导航的玩家。文章会讲清楚硬件怎么接线、驱动怎么编译、数据怎么看、扫描结果怎么存,还会把我在实际过程中踩过的坑整理成排查手册。无论你是刚接触激光雷达的小白,还是准备给机器人配雷达的进阶玩家,这篇文章应该都能帮你少走不少弯路。

1. 项目定位与整体方案设计

1.1 为什么选择RPLIDAR C1做环境扫描

RPLIDAR C1在思岚的产品线里定位很明确:入门、低成本、低功耗,专门给教育机器人、扫地机器人原型和个人DIY项目设计的。它最吸引我的一点是性价比高,市面上几百块的雷达里,C1的测距精度和抗环境光干扰能力做得比较均衡,而且官方开源了全套SDK,对开发者的支持很到位。

另外,C1的核心是激光三角测距方案,工作频率大概在10Hz左右,测距半径对于家用环境扫描完全够用。我实测在3到6米的范围内,输出数据稳定性不错,墙角和家具边缘能扫出清晰的轮廓。对于“简单环境扫描”这种需求来说,C1的性能不会成为瓶颈,真正的瓶颈反而在树莓派4B的性能和系统环境配置上。

从功耗上看,C1比A系列雷达省电得多,直接用树莓派4B的USB口供电就能跑起来,不需要额外接降压模块或独立电源。这对我来说非常重要,因为我之前用某些雷达时需要外接5V电源,不仅接线麻烦,还会引入共地噪声,导致数据抖动。C1用一根USB线搞定供电和通信,硬件设计很干净。

1.2 方案选型对比:为什么必须配树莓派4B+Ubuntu22.04

很多人会问,不就有个雷达吗,直接用电脑连不行吗?当然行,但如果你后续打算把环境扫描扩展成自主建图、路径规划,那树莓派4B几乎是绕不开的硬件平台。

我选择树莓派4B的原因有三点:第一,它性能足够跑Ubuntu22.04桌面版和ROS2 Humble,虽然不能像PC那样全速跑重型算法,但对于雷达数据采集、点云可视化和cartographer建图这种中轻量任务,压力不大;第二,树莓派自带USB接口,C1直接插上就能识别,免去了串口转接的麻烦;第三,树莓派的GPIO和I2C接口方便以后扩展IMU、电机驱动,为后续做完整机器人留下空间。

至于Ubuntu22.04,它和ROS2 Humble是官方推荐的搭配版本,Humble LTS支持周期到2027年,稳定性和资料丰富度都很好。如果装Ubuntu20.04,虽然也能用,但ROS2对应的是Foxy,已经进入维护后期;如果想用新版的Nav2或者cartographer的Humble分支,还是建议直接上22.04。

方案整体链路是这样的:树莓派4B跑Ubuntu22.04,USB连接RPLIDAR C1,通过官方SDK读取激光原始数据,再把数据发布为ROS2话题,最终用rviz2或者Python脚本完成可视化与数据保存。这一套下来,你既理解了激光雷达底层数据流,也为后续做SLAM建图打好了基础。

1.3 硬件清单与版本核对

正式开始前,先把所有需要的东西列清楚。注意,树莓派4B建议选择4GB及以上内存版本,2GB版本在跑rviz2的时候会明显吃力,画面拖影严重。

硬件/软件推荐型号/版本备注
激光雷达思岚RPLIDAR C1自带USB转串口线,即插即用
主控板Raspberry Pi 4B 4GB/8GB跑Ubuntu22.04桌面版
系统Ubuntu 22.04.3 LTS 64位树莓派ARM64版本
ROS2版本Humble Hawksbill与22.04原生匹配
雷达SDKrplidar_sdk v2.x官方开源
可视化工具rviz2 / matplotlib两者选其一即可
存储卡32GB以上TF卡,Class1016GB太小,系统会频繁报警
电源5V3A USB-C电源必须足安,否则雷达+系统会掉电

一个容易忽略的细节是TF卡的速度。Ubuntu22.04桌面版启动后,系统读写压力不小,如果TF卡写入速度太慢,雷达数据保存和系统响应都会变卡。我第一张卡是杂牌Class4,跑ROS2的时候CPU动不动就满载,换了三星EVO Plus之后明显流畅。所以建议别在存储卡上省钱。

2. 树莓派4B系统安装与基础环境准备

2.1 Ubuntu22.04系统烧录与首次启动配置

树莓派安装Ubuntu22.04,最省事的方法是用Raspberry Pi Imager官方工具。这里要注意,不要直接选“Ubuntu 22.04”通用映像,而是下载树莓派的专用arm64版本,官方叫“Ubuntu Server 22.04.x”或者“Ubuntu Desktop 22.04.x”。如果图方便,推荐先装Server版本,再手动安装桌面,省掉很多不必要的预装软件。

烧录流程很简单,TF卡插电脑,打开Raspberry Pi Imager,选择镜像,点击烧录。重点在于烧录完成后,系统第一次启动会很慢,因为要自动扩展分区。这时候不要急,等两三分钟都是正常的。启动后默认用户名是ubuntu,密码是ubuntu,首次登录会强制要求改密码。

系统起来后,我习惯先做几件事:启用SSH服务、更新软件源、设置静态IP。静态IP对远程调试雷达特别有用,否则每次树莓派IP变了,你都要重新接显示器看。

sudo apt update sudo apt upgrade -y sudo apt install net-tools git vim -y

如果你在安装Ubuntu后出现没有无线WiFi驱动的情况,这一般是系统默认没有包含某些Broadcom固件。树莓派4B的WiFi模块在Ubuntu22.04下偶尔会遇到驱动未加载的问题,可以尝试更新固件后再看。

sudo apt install linux-firmware -y sudo reboot

2.2 安装ROS2 Humble完整步骤

ROS2的安装是整个环境准备里最容易出错的一步。官方文档其实写得已经很清楚,但很多人会在“添加ROS2软件源”时卡住,因为那个公钥链接在部分地区访问不稳定。我实操下来,推荐用镜像源方式安装,能省下不少时间。

先添加ROS2 apt仓库的key:

sudo apt install software-properties-common curl -y 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

然后把软件源写进sources.list,这里我把官方源替换成清华镜像源:

echo "deb [signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

更新后安装桌面版ROS2 Humble:

sudo apt update sudo apt install ros-humble-desktop -y

注意:如果你只是想在命令行下跑雷达驱动,装ros-humble-base就够了,能省将近1GB的磁盘空间。但如果你后面想用rviz2看点云,那就必须装桌面版。

安装完成后,把环境变量写进bashrc,这样每次开终端都能直接使用ROS2命令:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc

验证ROS2是否安装成功,跑一下小海龟测试是最直观的:

ros2 run turtlesim turtlesim_node

如果小海龟窗口弹出来了,说明ROS2环境没问题。如果提示找不到包,大概率是环境变量没生效,重新打开终端或者重新source一下。

2.3 基础编译工具与Python依赖准备

RPLIDAR C1驱动编译需要cmake、g++等基础工具,同时Python环境建议装好pyserial、matplotlib、numpy,方便后面直接读取雷达串口数据做可视化。

sudo apt install cmake g++ python3-pip python3-serial python3-numpy python3-matplotlib -y pip3 install pyserial --upgrade

这些库看起来简单,但很关键。特别是pyserial,如果版本过低,可能无法正确解析C1的高波特率数据包,导致读了半天全是乱码。建议安装后检查一下版本:

python3 -c "import serial; print(serial.__version__)"

3. RPLIDAR C1驱动安装与数据读取实战

3.1 双方案:从官方SDK编译到ROS2节点运行

思岚官方提供了两种使用方式:一是直接用C++ SDK来读取数据,适合想理解底层协议的朋友;二是通过ROS2驱动包直接发布/scan话题,适合专注上层应用的开发者。

我个人的建议是两种都试一遍。先用SDK验证雷达硬件本身有没有问题,再用ROS2驱动接入ROS生态,这样一旦后面数据异常,你能快速判断是硬件问题还是驱动配置问题,排查效率会高很多。

官方SDK的GitHub仓库是slamtec/rplidar_sdk,下载后用cmake编译:

git clone https://github.com/Slamtec/rplidar_sdk.git cd rplidar_sdk mkdir build && cd build cmake .. make

编译完成后,在output目录下会生成一个ultra_simple的可执行文件,这个工具会直接输出雷达扫描到的距离和角度数据。运行它会自动检测USB端口,如果检测不到,就手动指定端口:

./ultra_simple /dev/ttyUSB0

如果你能看到类似下面这样的持续输出,恭喜你,雷达硬件工作正常:

Theta: 0.00, Dist: 0.450, Quality: 79 Theta: 1.00, Dist: 0.452, Quality: 70 Theta: 2.00, Dist: 0.449, Quality: 78

3.2 USB串口权限与udev规则配置

权限问题是新手最容易踩的坑。树莓派默认情况下,普通用户是没有权限直接访问/dev/ttyUSB0端口的,如果不配置udev规则,运行SDK时会提示Permission denied。

最简单的临时解决办法是:

sudo chmod 666 /dev/ttyUSB0

但这个方法重启后会失效。正规做法是创建udev规则:

sudo vim /etc/udev/rules.d/99-rplidar.rules

写入以下内容:

KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout", SYMLINK+="rplidar"

这里面的idVendor和idProduct是通过lsusb查到的,C1的USB转串口芯片一般显示为CP2102,对应的就是10c4:ea60。设置好后执行:

sudo udevadm control --reload-rules sudo udevadm trigger

配置完成后,重启系统,你会发现每次插上雷达,系统都会自动创建/dev/rplidar软链接,再也不用去猜到底是ttyUSB0还是ttyUSB1了。

提示:如果以后你同时插了多个USB串口设备,建议也加上SYMLINK,避免设备编号变化导致程序找不到雷达。

3.3 用Python脚本直接读取原始数据

如果你不想一开始就上ROS2,只是想快速验证数据流,写个Python脚本是最高效的方式。C1的串口默认波特率是256000,数据包格式在SDK文档里有详细说明,但直接解析协议有点繁琐。

更简单的方式是直接利用SDK编译出的动态库,但这对Python环境不太友好。这里我分享一个绕过协议解析的思路:用pyserial读取串口原始字节流,然后找帧头来切分数据包,再解析出角度和距离。

import serial import struct ser = serial.Serial('/dev/ttyUSB0', 256000, timeout=1) # 向雷达发送请求指令 (0xA5, 0x20 表示开始扫描) ser.write(b'\xA5\x20') while True: data = ser.read(5) if len(data) < 5: continue # 解析数据包,这里简化处理,仅当帧头匹配时输出 if data[0] == 0xA5 and data[1] & 0x1F == 0x01: angle_raw = struct.unpack('<H', data[2:4])[0] dist_raw = struct.unpack('<H', data[4:6])[0] angle = angle_raw / 64.0 dist = dist_raw / 4.0 print(f"Angle: {angle:.2f} deg, Distance: {dist:.2f} mm")

这个脚本虽然简陋,但能跑通数据流,理解整个过程之后再去看SDK源码,你会有一种豁然开朗的感觉。实际项目中,还是建议直接用官方SDK的接口,因为官方库已经处理好了数据校验、丢帧重传等问题。

3.4 ROS2驱动编译与话题发布

进入ROS2环节,思岚官方在GitHub上提供了rplidar_ros驱动包,支持ROS2 Humble。不过这个包不是预编译的,需要你自己建一个工作空间来编译。

mkdir -p ~/rplidar_ws/src cd ~/rplidar_ws/src git clone https://github.com/Slamtec/rplidar_ros.git cd ~/rplidar_ws colcon build source install/setup.bash

编译过程中如果提示缺少colcon或ament_cmake,先安装:

sudo apt install python3-colcon-common-extensions ros-humble-ament-cmake -y

启动雷达驱动,这个launch文件会自动创建/scan话题:

ros2 launch rplidar_ros view_rplidar.launch.py

如果一切正常,终端会滚动输出日志,rviz2窗口也会自动弹出,显示雷达扫描到的环境轮廓。如果rviz2窗口没弹出来,或者看不到点云,别急,这个问题我放在后面“常见问题排查”里详细说。

4. 简单环境扫描实现:从数据流到可视化地图

4.1 激光雷达测距原理与数据理解

既然标题是“环境扫描”,那你至少要明白雷达返回的数据到底代表什么。RPLIDAR C1采用的是三角测距法,原理很简单:雷达内部的激光发射器发出一束红外激光,打到障碍物表面后发生漫反射,接收器上的线性CCD/CMOS阵列捕捉反射光斑的位置,根据光斑偏移量和几何关系,就能算出障碍物距离。

这个原理决定了三角测距雷达的两个特点:一是近距离精度高,非常适合室内环境;二是对物体表面颜色和材质比较敏感,纯黑色物体反射率低,容易丢点,镜面或者透明玻璃基本测不到。所以实测时,最好不要正对黑丝绒窗帘或大玻璃窗做扫描,否则你会看到一圈数据里出现明显的空洞。

数据格式方面,每一帧扫描点包含三个关键信息:角度、距离、信号质量。角度单位是0.015625度步进,距离单位是0.25毫米步进,信号质量则是0-255的整数,数值越高说明该点的反射越稳定。

数据字段含义单位分辨率
Angle当前扫描角度0.015625 度
Distance障碍物距离0.25 mm
Quality信号强度/置信度0-255

理解这个数据格式,你就能解释为什么有人扫同一个房间,出来的点云图差别很大——关键就看有没有做数据过滤。我习惯把质量值低于20的点直接丢掉,因为这些点通常是镜面反射、边缘拖尾或者环境光干扰产生的噪声点。

4.2 静态扫描:单帧环境轮廓可视化

雷达启动后,它默认会持续旋转扫描,每一圈生成一帧完整的环境轮廓。所谓静态扫描,就是保持雷达不动,取一帧或者几帧数据叠加,画出当前环境在2D平面上的轮廓。

用ROS2的话,可以订阅/scan话题,然后用Python写一个小节点来读取LaserScan消息,简单处理之后存为CSV文件或者直接画图。LaserScan消息里的range数组就是每个角度的距离值,非常直观。

import rclpy from rclpy.node import Node from sensor_msgs.msg import LaserScan class ScanListener(Node): def __init__(self): super().__init__('scan_listener') self.sub = self.create_subscription(LaserScan, '/scan', self.callback, 10) def callback(self, msg): # angle_min ~ angle_max, 角度步长 angle_increment print(f"Total points: {len(msg.ranges)}") print(f"Angle range: {msg.angle_min:.2f} ~ {msg.angle_max:.2f} rad") # 打印前方1米处的距离值 mid = len(msg.ranges) // 2 print(f"Forward distance: {msg.ranges[mid]:.2f} m") rclpy.init() rclpy.spin(ScanListener())

如果你更习惯用SDK原始数据,也可以把之前的Python脚本扩展一下,积累一定数量的点之后,用matplotlib画出俯视图:

import matplotlib.pyplot as plt import math points_x = [] points_y = [] # 假设你已经从雷达读取到 angle_deg 和 dist_mm for angle_deg, dist_mm in raw_points: angle_rad = math.radians(angle_deg) dist_m = dist_mm / 1000.0 points_x.append(dist_m * math.cos(angle_rad)) points_y.append(dist_m * math.sin(angle_rad)) plt.figure(figsize=(6, 6)) plt.scatter(points_x, points_y, c='blue', s=1) plt.axis('equal') plt.title('RPLIDAR C1 Static Scan') plt.show()

运行之后,你会看到雷达周围的环境轮廓被画成一个圆形的点云图,墙面的直线轮廓清晰可见。我第一次跑出来的时候还挺有成就感的,那种“传感器真的在感知环境”的直观反馈,比看任何文档都有说服力。

4.3 动态扫描:多帧拼接与数据保存

静态扫描只能反映雷达位姿固定时看到的环境,而“环境扫描”更常见的使用场景是:雷达放在小车上或者拿在手里缓慢移动,通过多帧数据拼接,扫描出整个房间的轮廓。

这一步的难点不在于数据采集,而在于数据对齐。如果只是简单地把所有帧的数据堆叠在一起,你会发现图像是糊的,因为雷达每帧的位姿并不完全相同。专业SLAM会通过里程计或者IMU计算位姿变化,但我们做简单环境扫描,可以用一个取巧的办法:保持雷达缓慢匀速移动,利用相邻帧之间的匹配来粗对齐。

为了不让本篇文章过于复杂,这里我给出一个最基础的方案:固定雷达位置,旋转雷达本体(或者将雷达放在转盘上),将每一圈扫描的起始角度对齐到同一个原点,然后逐帧叠加。这个方法虽然不能用于真实移动场景,但用来理解多帧拼接的概念足够了。

数据保存方面,建议直接存为numpy数组或者CSV,后续用任何工具都能读。保存示例:

import numpy as np all_scans = [] # 每一帧是 (N, 2) 的数组,存储 x, y for frame in frame_list: all_scans.append(frame) np.save('room_scan.npy', np.array(all_scans))

如果你确实想让雷达在移动中扫描,那我的建议是至少加一个IMU模块,或者参考后面讲的cartographer方案,它会自动处理点云匹配和位姿估计,比自己手动拼接靠谱得多。

4.4 从点云到占位栅格地图的简单实现

环境扫描做到最后,很多人的目标就是一张可以被机器人导航直接使用的二维栅格地图。这需要把点云数据投影到2D平面,然后对每个栅格判断“有障碍物”还是“无障碍物”。如果你不想安装复杂的SLAM库,自己写一个极简的栅格图生成器其实也不难。

思路如下:建立一个尺寸已知的二维数组,比如10米×10米的环境,栅格分辨率为0.05米,那就是200×200个栅格。遍历每个点,计算出它落在哪个栅格里,然后把这个栅格标记为占用。最后用matplotlib的imshow画出来,就是最原始的占据栅格图。

import matplotlib.pyplot as plt import numpy as np GRID_SIZE = 200 grid_map = np.zeros((GRID_SIZE, GRID_SIZE), dtype=np.uint8) # points: 所有扫描点的 (x, y),单位米 for x, y in points: if -5 <= x <= 5 and -5 <= y <= 5: grid_x = int((x + 5) / 0.05) grid_y = int((y + 5) / 0.05) grid_map[grid_y, grid_x] = 1 plt.imshow(grid_map, cmap='gray_r', origin='lower') plt.title('Occupancy Grid from RPLIDAR C1') plt.show()

这个简易栅格图的问题很明显:没有处理噪声,也没有做膨胀处理,所以边界不够平滑。但它足够帮你理解SLAM建图的基本逻辑,后面再用cartographer这类完整方案时,你会更清楚它在干什么。

5. 常见问题排查与避坑实录

5.1 雷达不转或灯不亮:先查供电,再查驱动

RPLIDAR C1插上树莓派USB口之后,如果雷达不转动,首先摸一下雷达底部有没有温度。如果完全没温度,基本可以判断是供电问题,树莓派USB口可能进入了限流保护状态。

解决办法是拔掉雷达,用命令查看系统日志:

dmesg | grep usb

如果看到了over-current或者device descriptor read/64, error -71之类的日志,那就说明供电确实不足。这时候换一个单独带供电的USB HUB,或者给树莓派使用5V3A足安电源,问题基本就能解决。

如果雷达嗡嗡响,但数据出不来,那大概率是驱动或者端口权限问题。这时可以先用lsusb确认设备是否被识别,再用ls /dev/ttyUSB*确认端口存在。

5.2 数据乱跳、距离突然变0:多半是环境干扰

运行雷达的时候,距离数据偶尔变成0,或者某个角度突然跳出一大堆杂乱点,这通常是三种原因:一是环境里有强反射面,比如玻璃、镜子、金属抛光表面;二是雷达距离物体太近,小于最小测距范围;三是激光雷达受强光干扰。

处理办法是加数据过滤,我在实际扫描时会把距离为0的点直接剔除,同时把质量值低于某个阈值的点也过滤掉:

filtered = [(a, d) for a, d in raw if d > 0.15 and quality > 20]

0.15米是C1的最小有效测距,小于这个距离的数值本身就是无效的。质量阈值的调节要看你室内的光照条件,光线暗的时候可以把阈值调低到10,光线强的时候可能需要调到40以上。

5.3 rviz2里面看不到点云

这是ROS2入门者问得最多的问题。雷达驱动明明启动了,终端也有输出,但rviz2界面里就是黑漆漆一片,什么都没有。我排除了半天,最后发现90%的情况是Fixed Frame的问题。

rviz2默认的Fixed Frame是map,但雷达驱动发布的点云的坐标系是laser,坐标系名称对不上,点云自然就不显示。解决办法是在rviz2左侧的Displays面板里,点击Global Options,把Fixed Frame改成laser。

如果你的雷达驱动没有发布/tf变换,那就必须手动指定Fixed Frame为laser。如果launch文件里启动了robot_state_publisher,那最好把所有frame统一命名为laser或base_scan,避免混淆。

5.4 树莓派跑ROS2卡顿:性能调优三件套

树莓派4B跑Ubuntu22.04桌面版加ROS2,内存占用确实不低。我刚开始跑rviz2的时候,CPU经常飙到100%,拖动窗口都卡。后来做了三个优化,效果立竿见影。

第一,禁用系统自带的Gnome动画效果。在“设置-外观”里把动画关闭,或者使用轻量级桌面如LXDE。第二,给树莓派的GPU内存分多一点,在/boot/firmware/config.txt里设置gpu_mem=256。第三,启动rviz2时降低点云显示频率,把rviz2的刷新率改成5Hz,肉眼基本察觉不到,但CPU占用能下降一半。

如果你只是做数据采集而不需要实时可视化,更推荐直接在终端运行驱动,把/scan话题录成rosbag,之后放到电脑上回放分析,这样树莓派压力会小很多。

5.5 常见问题速查表

症状可能原因解决方法
雷达不转USB供电不足换带供电HUB,检查电源适配器
端口无权限udev规则未配置chmod 666 /dev/ttyUSB0或配置udev规则
数据全是0雷达未开始扫描发送A5 20指令启动扫描
数据点稀疏环境反射率低提高信号质量阈值下限,改善环境照明
rviz2无显示Fixed Frame不匹配修改为laser
CPU满载可视化耗资源降低刷新率,用rosbag离线处理

6. 从环境扫描到SLAM建图的扩展之路

一旦你理解了如何用RPLIDAR C1进行环境扫描,下一步就很自然地想试试完整的SLAM建图。这里我强烈推荐ROS2 cartographer,它和激光雷达的配合非常成熟,尤其适合室内环境。

Cartographer的核心思想是“前端扫描匹配+后端图优化”,它会自动处理点云匹配、位姿估计和回环检测,最终输出一张干净的栅格地图。相比自己手动拼接多帧扫描,cartographer的效果可以说是碾压级别的,墙线笔直,房间轮廓清晰。

在树莓派4B上运行cartographer的步骤也不复杂。先安装依赖包:

sudo apt install ros-humble-cartographer ros-humble-cartographer-ros -y

然后下载官方的cartographer_turtlebot示例配置,修改雷达话题名称和坐标系,让它默认订阅/scan话题。启动后,缓慢移动雷达扫描整个房间,按下保存地图的按键,系统就会生成.pgm和.yaml两个文件。

但要注意,树莓派4B的性能跑cartographer时不能和PC比,CPU通常会比较紧张。我建议扫描时不要开rviz2实时显示,或者把显示窗口放到电脑上用远程桌面/SSH转发来看,这样建图过程会流畅很多。

从环境扫描升级到SLAM建图,本质上就是从二维数据到姿态估计的跃迁。环境扫描只需要雷达一个传感器,建图往往还需要里程计或IMU来提供运动估计。如果暂时没有IMU,cartographer也可以纯靠雷达做scan-to-scan匹配,只是转弯时容易丢失位置信息。

我个人在实际操作中的体会是,很多看起来高深的建图系统,底层依赖的数据源其实就是RPLIDAR C1输出的那一个个微小角度和距离值。把环境扫描这一步吃透,理解激光雷达到底在测什么、数据格式是什么、噪声从哪来,后面玩SLAM、导航会顺手很多。

最后再分享一个小技巧:如果你把雷达放在桌面边缘,让它悬空扫描,对比桌面上方和下方两圈点云的差异,你能直观看到雷达的盲区范围和垂直视场角对数据的影响。这种小实验不用写代码,但对理解雷达物理特性特别有帮助。后续有空的话,我打算写一篇RPLIDAR C1配合cartographer在树莓派4B上完整建图的配置记录,这次先到这。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询