SensorsCalibration 实战指南:如何从工厂到在线跑通自动驾驶多传感器标定
【免费下载链接】SensorsCalibrationOpenCalib: A Multi-sensor Calibration Toolbox for Autonomous Driving项目地址: https://gitcode.com/gh_mirrors/se/SensorsCalibration
做自动驾驶多传感器融合,最先翻车的往往是标定:LiDAR、相机、IMU、雷达各有各的坐标系,外参(坐标系之间的刚体变换)偏个几度,后面的融合、定位全乱。SensorsCalibration(OpenCalib)是一个面向自动驾驶的多传感器标定工具箱,覆盖相机内参标定、传感器两两外参标定到在线标定的完整链路,官方 Docker 镜像拉下来就能跑。
标定的痛点:每个传感器都有自己的坐标系
先说清楚我们在标定什么。每个传感器都附带一个局部坐标系,标定的目标是求出传感器坐标系到车身坐标系的 4×4 齐次变换——3 个旋转角加 3 个平移,一共 6 个自由度。数学本身不难,难在落地:传感器之间的特征匹配天然带噪声,优化又容易卡进局部最优,最后还得靠人眼判断"到底对齐没有"。
这也是为什么好用的标定工具普遍采用两条腿走路:先手动粗调拿到初值,再让算法自动精修。
SensorsCalibration 里都有些什么
仓库按标定对象分模块组织,一个文件夹对应一类标定,各模块的 README 里都有独立的使用文档:
camera_intrinsic:相机内参标定(基于标靶,全自动)imu_heading:IMU 航向角标定(无标靶,自动)lidar2imu、lidar2camera、lidar2lidar:三维感知组合,均提供手动 + 自动两套工具radar2camera、radar2lidar:毫米波雷达组合的手动标定surround-camera:环视相机外参标定(针孔/鱼眼,无标靶与有标靶两种)factory_calib:工厂标定板检测与标定online_calib与SensorX2car:车辆行驶中的在线标定、在线车体标定
支持的主要组合一览:
| 标定对象 | 参数类型 | 方法 | 手动 | 自动 |
|---|---|---|---|---|
| 相机内参 | 内参 | 基于标靶 | — | 是 |
| LiDAR-相机 | 外参 | 无标靶(道路场景) | 是 | 是 |
| LiDAR-IMU | 外参 | 无标靶(道路场景) | 是 | 是 |
| LiDAR-LiDAR | 外参 | 无标靶 | 是 | 是 |
| 环视相机 | 外参 | 无标靶 / 基于标靶 | 是 | 是 |
| 雷达-相机 / 雷达-LiDAR | 外参 | 无标靶 | 是 | — |
| 工厂标定(6 种标定板) | 内参/外参 | 标定板标靶 | 是 | 是 |
官方文档:README.md(顶层 README 里有全部模块的索引表)。
值得关注的地方:无标靶道路场景自动标定 + 交互式手动标定
不少开源工具做到"标定板标定"就停了,真实道路场景要自己另搭。SensorsCalibration 的侧重恰好在这个空档:
- 自动标定无标靶:以 LiDAR-相机为例,它从图像和点云里提取车道线、灯杆这类直线特征,内部用"粗粒度随机搜索 + 局部精细搜索"两级策略求解外参,目标是让图像直线与点云投影精确重合;
- 手动标定可交互:左侧 GUI 按钮、右侧点云投影预览,支持键盘微调(q/w/e 调角度,r/t/y 调平移),点 Save 即导出外参和内参 JSON;
- 工厂标定剥离了 OpenCV:棋盘格、圆阵、竖板、AprilTag、ArUco、圆孔板(LiDAR 可用)六种标定板识别全部自研,产线环境部署省心。
⚠️ 注意:自动标定的结果对初值非常敏感,初值偏几十度基本会收敛到错误位置。推荐流程是先用手动工具把初值调到投影大致对齐,再跑自动优化。
快速上手:拉 Docker 镜像、编译、运行
项目提供官方 Docker 镜像,OpenCV、PCL、Eigen、Ceres 等依赖都装好了。宿主机有 NVIDIA GPU 时,run_docker.sh会顺带把 GPU 和 X11 显示挂进来,手动标定窗口能正常弹出来:
git clone https://gitcode.com/gh_mirrors/se/SensorsCalibration cd SensorsCalibration && sudo ./run_docker.sh容器内代码根目录挂载在/share,进到对应模块目录编译即可:
cd /share/lidar2camera/manual_calib && mkdir -p build && cd build cmake .. && make ./bin/run_lidar2camera data/0.png data/0.pcd \ data/center_camera-intrinsic.json \ data/top_center_lidar-to-center_camera-extrinsic.json四个参数依次是图像、PCD 点云、内参 JSON、外参初值 JSON。弹窗后微调、保存,手动标定就完成了一半。
拿到手动初值后跑自动标定。这里要注意:自动标定吃的"图像"是用预训练分割模型提取出的特征掩码图,不是原图——绿色点即点云特征在图像上的投影:
cd /share/lidar2camera/auto_calib ./bin/run_lidar2camera data/mask.jpg data/calib.pcd \ data/center_camera-intrinsic.json \ data/top_center_lidar-to-center_camera-extrinsic.json核心源码:lidar2camera/auto_calib/,官方文档:lidar2camera/README.md。
效果验证与三个常见坑
结果对不对,看投影。下图中白色是图像提取的直线,绿色是 LiDAR 特征,两者贴合就说明标定到位。camera2car 模块还会输出角度误差的评估曲线(AUC 71.3%、MSE 0.000357),可以直接拿来当验收参考。
三个常见的坑,基本都出在数据而不是代码:
- 时间同步是第一大坑:LiDAR-IMU 在线标定时,点云和 GNSS/IMU 位姿的时间戳没对齐,参数怎么调轨迹都歪。先查数据的时间同步,再怀疑算法;
- 采集有讲究:LiDAR-IMU 自动标定官方要求地面足够平、周边特征丰富(墙体、车道线、灯杆)、车速保持 10km/h、绕圈三圈、尽量避开动态目标。官方轨迹参考如下:
- 别指望自动标定从空初值收敛。它是"精修"算法不是"估计"算法,初值必须来自手动工具或工厂值。💡 提示:手动窗口里切到 Intensity Color 显示模式,对比地面车道线的强度分布,对齐判断会更准。
要点速记
- 环境麻烦?直接用官方镜像
scllovewkf/opencalib:v1,run_docker.sh一行起容器,手动标定 GUI 开箱可用; - 仓库按标定对象分模块,查顶层 README.md 的索引表,按需进对应目录,不必全读;
- 推荐"手动出初值 → 自动精修"两段式,自动标定无标靶、直接跑道路场景;
- 工厂场景看
factory_calib,六种标定板识别代码与 OpenCV 解耦; - 在线标定看
online_calib(LiDAR-IMU、相机-IMU、雷达-车体)与SensorX2car。
【免费下载链接】SensorsCalibrationOpenCalib: A Multi-sensor Calibration Toolbox for Autonomous Driving项目地址: https://gitcode.com/gh_mirrors/se/SensorsCalibration
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考