第171篇 传感器标定实操——相机雷达IMU的标定流程总结

📅 发布时间:2026/8/19 14:04:24
第171篇 传感器标定实操——相机雷达IMU的标定流程总结 上篇讲了因子图优化——用图模型来建模状态估计问题然后全局优化求解。在SLAM和多传感器融合系统中因子图的因子来自各种传感器的观测。但如果传感器之间的外参相对位姿不准再好的优化算法也救不了你。这就是标定的重要性。讲真标定这件事教科书上往往一笔带过但在实际工程中标定精度直接决定了系统的上限。之前做AMR的团队SLAM算法调了两个月效果不好最后发现是相机和激光雷达的外参差了2度。标定修正之后建图质量直接上了一个台阶。今天这篇把相机内参标定、激光雷达-相机外参标定、IMU标定这三块的核心流程和工程经验讲清楚。相机内参标定相机内参标定就是求相机的焦距、光心位置和畸变系数。说白了就是搞清楚三维世界的点经过这个相机投影到图像上坐标是怎么变换的。最经典的工具是OpenCV的标定工具箱。流程是这样的打印一张棋盘格标定板或者用现成的用相机从不同角度拍15到25张照片覆盖视场的各个区域用cv2.findChessboardCorners检测每张图中的角点用cv2.calibrateCamera求解内参和畸变系数import cv2 ret, K, dist, rvecs, tvecs cv2.calibrateCamera( obj_points, img_points, img_size, None, None)K是3x3的内参矩阵fx, fy, cx, cydist是畸变系数k1, k2, p1, p2, k5。工程中有几个容易踩的坑标定板的平整度很重要——打印在普通A4纸上的棋盘格如果皱了标定结果就不准。最好贴在玻璃或者铝板上。拍摄角度要尽量覆盖视场边缘——如果所有照片都是正对着拍的边缘区域的畸变就没法准确估计。标定完之后要验证——重投影误差reprojection error应该在0.3到0.5像素以内。如果超过1像素说明标定有问题。激光雷达-相机外参标定外参标定是求两个传感器之间的相对位姿旋转平移。激光雷达和相机之间的外参标定是最常见的也是最有挑战性的——因为一个是三维点云一个是二维图像模态完全不同。主流方法分两类基于标定板的方法用一个已知几何形状的标定板比如平面棋盘格或者圆形靶标同时被激光雷达和相机观测到。在相机图像中检测标定板的角点在点云中检测标定板的平面然后通过点在平面上这个约束来求解外参。基于自然特征的方法不需要专门的标定板利用环境中的自然特征比如建筑物的边缘、墙角来标定。好处是不需要搬标定板但精度通常不如基于标定板的方法。工程中最常用的是基于标定板的方法。具体流程放置一个大的棋盘格标定板足够大让激光雷达也能扫到在相机图像中检测棋盘格角点用PnP求解标定板在相机坐标系下的位姿在点云中分割出标定板的平面拟合平面方程得到标定板在雷达坐标系下的位姿用多组位姿对应关系求解雷达坐标系到相机坐标系的变换这个标定过程至少需要3到5个不同位置的标定板。标定板离传感器越远标定精度越高因为基线越长。工程中有几个关键经验。标定板必须足够大——激光雷达的分辨率比相机低很多如果标定板太小点云中只能打到几个点平面拟合就不准。建议标定板尺寸至少60cm x 60cm。另外标定板不能只放在正前方要在不同距离、不同偏角下都采集几组数据——这样标定结果的各向同性更好。之前我们团队做标定时只把标定板放在正前方三个距离结果左右方向的平移精度还行但前后方向的误差特别大。后来加了侧向的标定板数据问题就解决了。还有一种更现代的方法是用自动标定工具——比如Autoware中的calibration_toolkit或者KIT团队开发的calibnet基于深度学习的方法。这些工具可以减少人工操作但精度通常不如精心操作的基于标定板的方法。另外提醒一句外参标定之前一定要做好时间同步——如果相机和雷达的数据不是同一时刻采集的标定结果必然不准。关于时间同步的细节可以回看第164篇。IMU标定IMU标定分两部分陀螺仪标定和加速度计标定。陀螺仪标定主要是求尺度因子和零偏。方法很简单让IMU静止一段时间采集陀螺仪数据算均值就是零偏理论上应该是零但实际传感器有零偏。然后让IMU以已知角速度旋转用转台对比IMU输出和转台的真实角速度得到尺度因子。加速度计标定稍微复杂一些。最常用的方法是六面法——把IMU放在一个平面上六个面分别朝上每个面静止采集数据。理论上每个面的加速度计读数应该是±g重力加速度通过六组数据可以求解加速度计的零偏、尺度因子和安装误差。# 六面法加速度计标定简化版 # 六个面的理论值 a_theory np.array([[0,0,g],[0,0,-g], [g,0,0],[-g,0,0], [0,g,0],[0,-g,0]]) # 用最小二乘求解a_theory M a_raw bias # M是3x3的尺度安装误差矩阵bias是3x1的零偏工程经验IMU标定最关键的是温度。IMU的零偏会随温度漂移所以高精度应用需要做温度补偿——在不同温度下标定建立零偏和温度的关系模型。很多工业级IMU内置了温度传感器可以在线补偿。另外一个重要的标定指标是随机游走特性用Allan方差分析。把IMU静止几个小时采集数据做Allan方差分析可以得到陀螺仪的角度随机游走ARW和角速率随机游走RRW以及加速度计的速度随机游走VRW。这些参数在卡尔曼滤波中用来设置Q矩阵——它们描述了IMU噪声随时间积累的特性。消费级IMU比如手机里的的ARW可能是工业级的100倍以上这也是为什么消费级IMU做航位推算几十秒就发散了。面试中怎么聊面试官问标定先说标定的分类内参vs外参再说相机内参标定的流程棋盘格OpenCV然后说外参标定的思路共视标定板最后说IMU标定六面法。如果面试官追问标定精度怎么评估你可以说相机内参看重投影误差越小越好0.5像素以下算合格。外参标定看验证误差——用标定结果把雷达点投影到图像上看投影位置是否和图像中的对应特征对齐。IMU标定看标定后的传感器读数是否和理论值吻合。还有一种交叉验证方法用标定结果做SLAM或者定位看系统整体精度是否提升。如果面试官追问在线标定和离线标定的区别你可以说离线标定是在系统部署前做一次假设标定参数在运行过程中不变。在线标定是在系统运行过程中持续估计标定参数——因为振动、温度变化等因素外参可能在使用过程中缓慢变化。在线标定通常把外参作为状态变量之一和位姿一起估计比如在因子图中加一个外参变量节点。自动驾驶中相机和IMU之间的外参经常用在线标定因为车辆行驶中的振动和温度变化会导致安装位置的微小偏移。分享一个多传感器联合标定的实战经验。当时给一台无人配送车做相机和激光雷达的外参标定用的是基于标定板的方法——在相机和激光雷达都能同时看到的区域放一个标定板相机检测角点激光雷达检测标定板的平面然后优化两个传感器之间的相对位姿使得标定板在两个传感器坐标系下的位置一致。一开始标定误差很大投影到图像上的激光点在标定板边缘有2-3厘米的偏差。排查后发现两个问题第一标定板在采集数据时被不小心碰动过导致部分数据帧中标定板的位置不一致。我们加了自动检测——如果某一帧的标定板位置和前后帧差异超过阈值就自动剔除。第二采集的数据中相机和激光雷达的视角太接近夹角不到10度导致深度方向的约束很弱。我们重新采集了数据确保相机和激光雷达对标定板的观测角度差异在30-60度之间。改完之后投影误差降到了5毫米以内。下一篇讲点云数据处理——法线估计、FPFH特征和配准。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第170篇 因子图优化入门——图模型在状态估计中的应用下一篇预告第172篇 点云数据处理——法线估计、FPFH特征和配准有任何问题欢迎评论区留言我会尽量回复。