[实践指南] 多传感器融合第一步:手把手完成毫米波雷达与摄像头的联合标定

张开发
2026/4/15 22:44:25 15 分钟阅读

分享文章

[实践指南] 多传感器融合第一步:手把手完成毫米波雷达与摄像头的联合标定
1. 为什么需要毫米波雷达与摄像头联合标定在自动驾驶和高级驾驶辅助系统ADAS中毫米波雷达和摄像头是最常用的两种传感器。毫米波雷达擅长测距和测速不受天气和光照影响但分辨率较低摄像头能提供丰富的纹理和颜色信息但对光照条件敏感。将两者数据融合可以发挥各自优势提升环境感知的准确性和鲁棒性。但融合的前提是知道两个传感器之间的相对位置和姿态关系这就是联合标定的核心目标。我做过一个项目由于标定误差导致雷达检测的车辆位置和摄像头看到的对不上最终触发了错误刹车。这个教训让我深刻理解到标定精度直接影响系统性能。2. 标定前的准备工作2.1 硬件安装检查首先确保传感器安装牢固毫米波雷达通常安装在车头格栅处摄像头位于挡风玻璃后。我建议先用水平仪检查传感器是否水平倾斜角度过大超过5度会影响标定结果。曾经遇到一个案例因为雷达支架轻微变形导致标定反复失败后来用3D打印定制支架才解决。2.2 标定板选择与制作常用的标定板有棋盘格和ArUco码两种。实测下来60cm×60cm的棋盘格效果最稳定。注意棋盘格必须平整我试过用KT板制作的标定板夏天受热变形导致标定误差增大。建议使用亚克力板并在背面加装加强筋。3. 坐标系原理详解3.1 摄像头坐标系摄像头坐标系通常以光心为原点Z轴指向拍摄方向。这里有个易错点OpenCV的像素坐标系原点在左上角而图像坐标系原点在中心。转换关系为u x/dx u0 v y/dy v0其中(u,v)是像素坐标(x,y)是图像坐标(u0,v0)是主点坐标。3.2 毫米波雷达坐标系以常见的77GHz雷达为例坐标系通常以天线中心为原点X轴指向车辆前方。需要注意的是不同厂商的坐标系定义可能不同比如博世雷达的Y轴指向左侧而大陆雷达的Y轴指向右侧。一定要查阅具体型号的规格书。4. 手把手标定流程4.1 数据采集技巧将标定板放置在车辆前方5-10米处确保同时出现在雷达和摄像头视野中。采集时建议雷达数据频率调至最高通常20Hz摄像头曝光时间设为自动车辆保持静止我通常会采集50组数据覆盖不同距离3m、5m、8m等和角度正对、±15度偏转。4.2 标定算法实现核心是求解雷达坐标系到摄像头坐标系的变换矩阵[R|t]。使用SVD分解的Python实现import numpy as np def solve_hand_eye(A, B): # A: 雷达坐标系下的标定板位置 # B: 摄像头坐标系下的标定板位置 H np.zeros((3,3)) for a, b in zip(A, B): H np.outer(b, a) U, _, Vt np.linalg.svd(H) R Vt.T U.T if np.linalg.det(R) 0: Vt[2,:] * -1 R Vt.T U.T t B.mean(axis0) - R A.mean(axis0) return R, t5. 标定结果验证5.1 重投影误差检查将雷达检测点投影到图像上观察与真实位置的偏差。好的标定结果误差应小于3个像素。我开发了一个可视化工具来辅助检查import cv2 def draw_projection(img, points_3d, K, dist, R, t): points_2d, _ cv2.projectPoints(points_3d, R, t, K, dist) for p in points_2d: cv2.circle(img, tuple(p[0].astype(int)), 5, (0,255,0), -1)5.2 动态场景测试在真实道路场景中验证比如观察前方车辆在图像和雷达数据中的位置是否一致。曾发现静态标定完美但动态场景有偏差最后发现是雷达和摄像头时间戳不同步导致。6. 常见问题排查6.1 标定结果不稳定可能原因标定板反射率不足雷达检测点少摄像头曝光过度/不足传感器固定不牢解决方案使用金属箔增强标定板边缘反射调整摄像头曝光参数为手动模式。6.2 重投影误差大检查步骤确认传感器内参准确检查标定板角点检测是否准确验证坐标系定义是否正确有个坑我踩过毫米波雷达的安装角度偏航角yaw误差对横向位置影响很大1度误差在50米处会导致近1米的偏差。

更多文章