自动驾驶数据回放验证与回归工程 - 第2节

2. 自动驾驶系统基础

第2章 数据采集与传感器标定

说实话,数据采集和标定这件事,看着基础,但坑特别多。我见过太多团队在回放闭环里折腾半天,最后发现是采集时传感器没对齐,或者标定参数差了几个像素——整个闭环验证直接白费。这一章,咱们就把相机、激光雷达、毫米波雷达、IMU/GNSS的采集规范和联合标定原理彻底聊透。

传感器联合标定与数据采集体系 多传感器融合标定 📷 相机 🔦 激光雷达 📡 毫米波雷达 🧭 IMU/GNSS 采集规范 联合标定原理 外参/内参 时间同步 核心标定 规范/原理 传感器类型

2.1 相机采集规范与标定

相机这东西,看着简单,但采集时稍不注意,后面的算法就得遭殃。我个人习惯,采集前一定先检查三件事:曝光是否锁定、白平衡是否固定、帧率是否稳定。你想想看,如果曝光在采集过程中来回跳,那回放出来的图像亮度一直在变,算法根本没法稳定工作。

💡 我的经验: 曾经有一次,我们采集了10小时的城区数据,回来一看,画面忽明忽暗。排查了半天,发现是自动曝光没关。从那以后,我所有采集任务都强制锁定曝光和增益。

相机内参标定,我推荐用棋盘格或AprilTag。别小看标定板平整度——我见过有人用打印纸贴在纸箱上,结果标定出来的畸变参数全是错的。标定板一定要贴在刚性平板上。

# 相机标定示例 (OpenCV)
import cv2
import numpy as np

# 准备棋盘格角点
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
objp = np.zeros((6*9,3), np.float32)
objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2)

# 采集多张不同角度图像
img_points = []
obj_points = []
for img in images:
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, corners = cv2.findChessboardCorners(gray, (9,6), None)
    if ret:
        obj_points.append(objp)
        corners2 = cv2.cornerSubPix(gray, corners, (11,11), (-1,-1), criteria)
        img_points.append(corners2)

ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, gray.shape[::-1], None, None)
print("内参矩阵:\n", mtx)

2.2 激光雷达采集与标定

激光雷达的数据采集,核心就一句话:保证点云不畸变。车在动,激光雷达也在转,如果车速快或者转弯急,一帧点云里就会出现运动畸变。我建议采集时尽量保持直线匀速,或者后期用IMU做去畸变。

  • 采集规范: 激光雷达安装位置要避开遮挡,车顶是最常见的。注意反射率标定——不同物体反射强度不一样,这个对后续目标检测很重要。
  • 联合标定: 激光雷达到相机的标定,我习惯用标定板上的反光特征。找一块带棋盘格的平板,激光雷达能看到板子的边缘,相机也能看到角点,然后做PnP求解。
⚠️ 注意: 我曾经在雨夜采集过一组数据,激光雷达点云上全是雨滴噪点。后来我们加了滤波,但标定参数还是受了影响。所以恶劣天气下采集的数据,标定前一定要做清洗。

2.3 毫米波雷达采集规范

毫米波雷达的数据稀疏,但速度信息特别准。采集时要注意多径干扰——隧道、护栏旁边容易出假目标。我个人习惯,采集时同时记录雷达的原始点云和目标列表,回放时可以根据需要选。

标定方面,毫米波雷达和相机/激光雷达的联合标定比较麻烦。因为雷达点太稀疏,很难找到特征点。我常用的方法是:用角反射器作为标定目标,雷达能看到强回波,相机也能拍到,然后手动关联。

2.4 IMU/GNSS 采集与时空基准

IMU和GNSS是闭环回放的“时间锚点”。没有精准的时间同步,后面所有传感器数据都是乱的。我建议用PTP(精确时间协议)或者GPS脉冲同步所有传感器。

传感器时间同步方式典型精度
相机PTP / 硬件触发< 1ms
激光雷达GPS PPS + 时间戳< 1ms
毫米波雷达CAN 时间戳 / PTP< 2ms
IMU/GNSS自身授时 + PPS< 0.1ms

IMU的零偏和标度因子,我建议每次采集前做静态初始化。把车停稳,记录2分钟IMU数据,然后取平均算零偏。别小看这一步,它直接影响回放时位姿推算的精度。

🔑 联合标定核心原理: 说白了,就是求传感器之间的旋转和平移(外参)。常用方法有:
① 基于标定物的联合优化(如棋盘格+反光板)
② 无目标自然场景标定(利用道路特征,但精度稍低)
③ 手眼标定法(针对机械臂/车辆运动)
我个人最推荐第一种,稳定可靠,就是标定过程繁琐点。

2.5 数据采集避坑清单

  • 采集前检查所有传感器时间戳是否对齐——我吃过亏,回放时发现相机和激光雷达差了200ms,整个场景都是错位的。
  • 标定板不要用反光材料,激光雷达打上去会过曝。
  • IMU和GNSS天线安装位置要记录精确,回放时需要用到杆臂补偿。
  • 每次采集任务开始和结束,都录一段标定板视频,方便后期校验。

嗯,这一章内容不少,但都是实打实的干货。数据采集和标定做扎实了,后面的回放闭环才能跑得顺。下一章咱们聊聊数据存储与格式,到时候我会分享一些关于数据压缩和索引的经验。