1. 测距原理不是一句话的事:从光子出发推导点云坐标
很多人一提到LiDAR,第一反应就是"激光雷达嘛,发射激光然后算时间,乘上光速除以二就是距离"。这个说法没错,但只停留在"能说通"的层面。真到了选型、标定、分析点云质量的时候,如果脑子里只有这句概括,很容易被各种坑绊倒。
LiDAR的全称是Light Detection and Ranging,中文常见翻译是"激光探测和测距",行业内习惯简称为激光雷达。它最核心的测距手段是TOF(Time of Flight,飞行时间法):激光器发出一个脉冲,打到目标表面后反射回来,接收器记录从发射到接收的时间差Δt,那么单程距离就是:
[ d = \frac{c \cdot \Delta t}{2} ]
其中c是光速,大约3×10⁸ m/s。除以2是因为光走了一个来回。这个公式看起来简单,但工程实现里有一个非常容易被忽略的关键点:如果Δt测量的时间精度不够,距离误差会非常可观。举个例子,要获得1厘米的距离分辨率,时间分辨率需要达到约67皮秒(1皮秒=10⁻¹²秒)。67皮秒是什么概念?光在1纳秒内走30厘米,而67皮秒内光只走2厘米,往返之后等效单程1厘米。所以高精度测距的核心难点,不在"想清楚公式",而在"如何在皮秒级别稳定地测量时间间隔"。
1.1 为什么说脉冲式TOF不是唯一方案
除了脉冲TOF,还有两种常见的测距方式:相位式(AMCW,Amplitude Modulated Continuous Wave)和调频连续波(FMCW)。相位式雷达发射的是连续正弦波调制的激光,通过比较发射信号和接收信号之间的相位差来计算距离。它的优势是可以在较低峰值功率下实现很高的测距精度,适合中短距离、高精度的工业测量场景,比如货架体积测量、料位检测。缺点是最大不模糊距离受调制波长限制,超过一个完整周期后会出现距离模糊,需要用多频调制来解算。
FMCW走的是另一条路:发射频率随时间线性变化的连续波,回波信号与本振光混频后产生拍频,拍频的大小直接对应目标距离,同时多普勒频移还能给出径向速度。FMCW在弱目标检测、抗干扰、直接测速方面比TOF有天然优势,这也是近年来不少车载激光雷达厂商转向FMCW路线的根本原因。不过FMCW对激光器的频率稳定性、相干性要求极高,成本目前仍偏高。
1.2 一束激光怎么变成一帧点云
搞清楚单点测距还不够。一帧点云的生成,背后还牵扯到扫描机构和坐标变换。以机械式雷达为例,内部有若干组激光发射器垂直排列,每个发射器对应一个固定的俯仰角,底座以一定转速水平旋转。某一时刻,第i个激光器发射脉冲测出距离ρ_i,同时编码器读出当前水平角度θ_i,加上该激光器出厂标定的俯仰角φ_i,就得到了该点在极坐标系下的位置,再换算成笛卡尔坐标:
[ x = \rho_i \cos\phi_i \sin\theta_i ] [ y = \rho_i \cos\phi_i \cos\theta_i ] [ z = \rho_i \sin\phi_i ]
整套计算在雷达内部固件里实时完成,输出给用户的就是一帧已经带好坐标的点云。也就是说,雷达厂商在出厂前已经把"每个激光器的内参(俯仰角、水平偏移、距离补偿)"标定好并写进设备固件。但这里埋了一个大坑:这些内参会随温度漂移、机械振动、长期老化而变化,所以点云质量也会跟着劣化。这也是为什么大型车辆驾驶系统里,LiDAR的定期维护和返厂标定不是一个可选项,而是一个必选项。
1.3 回波数量、强度值和点云密度之间到底是什么关系
除了三维坐标,LiDAR点云通常还携带两个重要属性:强度值(Intensity)和回波序号(Echo Number)。强度值反映的是目标表面对激光的反射率,同一种材质在不同距离、不同入射角下强度值会有明显差异,所以不能直接拿它当严格的光谱特征使用,但可以用来做地面分割、车道线识别、路沿检测等任务的辅助特征。回波序号则描述了同一束激光在穿透部分遮挡物时产生的多次回波——比如激光穿过树叶打到地面,会先收到一个半遮挡的叶子回波,再收到完整的地面回波。利用"最后一次回波是地面"这种规律,可以在植被茂密区域滤除枝叶干扰,这个技巧在地形测绘中非常实用。
2. 选型比你想的更依赖场景:机械式、固态与补盲雷达的权衡
很多刚接触LiDAR的人会问:"我要做个机器人,买哪款雷达好?"这个问题没有标准答案,因为LiDAR是一个极度依赖应用场景的传感器。不是参数表上数字越大越好,而是"匹配才最好"。
2.1 机械式雷达:性能上限高,但别忽略它的物理短板
机械式LiDAR(比如Velodyne VLP-16、HDL-64、禾赛Pandar系列)通过电机带动激光收发模块整体旋转,能够实现360°水平视场角。这类雷达发展时间长、点云密度高、测距远,至今仍是很多室外无人车、测绘设备的主力选择。
但机械式雷达的短板非常直接:一是电机和旋转密封结构长期运转后存在磨损,需要维护;二是整体尺寸和重量偏大,对小型机器人不够友好;三是成本高,64线雷达的价格一直居高不下。另外还有一个隐蔽的问题——机械振动会引入点云的运动畸变,特别是在车辆颠簸路段或者机器人急加速的时候,同一帧点云里不同角度的点实际对应的时间戳不同,这直接影响到后续的配准和建图精度。
2.2 固态雷达和补盲雷达的定位差异
近年来固态LiDAR(MEMS振镜式、转镜式、Flash式)大规模上车,它们的共同特点是没有宏观旋转部件,体积更小、成本更低、寿命更长。但这背后有明确取舍:固态雷达的视场角通常很窄,比如某些前向主雷达的水平FOV只有120°左右,要做到全向感知必须多台组合。还有一种补盲雷达,专门装在车身四角,视场角极大(比如180°×90°以上),但测距范围较近,用于近距离盲区覆盖。所以你会发现,一套完整的车载LiDAR感知方案通常不是一台雷达单打独斗,而是"前向远距主雷达 + 四角补盲雷达"的组合。
在做选型的时候,我建议你把这几项列为硬指标:测距能力(@10%反射率下的有效射程)、水平/垂直视场角、角分辨率、点频(每秒点数)、回波模式、功耗、防护等级、工作温度范围。其中"@10%反射率"这个条件非常重要,因为黑色车身、深色路面这些低反射率目标的回波微弱,测不到就是测不到,纸面标称的"200米测程"往往是针对90%反射率白板得出的。
2.3 一个偏实战的选型对比参考
下面这个表是最近帮一个低速无人配送项目做传感器选型时整理的对比思路,虽然不是最新款参数,但可以作为评估框架参考:
| 维度 | 机械式16线 | 半固态前向雷达 | Flash固态补盲雷达 |
|---|---|---|---|
| 水平FOV | 360° | 约120° | 约180° |
| 垂直FOV | 约30° | 约25° | 约90° |
| 测距(@10%) | 约40-50米 | 约150米以上 | 约30米以内 |
| 角分辨率 | 水平约0.2°,垂直约2° | 水平约0.05°-0.1° | 相对较粗 |
| 适合场景 | 测绘、低速全向感知 | 前向高速目标检测 | 近距离盲区补足 |
你要记住,垂直视场角往往比水平视场角更容易被忽略。很多做机器人感知的新手只看水平FOV,结果装上车之后发现雷达看不见脚边低矮的障碍物,因为垂直方向的俯仰覆盖不够。这个问题在选型阶段就要算清楚,而不是等样机跑起来才发现。
3. 原始点云到干净数据:处理链路上的关键步骤
拿到雷达输出的原始点云不等于能直接用。实际工程里,原始点云里包含大量噪声、离群点和运动畸变,直接喂给感知算法或者建图算法,效果会非常差。这一节我梳理一遍"从原始数据到可用输入"全链路的关键处理步骤,每一步做与不做的差别,会直接影响最终系统精度。
3.1 运动畸变去除:匀速运动模型是最划算的起步
运动畸变的本质是:一帧点云内部,每个点的采集时刻并不相同。比如机械式雷达转速10Hz,水平旋转360°需要0.1秒,在这0.1秒内车辆已经向前行驶了一段距离,如果把这0.1秒内采集的所有点都当作"同一时刻"的点来用,点云就会出现拉伸或压缩。尤其是在转弯工况下,畸变会导致地图重影、特征错位。
最常用的畸变去除方法是基于匀速运动模型的线性插值。具体做法是:拿到当前帧起始时刻的位姿T_start和当前帧结束时刻的位姿T_end(这两个位姿通常由与LiDAR时间同步的IMU或里程计提供),对于帧内时间戳为t的点,计算它在起始时刻坐标系下的坐标:
[ p_{start} = T_{start}^{-1} \cdot T(t) \cdot p ]
其中T(t)是t时刻的位姿插值结果:
[ T(t) = T_{start} \cdot \exp\left( \frac{t - t_{start}}{t_{end} - t_{start}} \cdot \ln(T_{start}^{-1} \cdot T_{end}) \right) ]
LOAM系列算法在提取边缘点和平面点之前都会先做这一步,这也是LOAM在低算力平台上表现依然稳定的原因之一。如果你用的是带IMU的雷达(比如某些集成方案),也可以用IMU预积分结果替代线性插值,效果更好,但实现复杂度也会上一个台阶。
3.2 点云滤波与地面去除的两个实用策略
点云滤波最常用的是体素栅格降采样(Voxel Grid Downsample)和统计离群点去除(Statistical Outlier Removal)。体素降采样的原理是把三维空间划分成固定边长的小立方体,每个立方体内只保留一个代表点(可以是质心,也可以是离中心最近的点),这样可以在保持点云整体形状的前提下大幅降低点数。边长设置一般在0.1米到0.5米之间,具体取决于建图精度需求和算力预算。
地面去除在机器人场景里尤其重要,因为地面点在配准和特征提取中几乎是纯干扰。最经典的方法是RANSAC平面拟合法:随机采样三个点确定一个平面,统计有多少点在这个平面附近,迭代若干次后找到内点最多的平面即为地面。这个方法实现简单、速度快,在平坦地面场景下效果很好。但在坡道或者地形起伏较大的场景里,单一平面模型会失效,此时需要考虑地面高程图(Grid Map)方法——把点云投影到水平栅格上,对每个栅格统计最低点高度,再根据相邻栅格的高度差做地面判定。
3.3 点云时间同步:一个常被低估的"隐形杀手"
多传感器融合系统里,时间同步问题的优先级极高。LiDAR、相机、IMU各自有自己的时钟源,如果时间基准不统一,哪怕外参标定做得再准,数据在时间维度上的错位也会导致感知结果严重退化。
以LiDAR和IMU的同步为例,常见方案有两种:硬件同步(PPS脉冲信号+GPRMC时间戳)和软件同步(各传感器数据各自带时间戳,靠主机统一时钟对齐)。硬件同步精度高,能达到亚毫秒级,但需要额外的线缆和接口支持。软件同步实现简单,但如果主机多任务负载高,时间戳的抖动会直接影响同步精度。工程上我的建议是:能上硬件PPS就上PPS,特别是需要做紧耦合LiDAR-IMU融合的场合;如果条件不允许,至少要在软件侧做平滑回退和时钟频率漂移补偿,不能直接拿接收时刻当采集时刻用。
4. LiDAR-IMU标定:外参不准,后面全白做
LiDAR-IMU标定是激光雷达工程落地里绕不开的一个环节,也是很多人觉得"水很深"的地方。如果你只是把雷达和IMU简单固定在一起,然后随手填一个大概的外参,你会发现:点云投影到图像上边缘有重影,建图轨迹漂移严重,哪怕是静态场景,融合后的姿态也会缓慢但持续地发散。
4.1 为什么外参标定的本质是"让两种传感器看到同一个运动"
IMU测量的是三轴角速度和三轴线性加速度,工作频率高(通常在100Hz以上),短时间内相对位姿估计非常准,但积分后会有漂移。LiDAR测量的是三维点云,低频(10-20Hz),但绝对精度高,没有长期漂移。两者的融合本质上是用LiDAR的绝对观测去修正IMU的积分漂移,用IMU的高频运动去补偿LiDAR帧间的运动畸变。实现这一切的前提,就是精确知道LiDAR坐标系和IMU坐标系之间的相对变换关系——包括3个旋转角(横滚、俯仰、偏航)和3个平移量(x、y、z)。这6个参数就是外参。
很多人把外参标定想得太简单,觉着"旋转平移矩阵嘛,量一下装上去的位置和角度就行了"。实际上手工测量误差动辄在好几厘米、好几度以上,完全达不到融合算法的精度要求。所以必须用数据驱动的方式来做优化求解。
4.2 实操中的两类标定方法
LiDAR-IMU外参标定方法主要分两大类:基于标定靶标的标定方法和免标定靶标(target-less)的在线标定方法。
基于标定靶标的方法思路很直观:把雷达和IMU固定在一个平台上,在平台前方放置若干个已知几何形状的标定板(通常是平面板、V形板或三面体),让平台做已知模式的旋转和平移运动,同时记录LiDAR点云和IMU数据。LiDAR点云中提取出标定板的平面法向量和位置,IMU积分得到平台的运动。然后构建一个优化问题:寻找外参T(旋转矩阵R和平移向量t),使得"经过外参变换后的LiDAR观测"与"IMU积分预测的观测"一致。这个优化问题可以用最小二乘法求解,也可以用诸如lidar_imu_calib这类开源工具完成。
免靶标方法更适合在自然场景下进行在线标定,核心思想是"手眼标定"的推广。用符号表示就是求解AX=XB这个方程组:A和B分别是LiDAR和IMU在两个相邻时刻之间的相对运动,X就是待求的外参。如果有一系列这样的相对运动观测,就可以分两步求解——先解旋转部分(用四元数或李代数上的优化),再解平移部分。开源方案中,LiDAR-IMU标定常用的工具是浙江大学开源(浙大博士)的li_calib、港科大的lidar_imu_calib等,这些工具已经比较成熟,跑一遍的流程大概是:
- 采集数据:把LiDAR和IMU固定在一个平台上,手持或车载在特征丰富的环境中,做包含滚转、俯仰、偏航的充分激励运动,时长至少几十秒到几分钟,避免长时间匀速直线运动;
- 预处理:检查LiDAR点云质量、IMU零偏是否合理,确认时间同步是否准确;
- 运行标定工具:输入rosbag,设置好初始外参估计值(大致装上方向的安装角),工具自动提取特征并优化迭代;
- 验证:把标定出的外参用于点云投影或融合定位,观察点云与地图的重合度、轨迹平滑度是否明显改善。
我实际跑完多次标定后最深的感受是:激励充分比数据时长更重要。很多人采集数据时来回匀速走直线,IMU没有充分的角速度激励,旋转部分外参可观测性差,标定结果漂移严重。正确做法是像在写字"W"一样频繁变换姿态,每次转向的角速度要足够明显,让IMU角速度信号有足够的激励幅度。
4.3 标定结果怎么判断好坏
标定完成后一定要做验证。最简单的验证方式是把雷达点云投影到相机图像上(如果系统里有相机),观察边缘轮廓是否对齐;如果没有相机,可以把点云叠加到已有地图上,观察是否有重影。更严格的做法是做一个"残差检查":在标定过程中保留一部分数据不参与优化,用标定出的外参把这部分数据的LiDAR观测与IMU预测对齐,统计残差的均值和方差。偏差一般应该控制在厘米级以内。
还有一个容易被忽略的细节:IMU的内参(特别是加速度计零偏和陀螺仪零偏)和外参在联合优化中是相互耦合的。如果IMU零偏没有预先校准,外参标定结果往往也会有偏移。所以正式标定前,先让设备静止放置几分钟,估计并扣除陀螺仪和加速度计的零偏,是一个值得做的前置步骤。
5. 点云配准与建图精化:从ICP到BALM的核心思想
激光SLAM和建图是LiDAR最重要的应用方向之一。无论是2D机器人还是3D无人车,建图的核心问题都可以归结为一个点云配准问题:给定两帧或多帧点云,求出它们之间的相对位姿变换,然后不断把新帧拼到已有地图上。
5.1 从ICP到NDT,再到特征方法
ICP(Iterative Closest Point,最近点迭代)是最经典的点云配准方法:假设两帧点云已经大致对齐,对源点云中的每个点,在目标点云中搜索最近邻点,然后基于这些对应点对求解最优刚体变换,再更新变换,迭代直到收敛。ICP实现简单、精度不错,但依赖初始位姿足够好,且计算量大(最近邻搜索耗时)。
NDT(Normal Distributions Transform,正态分布变换)将空间体素化,对每个体素内的点云用高斯分布建模,配准时优化的是点落在目标体素分布上的概率得分。NDT比ICP对初值的要求宽松一些,速度更快,但精度和体素大小设置有关,需要调参。
特征法(以LOAM为代表)走的是另一条路:不直接对原始点做最近邻匹配,而是提取线特征(边缘点)和面特征(平面点),然后以点到线的距离、点到面的距离为残差做优化。特征法对点云质量和计算资源的要求更低,这也是LOAM系列在嵌入式平台上能跑得动的关键原因。
5.2 为什么单纯的scan-to-scan会累积漂移
不管用哪种配准方法,只要一步接一步地把新帧拼到上一帧上去,误差都会不可避免地向后传递和累积。这个累计漂移问题,单靠相邻帧配准无法根除,因为在配准过程中,每一帧的微小误差都会成为下一帧配准的初始误差源。解决办法分两个层面:一个是局部层面的帧到地图(scan-to-map)配准,把新帧与附近一个小范围的地图子图配准,而不是只与上一帧配准,这样可以有效抑制漂移累积;另一个是全局层面的回环检测和图优化,当运动到曾经到过的位置附近时,通过回环约束把累积的漂移一次性打散。
5.3 BALM:把bundle adjustment思路引入激光建图
BALM(Bundle Adjustment for LiDAR Mapping)是近年来受到关注的一类激光建图精化方法。它的核心思想借鉴了视觉SLAM中十分成熟的BA(捆绑调整)框架:把所有关键帧的位姿和地图中的特征同时放入一个统一的优化问题中,共同迭代求解。
在视觉BA里,优化的残差是"地图点的重投影位置"与"图像中对应特征点位置"之间的像素误差。在LiDAR的BALM中,这个思想被重新建模:优化变量包括所有关键帧的位姿,以及地图中特征面(plane)和特征线(edge)所对应的参数;残差是每个点云特征点到对应平面(或直线)的距离。通过这种方式,所有帧的信息被联合考虑,而不是逐帧贪心式地配准,从而显著提升全局一致性。
BALM相对LOAM这类增量式方法的优势很清晰:增量式方法一旦把当前帧融合进地图,map就会"定型",之后其他帧的误差只能去适应这个已有地图;BALM则让所有帧的位姿和特征在每轮迭代里同步更新,从数学上看更接近一个全局最优解。代价自然是计算量明显增加,所以BALM更常用于离线建图精化,而不是低算力平台上的实时SLAM。
5.4 实际建图流程里我建议在哪些环节插入精化
我在做户外园区测绘项目时,通常把建图流程分成三步:第一步用LOAM类算法做实时定位和局部地图构建,保证轨迹的初步可用;第二步保存所有关键帧和对应特征,离线跑一圈BALM或类似的后端图优化,调整所有关键帧的全局位姿;第三步根据优化后的轨迹重新投影生成完整的全局点云地图,再做一次降采样和噪声滤波,最终输出给下游使用。
这个流程里最浪费时间但最值得认真做的,是第二步的图优化。如果场景里有明显的回环,优化效果会特别立竿见影——轨迹闭合以后,累积漂移会被大范围消除,地图边缘的重影清晰度肉眼可辨。如果没有回环,图优化的作用就主要体现在局部一致性上,这时候更重要的其实是做好前端配准和IMU预积分。
6. 我从项目里踩过、也帮别人排过的一些真实坑点
最后分享几个实战中遇到的典型问题,这些坑在文档里通常不会写,但几乎每个做LiDAR集成的人都可能撞上。
第一个坑是供电不稳导致点云跳动。某次测试时发现雷达点云每隔几十秒就出现一圈明显偏位的点,排查了很久才发现是电源模块的输出纹波过大,导致雷达内部编码器的角度读取瞬间偏差。后来在供电端并联了大容量电容和LC滤波器,问题立即消失。所以,当你发现点云"莫名其妙地抽风"时,不要一上来就怀疑算法,先看一下供电波形和通信日志。
第二个坑是安装位置的金属反射干扰。把LiDAR安装在车辆尾部时,如果安装支架上有大面积金属平面正对雷达视场,会造成多路径反射,点云上出现一层"虚影"。不少号称"雷达坏了"的案例,最后都发现是安装结构设计不当导致镜面反射。解决方法是尽量让雷达视场内不要出现正对的大块金属平面,或者对支架表面做哑光、粗糙化处理。
第三个坑是标定数据"看着丰富,实则无效"。前面提到标定需要充分激励运动,但如果整个采集过程中激光雷达几乎都在看同一面白墙,特征贫乏,即使运动再激烈,标定结果同样不可靠。最优的数据采集环境应该是:室内或园区里有丰富的立体结构(墙角、柱子、树干、路沿、车辆等),运动轨迹覆盖多方向多姿态,并且保证LiDAR视场内有足够的几何变化。
第四个坑和天气有关。激光雷达在雨、雪、雾天气下性能衰减是物理规律,因为水滴和气溶胶会对激光产生散射和吸收。不同波长的雷达衰减程度有差异,1550nm波长在雾天表现通常优于905nm,但1550nm器件成本高。在做户外方案选型时,如果预算允许,建议把工作环境的恶劣程度纳入传感器选型考量,而不是只看晴天数据。
写在最后
LiDAR这套东西,从原理到工程落地,中间隔着大量的细节。原理层面的"飞行时间测距"人人都能看懂,但真正把一个雷达用对、用好、用稳,需要的是对数据形态、时间同步、标定方法、配准逻辑乃至硬件安装的全链路理解。我在带新人的时候经常说一句话:不要急着跑通一个demo,你要先搞清楚每一个坐标系是怎么来的,每一个时间戳对齐到底对没对上,每一个参数为什么是这个值。把这些问题一个个问到底,LiDAR对你来说就不再是一台"会出点云的盒子",而是一个你可以完全驾驭的精密传感器。
希望这篇指南能帮你少走一些弯路。如果你正在做LiDAR相关的项目,也欢迎在实践中多记录数据、多验证假设——很多经验,真的是踩坑踩出来的。