ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

激光雷达标定全解析:从外参原理到工具链与实操避坑指南

激光雷达标定全解析:从外参原理到工具链与实操避坑指南 做过实车感知的人都懂一个画面激光雷达的障碍物框和相机画面里的目标差着半米明明前面的车就在正中间点云投影到图像上却偏到车道线外面去了。这时候唯一的解释就是传感器外参不对。我在实际项目中第一次遇到这个问题时折腾了整整两天最后发现只是雷达安装支架受力变形导致的角度偏差而标定工具又给了个离谱的初始值直接让优化掉进了局部最优。所以说激光雷达标定这件事看起来是个“一键脚本”的活真要落地比想象中复杂得多。这篇学习笔记主要梳理激光雷达标定的完整知识体系为什么标定、标定哪些参数、主流工具链怎么选、实际踩过哪些坑。适合刚接触自动驾驶感知、机器人多传感器融合或者被联合标定折磨过但一直没系统搞明白的朋友。内容不追求把每个公式推到底但会讲清楚底层逻辑和实操路径让你看完至少知道下一步该干什么。1. 为什么激光雷达必须标定从测量原理到坐标系1.1 激光雷达是怎么“看”世界的激光雷达的核心测距原理很简单TOF方案就是发射激光脉冲等它打到物体表面反射回来利用时间差乘以光速除以2得到距离。公式就是 d c * t / 2。这个原理听起来干净利落但真正用起来会发现一个问题雷达输出的不是单个距离值而是一整个点云每个点都包含距离、角度水平角和垂直角还有反射强度。以常见的旋转式机械激光雷达为例激光发射器绕竖直轴旋转每转一圈扫描一个平面多组激光源叠加在一起就形成多线束的3D点云。Velodyne的16线雷达有16个激光对每个激光对有一个固定的垂直角旋转时改变水平角。这样每个点都可以用球坐标距离、水平角、垂直角表示再转换到直角坐标系下。整套计算依赖的是出厂时的内参每个激光束的垂直偏转角、水平偏转角、距离修正值等。问题就出在这里。雷达在出厂前经历了严格的台架标定但装到车上之后你关心的是点云在“车体坐标系”下的位置而不是在“雷达自身坐标系”下的位置。支架安装角度稍微偏了一点、雷达外壳受力变形、螺丝松动都会让点云整体发生旋转和平移偏差。出厂内参解决不了这个问题必须做外参标定。1.2 内参和外参标定的两类核心任务很多人一听到标定就头大其实只要分清内参和外参就成功了一半。内参解决的是“传感器自身坐标系的点是否准确”的问题。激光雷达的内参包括各激光束的角度偏移、测距偏移、强度修正相机的内参包括焦距fx、fy、主点cx、cy以及畸变系数k1、k2、p1、p2等。内参在生产时已经标定但镜头受过冲击或长时间老化后可能需要重新标定尤其是相机。外参解决的是“不同传感器坐标系之间怎么变换”的问题。激光雷达和相机之间、激光雷达和IMU之间、激光雷达和车体之间都需要一个刚体变换关系也就是旋转矩阵R和平移向量t。我们常说的联合标定绝大多数情况下指的就是外参标定。外参标定的数学本质不复杂。以雷达到相机的外参为例假设雷达坐标系下的某个3D点P_lidar通过一个刚体变换T_camera_lidar映射到相机坐标系再通过相机内参投影到图像像素坐标。如果外参准确雷达点云投影到图像上应该和实际物体位置严丝合缝如果外参偏了投影点就会偏移甚至错位。标定过程本质上就是采样多组“雷达3D点 与 图像2D点”的对应关系反解出这个刚体变换T。1.3 容易混淆的几个“标定”概念在学习过程中经常会看到一堆名字类似的标定词比如canape标定、canoe数据标定、wcvw0这类公式很容易被绕晕。canape和canoe其实是Vector公司旗下的两款工具主要用于汽车电子开发中的ECU参数标定和CAN/LIN总线数据采集分析。这类“标定”针对的是控制器内部的算法参数、MAP表、传感器输出特性核心是让ECU的控制参数匹配实际工况和几何层面的传感器外参标定完全是两码事。至于wcvw0这个公式它描述的是传感器输出电压w与被测物理量v之间的线性关系其中c是解耦标定矩阵w0是零漂。这种线性标定模型常见于应变片、压力传感器、电流传感器等模拟量输出通道的校准。激光雷达的TOF测距虽然也存在零漂和刻度系数误差但外参标定处理的是刚体变换不涉及这种线性响应标定。知道这些区别很重要因为面试和实际方案讨论中如果概念混在一起说很容易让团队误判工作量。2. 标定方案选型先搞清楚你要解决哪一层的问题2.1 目标标定还是自标定外参标定按是否需要外部参照物分为两大类目标标定法和自标定法。目标标定法依赖特定的标定靶常见的有棋盘格、实心圆靶、标定板配合反光特征等。采集传感器数据后算法提取目标在各自传感器中的特征建立特征对应关系再求解外参。这种方法的优点是精度高、稳定性好、收敛范围大缺点是必须有标定场地和目标物无法在线完成。大多数量产和测试环节用的都是这类方法。自标定法则不需要特定的标定板而是利用环境中已有的自然特征比如建筑物立面、地面、电线杆等通过匹配不同传感器提取到的特征来求解外参。也可以利用传感器自身运动产生的几何约束来估计外参例如雷达点云连续帧配准得到的相对运动与IMU积分得到的相对运动保持一致。自标定的优点是灵活可以随车在线运行但通常需要良好的初始化且精度容易受场景退化影响。我个人的建议是项目调试阶段用目标标定法把外参做准量产或者长期运行阶段再考虑加入自标定模块做漂移监测和修正两条腿走路才踏实。2.2 相机与激光雷达联合标定的主流工具链相机和激光雷达的联合标定是感知系统中最常用也最关键的标定任务。目前主流工具链大致有三条路线。第一条是Autoware全家桶中的calibration_camera_lidar工具。它在ROS框架下运行通过RViz交互选中标定板在点云中的位置自动提取棋盘格角点然后做非线性优化。老版本支持Ubuntu 18.04加ROS Melodic安装相对成熟网上的教程也最多。这条路线适合快速上手。第二条是Livox团队开源的livox_camera_calib。它对Livox系列雷达做了深度优化支持批量处理多帧点云标定过程无需交互自动提取标定板平面精度和鲁棒性都很高。如果用的是非重复扫描的固态雷达这个工具几乎是首选。第三条是近年比较火的direct_visual_lidar_calibration。它把标定问题定义成一个像素级对齐问题利用雷达强度或深度信息渲染虚拟图像再和真实图像做对齐优化不需要专门的标定板对场景要求低鲁棒性很强。代价是计算量大且需要较好的初始外参。选型时要结合自己的雷达类型、相机型号和现场条件。如果是16线机械雷达加普通USB相机Autoware工具就够用如果是固态雷达优先考虑Livox工具如果现场不方便摆标定板可以试direct_visual_lidar_calibration。2.3 IMU与激光雷达外参标定IMU与雷达的外参标定往往容易被忽略但SLAM和融合定位场景中必不可少。IMU输出的是角速度和加速度雷达输出的是点云两个传感器之间同样存在一个固定的刚体变换需要标定。常用开源工具是香港科技大学开源团队的lidar_imu_calib以及Apollo的LiDAR-IMU标定模块。核心思路是让设备在环境中做充分的旋转和加减速运动同时采集雷达点云和IMU数据。雷达数据用帧间配准得到连续的运动估计IMU数据通过积分得到运动轨迹两者之间的偏差就包含了外参信息。构建非线性最小二乘问题联合优化外参和轨迹最终得到精确的变换矩阵。IMU自身的误差模型也值得关注这就涉及热词里提到的十二点标定。加速度计标定通常采用六位置法加反向位置组成十二个静态位置分别记录三轴加速度计输出求解零偏、比例因子和安装误差。陀螺仪标定则通常用速率法或Allan方差分析。如果IMU自身都没标定好雷达和IMU之间的外参标定精度也会大打折扣。2.4 手眼标定的应用场景手眼标定这个词来自机器人领域最近在大传感器标定中也经常被提起。它要解决的问题是已知机械臂末端位姿和传感器坐标系下的观测求解传感器与机械臂末端之间的固定变换。经典的数学形式是AXXB。其中A是传感器在两次观测之间的相对运动B是机械臂末端在相同时刻之间的相对运动X就是待求的手眼矩阵。如果传感器装在机械臂末端属于eye-in-hand如果传感器固定在外属于eye-to-hand方程形式略有不同。激光雷达和手眼标定结合的场景主要有两类一类是移动机器人机械臂上搭载雷达做环境感知另一类是利用高精度机械臂替代人工移动标定板实现自动化标定。如果只是固定安装的雷达和相机联合标定不涉及机械臂手眼标定这个知识可以作为扩展了解但用不太上。3. 实操相机-激光雷达联合标定全流程3.1 准备工作标定板、传感器布置与时间同步动手标定之前准备工作决定了结果的上下限。第一是标定板。棋盘格尺寸的选择很重要格子太小导致远距离角点检测不到格子太大导致近距离标定板超出相机视野。一般室外场景建议用A2以上尺寸的标定板单个棋盘格边长在60毫米到120毫米之间。标定板要贴平不能有明显的弯曲和褶皱否则角点位置会有系统性误差。第二是传感器布置。标定过程中雷达和相机必须保持固定任何微小的震动都会引入误差。建议用刚性支架把两个传感器锁在一个安装板上标定期间不要触碰。摆放距离方面标定板出现在相机画面中央区域同时能被雷达的激光束充分覆盖。特别要注意雷达的最低线束能否打到标定板下半部分否则提取的平面不完整。第三是时间同步。联合标定需要的是同一时刻的雷达帧和相机图像如果时间戳对不上标定板在运动过程中产生的位移会被误判为外参误差。ROS环境下可以用message_filters的ApproximateTimeSynchronizer做近似时间同步如果传感器支持硬件同步触发更好。我试过在时间没有对齐的情况下跑标定结果外参的平移分量直接偏了十几厘米。3.2 相机内参标定张正友法的实际操作在联合标定之前必须先确保相机内参是准的否则外参标定的误差会和内参误差混在一起。张正友标定法是目前最经典的内参标定方法。它的巧妙之处在于利用平面棋盘格的多张不同姿态图像构建单应矩阵约束线性求解内参初值再做非线性优化。实际操作中OpenCV的findChessboardCorners和calibrateCamera基本把过程封装好了。我的经验是采集图像时要注意三点。第一棋盘格在画面中的姿态要足够丰富除了正对着拍还要有绕相机光轴的旋转、倾斜、远近变化至少要拍15到25张。第二棋盘格不要只出现在画面中心要占满整个视场尤其要让格子出现在画面边缘这样才能把畸变系数约束出来。第三采集过程中标定板固定不动移动的是标定板本身而不是相机同时环境光照不要变化太大避免反光和阴影干扰角点检测。内参标定完成后要检查重投影误差一般要求小于0.3像素才算合格。如果误差偏大优先检查角点提取是否正确剔除不合格的帧后重新标定。3.3 使用Autoware标定工具完成联合标定Autoware的相机雷达联合标定工具是目前被验证最多的方案之一Ubuntu 18.04加ROS Melodic环境下的安装流程也相对成熟。这里多说一句网上很多教程喜欢让你从源码编译整个Autoware其实如果只是为了联合标定编译标定相关的几个包就够了没必要把整个Autoware都拉下来。核心操作流程大致如下。第一步把相机和雷达的数据录制下来ROS中常用rosbag记录。采集数据时让标定板在共同视野中变换多个位姿大约10到15个位置就够。第二步运行标定工具在RViz中加载点云和图像。第三步在每个采集帧中手动框选标定板在点云中的大致区域工具会自动拟合平面并提取图像中的棋盘格角点。第四步设置棋盘格尺寸包括格子数量和边长。第五步点击标定工具会构建多个3D到2D对应点对用非线性最小二乘求解外参。最后保存标定结果。实际使用中我发现一个小技巧框选点云中的标定板时尽量框得小一点只包含标定板区域不要把背景墙面和支撑架框进去否则平面拟合会被外部点干扰导致角点位置偏移。另外每帧数据采集时让标定板保持静止移动后等一两秒再采集避免雷达扫描的点和图像不同时刻的板位置不一致。3.4 Ubuntu 18.04环境常见配置问题Ubuntu 18.04配Autoware标定工具最容易翻车的点倒不在代码本身而在依赖环境。一个是ROS版本必须对应Melodic如果你Ubuntu装的是20.04对应的是ROS Noetic旧版的Autoware工具链可能编译不过。另一个是OpenCV版本的坑Autoware老版本代码基于OpenCV 3.x编写而Ubuntu 18.04默认源里的OpenCV已经是3.2基本兼容但如果你之前手动装过OpenCV 4.x很容易出现头文件和库版本混乱的编译错误。建议在干净的ROS Melodic环境上单独编译标定工具不要和OpenCV 4混用。还有一个小坑是Qt版本问题RViz插件如果编译失败大多是Qt5版本不匹配重新用系统包管理器装一下qtbase5-dev就行。遇到编译问题强烈建议先去Autoware的GitHub issues里搜错误日志大部分坑都有人填过。4. 常见问题与排查技巧实录4.1 点云中的标定板提取失败这个问题在实际标定中出现频率最高。表现是工具在点云中拟合平面时拟合到了背景墙上或者提取出来的标定板边缘明显变形导致角点位置偏差很大。原因通常有三个。第一激光线束太少16线雷达打到标定板上的点可能只有十几到几十个平面拟合受离群点影响很大。应对办法是让标定板离雷达近一些保证板面上的点足够密集。第二标定板颜色太深反射强度低点云中板面和背景难以区分。建议选择白色或浅灰色的标定板必要时利用反射强度信息过滤。第三标定板和地面平行或夹角太小导致激光打上去几乎是掠射点都集中在一起形成不了平面。摆放时尽量让标定板接近垂直于雷达的主光束方向。如果手动框选仍失败可以退一步先用点云分割算法把标定板区域点云先提取出来再送进标定工具或者换成反射率更高的漫反射标定板。4.2 时间同步不齐导致标定发散时间不同步的问题在4.1节提过这里补充一个排查技巧。跑完标定后如果旋转矩阵结果看起来合理但平移向量长得离谱大概率就是时间同步出了问题。可以在标定前先做一次简单的可视化验证把雷达点云按照粗略初始外参投影到图像上播放一段包含运动物体的数据看看投影结果是否在时间上滞后于图像。如果雷达投影的目标位置和图像里的目标始终存在固定的横向偏移而且偏移量随目标速度增加而增大基本可以确定是时间戳偏移问题。解决方向两个软件层面做时间同步或插值补偿硬件层面用支持PPS或IEEE 1588的网卡给雷达做精确授时。务实的做法是标定过程中保持标定板静止从根源上消除时间不同步带来的影响。4.3 初始外参给得太差大部分标定工具在优化前都需要输入一个初值。如果初值特别差优化算法很容易掉进局部最优最终结果看起来收敛了实际上投影误差依然很高。一个好的初值可以从安装设计图或CAD数模中直接量取平移分量误差控制在10厘米以内旋转分量误差控制在5度以内联合标定基本都能收敛到满意的结果。如果没有数模也可以手动估计先量出雷达和相机在车体上的大概安装位置再用粗略角度试几次观察投影误差的变化趋势。投影误差随着初值调整在变好说明优化方向是对的可以继续微调初值后重新跑。另外很多人忽略的一点是外参标定后还要做独立的验证。用一组没用参与标定的数据把雷达3D框中心投影到图像上肉眼确认误差可接受或者计算投影点到图像目标中心的重投影误差低于几个像素才说明标定成功。4.4 九点标定与标定板标定的选择困惑九点标定和标定板标定这两个概念经常被放在一起比较但实际上它们解决的是不同层面的问题。九点标定常用在2D视觉引导中建立的是图像像素坐标和机械手平面坐标之间的映射关系。方法是在机械手的工作平面内移动目标到九个已知位置记录对应的图像坐标用仿射或透视变换拟合出两者之间的变换关系。它本质上是一种端到端的标定绕开了相机内参外参的分离过程所以操作简单、实现快速但只适用于平面场景。标定板标定则是先标定相机内参再结合雷达或机械手做三维空间中的几何标定它给出的是完整的刚体变换关系能够处理带深度信息的三维情况。激光雷达联合标定必须用后者因为点云天然是三维的用平面的九点映射无法表达深度方向的空间关系。如果项目里只是二维视觉引导机械手抓取九点标定够了如果涉及三维感知融合老老实实走标定板的路子。4.5 特殊场景扩展双目、D435i与沙姆镜头学习激光雷达标定的过程中顺带看到很多相关的标定需求也在这里简单提一下。双目相机标定是在单目内参基础上增加了两个相机之间的相对外参标定输出双目结构参数用于立体匹配和深度估计。D435i这类消费级深度相机集成了RGB、深度和IMU标定内容包括相机内参、深度与RGB对齐、IMU与相机外参流程比普通相机复杂一些但原理一致。沙姆镜头用于激光三角测量等大景深工业场景成像模型不再是针孔模型标定方法需要针对倾斜像平面做专门处理属于小众需求。如果能把单目加雷达的标定原理吃透这些场景本质上都是同一套几何变换思维的延伸只是传感器类型和目标特征不同而已。5. 写在最后的一点体会在多次实车标定和故障排查之后我最深的感受是标定的精度上限不是由算法决定的而是由数据质量决定的。再厉害的非线性优化面对没有时间同步、角点提取错、初始值乱给的脏数据也只能给你一个看似收敛的假结果。所以做标定不要急着跑算法先花时间把硬件固定、时间同步和标定板质量这些基础工作做扎实后面的效率会高很多。另外建议团队在建图、感知、定位模块正式开发前就把一套标准化的标定流程固化下来写成脚本和文档包括传感器安装规范、标定场地要求、数据采集模板、验收标准。这样每次换车、换传感器或者重新安装之后都能按流程标准化完成标定而不是靠某个工程师的个人经验临场发挥。标定这件事看着不起眼但它决定了整个感知系统数据质量的底座值得多花心思。
返回列表