2. 激光雷达基础
激光雷达(LiDAR,Light Detection and Ranging)是激光SLAM系统中感知环境的核心传感器。与摄像头相比,它直接提供三维空间中的几何距离信息,不受光照变化影响;与毫米波雷达相比,其角分辨率更高,能更精细地刻画环境轮廓。在Cartographer建图流程中,激光雷达数据的质量直接决定了前端扫描匹配的精度和后端图优化的收敛效果。本章将系统讲解激光雷达的物理测距原理、主流技术分类、点云数据格式以及在实际工程中必须关注的数据特性。
2.1 激光雷达的核心测距原理
激光雷达的本质是主动光学测距传感器。它通过发射激光束并接收目标反射回来的信号,计算光在传感器与目标之间的往返时间或几何偏移,从而获得距离信息。在工程实现上,主流的测距方式分为两大类:飞行时间法(TOF)和三角测距法。
2.1.1 TOF(飞行时间)测距原理
TOF测距的核心思想是直接测量激光脉冲从发射到接收的飞行时间 \(\Delta t\),然后根据光速 \(c\) 计算距离 \(d = \frac{c \cdot \Delta t}{2}\)。根据调制方式的不同,TOF又细分为脉冲式(Pulsed)和相位式(Phase-shift)。脉冲式TOF发射窄脉冲,通过高精度计时电路(TDC,Time-to-Digital Converter)测量时间差,适合远距离测量(可达百米以上),但对计时电路的时间分辨率要求极高(皮秒级)。相位式TOF则发射连续调制的正弦波,通过测量发射波与接收波之间的相位差 \(\Delta \phi\) 来推算距离,公式为 \(d = \frac{c \cdot \Delta \phi}{4\pi f}\),其中 \(f\) 为调制频率。相位式TOF在近距离(通常小于50米)具有较高的精度,但存在2π模糊问题,需要多频调制来解算距离。
2.1.2 三角测距原理
三角测距法不直接测量时间,而是利用几何光学中的相似三角形原理。激光器发射一束光照射到目标上,目标反射光经过透镜在CMOS/CCD感光元件上成像。当目标距离变化时,成像点在感光元件上的位置会发生横向偏移。通过标定激光器与相机之间的基线距离 \(b\)、透镜焦距 \(f\) 以及成像偏移量 \(x\),即可计算出目标距离 \(d = \frac{b \cdot f}{x}\)。三角测距在近距离(通常小于10米)具有极高的精度(亚毫米级),且成本较低,但测量范围受基线长度和感光元件尺寸限制,远距离时精度急剧下降。
| 对比维度 | TOF(脉冲/相位) | 三角测距 |
|---|---|---|
| 测距范围 | 脉冲式可达100m+,相位式约50m | 通常0.05m ~ 10m |
| 精度特性 | 精度随距离衰减较小,误差约±2cm | 近距离精度极高(±0.5mm),远距离误差快速增大 |
| 响应速度 | 快,适合高速运动场景 | 受曝光时间限制,帧率较低 |
| 成本 | 较高(核心器件为激光器+TDC/ADC) | 较低(激光器+普通CMOS) |
| 典型应用 | 自动驾驶、室外大场景SLAM | 扫地机器人、室内短距离避障 |
2.2 激光雷达的结构类型:机械式与固态
按照扫描结构的不同,激光雷达可分为机械旋转式和固态式两大类。机械式通过电机带动激光收发模块整体旋转,实现360°视场扫描;固态式则通过电子方式控制光束偏转,无机械旋转部件。
2.2.1 机械旋转式激光雷达
机械式雷达是最早商用化的类型,其核心结构包括激光发射器、接收器、旋转电机和编码器。电机带动整个光学模块连续旋转,每旋转一圈,激光器按一定角度间隔发射激光束,从而形成一帧完整的360°点云。根据激光线束的数量,机械式雷达分为单线(如SICK TIM系列)和多线(如Velodyne HDL-64E为64线)。多线雷达在垂直方向布置多组激光器,同时获得多个不同俯仰角度的扫描线,从而形成三维点云。机械式雷达的优点是视场角完整(水平360°)、技术成熟、点云密度高;缺点是体积大、成本高、旋转部件易磨损,且长期运行后电机轴承的磨损会导致扫描角度误差漂移。
2.2.2 固态激光雷达
固态雷达取消了机械旋转部件,通过以下三种主要技术实现光束偏转:
- MEMS微振镜:利用微机电系统驱动的反射镜高速振动,将激光反射到不同方向。MEMS雷达体积小、成本适中,但振镜的摆动角度有限,通常需要多块振镜拼接或配合广角镜头才能覆盖较大视场。
- OPA光学相控阵:通过控制阵列中每个发射单元的相位差,使光束在空间中干涉叠加,实现无机械偏转的电子扫描。OPA扫描速度快、精度高,但制造工艺复杂,旁瓣抑制难度大。
- Flash面阵式:一次性发射大面积激光照亮整个视场,通过焦平面探测器阵列接收反射光。Flash雷达没有扫描过程,帧率极高,但探测距离受限于激光功率和探测器灵敏度,通常用于近距离(<30m)场景。
2.3 点云数据格式与关键特性
激光雷达输出的原始数据通常以点云(Point Cloud)形式组织。每个点包含三维空间坐标(x, y, z)、反射强度(Intensity)以及时间戳(Timestamp)。在ROS(Robot Operating System)中,点云数据通过 sensor_msgs/LaserScan(单线雷达)或 sensor_msgs/PointCloud2(多线雷达)消息发布。
2.3.1 点云数据格式详解
对于单线雷达,LaserScan 消息包含以下关键字段:
# sensor_msgs/LaserScan
float32 angle_min # 扫描起始角度 (rad)
float32 angle_max # 扫描结束角度 (rad)
float32 angle_increment # 角度分辨率 (rad)
float32 time_increment # 相邻两点的时间间隔 (s)
float32 scan_time # 一帧扫描的总时间 (s)
float32 range_min # 最小有效距离 (m)
float32 range_max # 最大有效距离 (m)
float32[] ranges # 距离数组,长度 = (angle_max - angle_min)/angle_increment + 1
float32[] intensities # 反射强度数组(可选)
对于多线雷达,PointCloud2 消息采用二进制块存储,每个点通常包含 x, y, z, intensity 四个字段,且支持自定义字段扩展(如时间戳、环号)。在Cartographer中,多线点云通常被转换为 sensor_msgs/PointCloud2 后,再通过自适应体素滤波(Adaptive Voxel Filter)降采样,以减少计算量。
2.3.2 点云数据的关键特性指标
- 距离精度:指单点距离测量的重复性误差。TOF雷达典型精度为±2cm,三角测距在1m内可达±1mm。精度直接影响Cartographer前端扫描匹配的残差。
- 角分辨率:相邻两个激光束之间的角度间隔。角分辨率越高,点云越密集,对细小物体的识别能力越强。例如,0.36°角分辨率的雷达在10m处相邻点间距约为6.3cm。
- 扫描频率:每秒输出的点云帧数。常见为10Hz~20Hz。扫描频率越高,对运动畸变的敏感度越低,但数据量增大,对计算资源要求更高。
- 视场角(FOV):水平与垂直方向的扫描范围。机械式雷达水平FOV为360°,垂直FOV通常为±15°~±25°;固态雷达水平FOV约90°~120°。
- 点云密度:单位角度内的点数,由角分辨率和扫描频率共同决定。点云密度直接影响建图的分辨率上限。
2.4 实战场景:室内机器人Cartographer建图的雷达选型与数据预处理
假设我们为一台室内服务机器人设计Cartographer建图方案,机器人最大移动速度为0.8m/s,需要构建边长30m的室内环境地图,要求地图分辨率达到5cm。
初始约束与目标:室内环境包含玻璃隔断、金属立柱和白色墙面。玻璃对激光的透射率较高,金属表面会产生镜面反射,这些都会导致点云出现异常值。目标是在Cartographer中实现回环检测成功,且建图轨迹误差小于10cm。
关键输入数据与参数分析:
- 雷达选型:选用机械式单线TOF雷达(如SICK TIM561,10Hz,角分辨率0.33°,测距范围0.05m~10m)。选择TOF而非三角测距,是因为室内存在玻璃隔断,三角测距在玻璃表面容易产生多路径反射误差,而TOF对镜面反射的鲁棒性稍好。
- 运动畸变评估:机器人最大速度0.8m/s,雷达扫描频率10Hz,则每帧扫描期间机器人前进0.08m。若雷达扫描方向与运动方向垂直,则点云在运动方向上会产生约8cm的畸变,这超过了5cm的地图分辨率要求。因此必须在Cartographer前端启用
motion_filter并配合IMU进行畸变补偿。 - 点云预处理:在将
LaserScan传入Cartographer之前,先进行以下处理:a) 去除距离小于0.1m的无效点;b) 设置强度阈值,过滤掉强度低于30的弱反射点(可能是玻璃边缘);c) 使用体素滤波将点云密度降低至每平方米200点,以控制后端优化计算量。
实际操作步骤与结果对比:
# 在Cartographer的lua配置文件中设置
tracking_frame = "base_link"
published_frame = "odom"
map_frame = "map"
use_imu_data = true
num_range_data = 1
# 前端扫描匹配参数
use_online_correlative_scan_matching = true
motion_filter.max_angle_radians = 0.1
motion_filter.max_distance_meters = 0.15
# 体素滤波参数
voxel_filter_size = 0.05
在未启用IMU补偿时,建图轨迹在转弯处出现明显漂移,回环闭合误差约25cm;启用IMU补偿并将体素滤波设为0.05m后,回环闭合误差降至6cm,满足设计要求。同时,通过强度阈值过滤,玻璃隔断处的点云噪点减少了70%,地图中玻璃区域不再出现虚假的“雾状”点云。
风险与代价:启用IMU补偿需要额外购买IMU传感器(成本约200元),且IMU的零偏需要标定。体素滤波虽然降低了计算量,但过大的滤波尺寸(>0.1m)会丢失墙面细节,导致地图边缘模糊。
2.5 常见误区与总结
在激光SLAM工程实践中,以下误区需要特别警惕:
- 误区一:认为角分辨率越高越好。高角分辨率意味着更大的数据量和更高的计算开销。在Cartographer中,过密的点云反而会增加前端匹配的局部极小值风险。应根据地图分辨率需求合理降采样。
- 误区二:忽略雷达的扫描方向与机器人运动方向的关系。当雷达扫描平面与运动方向平行时(如水平安装),运动畸变主要影响距离值;当垂直安装时,畸变影响角度值。Cartographer的
sensor_bridge默认假设雷达水平安装,若垂直安装需修改配置。 - 误区三:将反射强度直接当作表面材质分类依据。强度值受距离、入射角、表面粗糙度共同影响,不能简单设定固定阈值。建议在特定场景下采集标定数据,建立强度-距离-角度查找表。
- 误区四:忽视时间同步。多线雷达的每个点具有不同的时间戳,若直接使用帧尾时间作为整帧时间,在高速运动时会产生严重的点云“拖尾”现象。Cartographer支持
PointCloud2中每个点的时间戳,应确保驱动节点正确填充该字段。
总结而言,激光雷达是SLAM系统的“眼睛”,理解其测距原理、结构类型和数据特性,是正确配置Cartographer参数、诊断建图异常的前提。在下一阶段的课程中,我们将深入探讨如何将本章的点云数据接入Cartographer的传感器流水线,并处理运动畸变与时间同步问题。