相机-雷达标定:ChArUco / ArUco + 四圆孔刚性板

与"ArUco / ChArUco + 四圆孔刚性板"最匹配的开源项目是:

  1. hku-mars/FAST-Calib :当前最推荐,目标板为四个 ArUco + 四圆孔,支持 Livox Mid-360 / Avia / Ouster 等机械式和固态 LiDAR。
  2. MaroSalah02/FAST-Calib-ROS2:FAST-Calib 的 ROS2 移植版本,适合你的 ROS2 / Jetson 机器人项目直接验证。
  3. beltransen/velo2cam_calibration:该类目标板方案的经典开源实现,也是 FAST-Calib 所参考的目标板基础方案。
  4. OpenCalib/JointCalib :采用棋盘格 + 四圆孔,不是 ArUco/ChArUco,但支持相机内参与 LiDAR--Camera 外参联合优化。
  5. Clothooo/lvt2calib:采用四圆孔板,面向多类 LiDAR、RGB 相机和热成像相机,不依赖 ArUco/ChArUco。

目前可直接落地的开源实现仍以 ArUco + 四圆孔 的 FAST-Calib / velo2cam 为主。(arXiv1)


1. 项目对比表

项目 标定板设计 传感器支持 ROS 支持 是否严格对应方案 C 推荐用途
FAST-Calib 四 ArUco + 四圆孔刚性板 机械式 / 固态 3D LiDAR + Camera ROS1 首选工程方案
FAST-Calib-ROS2 四 ArUco + 四圆孔刚性板 Mid-360 / Avia / Ouster 等 ROS2 ROS2 快速接入
velo2cam_calibration 四 ArUco + 四圆孔板 LiDAR / Mono / Stereo Camera ROS1 经典算法参考
JointCalib 棋盘格 + 四圆孔板 LiDAR + Camera 非 ROS 主流程 部分对应 联合内外参优化
SensorsCalibration 提供 round-hole board 及多传感器工具箱 Camera / LiDAR / Radar / IMU 工具箱 / Docker 部分对应 自动驾驶标定工具集
LVT2Calib 四圆孔板 多类 LiDAR / RGB / Thermal ROS Noetic 不含 ArUco 多模态传感器扩展
SquareCalib 四圆孔平面板 Camera + LiDAR ROS Noetic / Python 不含 ArUco 稀疏点云圆孔提取研究

2. 首选项目:FAST-Calib

2.1 项目定位

FAST-Calib 是香港大学 MARS Lab 开源的 LiDAR--Camera 外参标定工具。其标定板与方案 C 基本一致:

text 复制代码
┌────────────────────────────────────┐
│  ArUco          ○          ○ ArUco │
│                                    │
│                                    │
│  ArUco          ○          ○ ArUco │
└────────────────────────────────────┘

其中:

  • 相机侧检测四个 ArUco Marker
  • LiDAR 侧检测四个圆孔中心
  • 标定板几何布局已知;
  • 最终通过圆孔中心的 3D--3D 对应关系求解 LiDAR 到 Camera 的刚体变换。

FAST-Calib 论文明确说明:相机处理阶段使用位于标定板已知位置的四个 ArUco marker 推算圆孔中心在相机坐标系中的位置;LiDAR 处理阶段执行平面分割、圆孔边缘提取和椭圆拟合;最后通过 SVD / Kabsch 方法完成外参求解,并支持多场景联合标定。(arXiv2)

2.2 支持能力

能力 支持情况
单目相机 + 3D LiDAR 支持
固态 LiDAR 支持
机械旋转式 LiDAR 支持
无外参初始值 支持
多姿态联合标定 支持
示例数据 Mid-360、Avia、Ouster
相机内参自动标定 不负责,需要预先提供
许可证 GPL-2.0

官方仓库要求 PCL >= 1.8OpenCV >= 4.0,提供单场景和多场景标定流程,并提供目标板 CAD 模型入口及 Mid-360、Avia、Ouster 示例数据。(GitHub3)

2.3 算法流程

#mermaid-svg-3ydI3qtgqx3AR4z4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-3ydI3qtgqx3AR4z4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-3ydI3qtgqx3AR4z4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-3ydI3qtgqx3AR4z4 .error-icon{fill:#552222;}#mermaid-svg-3ydI3qtgqx3AR4z4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3ydI3qtgqx3AR4z4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-3ydI3qtgqx3AR4z4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3ydI3qtgqx3AR4z4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3ydI3qtgqx3AR4z4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-3ydI3qtgqx3AR4z4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3ydI3qtgqx3AR4z4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3ydI3qtgqx3AR4z4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3ydI3qtgqx3AR4z4 .marker.cross{stroke:#333333;}#mermaid-svg-3ydI3qtgqx3AR4z4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3ydI3qtgqx3AR4z4 p{margin:0;}#mermaid-svg-3ydI3qtgqx3AR4z4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3ydI3qtgqx3AR4z4 .cluster-label text{fill:#333;}#mermaid-svg-3ydI3qtgqx3AR4z4 .cluster-label span{color:#333;}#mermaid-svg-3ydI3qtgqx3AR4z4 .cluster-label span p{background-color:transparent;}#mermaid-svg-3ydI3qtgqx3AR4z4 .label text,#mermaid-svg-3ydI3qtgqx3AR4z4 span{fill:#333;color:#333;}#mermaid-svg-3ydI3qtgqx3AR4z4 .node rect,#mermaid-svg-3ydI3qtgqx3AR4z4 .node circle,#mermaid-svg-3ydI3qtgqx3AR4z4 .node ellipse,#mermaid-svg-3ydI3qtgqx3AR4z4 .node polygon,#mermaid-svg-3ydI3qtgqx3AR4z4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3ydI3qtgqx3AR4z4 .rough-node .label text,#mermaid-svg-3ydI3qtgqx3AR4z4 .node .label text,#mermaid-svg-3ydI3qtgqx3AR4z4 .image-shape .label,#mermaid-svg-3ydI3qtgqx3AR4z4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-3ydI3qtgqx3AR4z4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-3ydI3qtgqx3AR4z4 .rough-node .label,#mermaid-svg-3ydI3qtgqx3AR4z4 .node .label,#mermaid-svg-3ydI3qtgqx3AR4z4 .image-shape .label,#mermaid-svg-3ydI3qtgqx3AR4z4 .icon-shape .label{text-align:center;}#mermaid-svg-3ydI3qtgqx3AR4z4 .node.clickable{cursor:pointer;}#mermaid-svg-3ydI3qtgqx3AR4z4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-3ydI3qtgqx3AR4z4 .arrowheadPath{fill:#333333;}#mermaid-svg-3ydI3qtgqx3AR4z4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3ydI3qtgqx3AR4z4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3ydI3qtgqx3AR4z4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3ydI3qtgqx3AR4z4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-3ydI3qtgqx3AR4z4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3ydI3qtgqx3AR4z4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-3ydI3qtgqx3AR4z4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3ydI3qtgqx3AR4z4 .cluster text{fill:#333;}#mermaid-svg-3ydI3qtgqx3AR4z4 .cluster span{color:#333;}#mermaid-svg-3ydI3qtgqx3AR4z4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3ydI3qtgqx3AR4z4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-3ydI3qtgqx3AR4z4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-3ydI3qtgqx3AR4z4 .icon-shape,#mermaid-svg-3ydI3qtgqx3AR4z4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3ydI3qtgqx3AR4z4 .icon-shape p,#mermaid-svg-3ydI3qtgqx3AR4z4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-3ydI3qtgqx3AR4z4 .icon-shape .label rect,#mermaid-svg-3ydI3qtgqx3AR4z4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3ydI3qtgqx3AR4z4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-3ydI3qtgqx3AR4z4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-3ydI3qtgqx3AR4z4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 同步采集图像与点云
相机侧检测四个 ArUco
LiDAR 点云 ROI 过滤
估计标定板 Pose
计算 Camera 坐标系下四圆孔中心
RANSAC 提取平面板
圆孔边缘提取
椭圆拟合获取 LiDAR 圆孔中心
四组 3D-3D 对应点
Kabsch / SVD 求解外参
点云投影验证

2.4 适合机器人项目的原因

FAST-Calib 的优势是:

项目需求 FAST-Calib 对应能力
Livox Mid-360 等固态 LiDAR 已有验证
RGB + LiDAR 融合 原生目标
点云投影到图像验证 支持
地铁站坡道 / 障碍物语义融合 可作为外参基础
ROS2 接入 有社区 ROS2 移植版本
不希望依赖人工点选 自动提取目标板特征

3. ROS2 直接落地:FAST-Calib-ROS2

3.1 项目定位

FAST-Calib-ROS2 是 FAST-Calib 的 ROS2 移植仓库,保留了原方案的四圆孔目标板和点云---图像标定流程。

其 README 给出的运行入口为:

bash 复制代码
ros2 launch fast_calib calib_launch.py

并说明支持:

  • Livox Mid-360;
  • Livox Avia;
  • Ouster;
  • PointCloud2 格式点云;
  • ros2 bag 数据采集。

对于 Livox ROS Driver 2,仓库特别指出需要确保输出为 PointCloud2 格式。(GitHub4)

3.2 与官方版区别

项目 FAST-Calib 官方版 FAST-Calib-ROS2
ROS 版本 ROS1 ROS2
官方维护 社区移植
目标板 四 ArUco + 四圆孔 四 ArUco + 四圆孔
OpenCV / PCL OpenCV ≥ 4.0,PCL ≥ 1.8 OpenCV ≥ 4.0,PCL ≥ 1.8
多场景联合流程 README 明确提供 README 主要描述基础流程
适合 ROS2 bringup 需要移植 可直接开始验证

3.3 推荐用法

建议:

text 复制代码
阶段 1:使用 FAST-Calib-ROS2 在 ROS2 下完成数据录制与基础标定
阶段 2:使用官方 FAST-Calib 的多场景联合标定逻辑核验精度
阶段 3:将最终外参发布为 ROS2 static_transform_publisher / YAML

4. 经典基础项目:velo2cam_calibration

4.1 项目定位

velo2cam_calibration 是较早且具有代表性的自动 LiDAR--Camera 标定项目。其论文与代码采用:

text 复制代码
四个圆孔:用于 LiDAR / Stereo 点云侧提取几何特征
四个 ArUco:用于单目相机侧估计目标板与圆孔中心位置

论文说明,四个圆孔用于利用 LiDAR 和双目点云中的几何不连续性;四个 ArUco 位于目标板角部,用于单目图像中恢复三维信息。(ResearchGate5)

FAST-Calib 官方 README 明确表示,其目标板设计基于 velo2cam_calibration。(GitHub3)

4.2 项目特点

项目 说明
实现语言 C++ 为主
框架 ROS1 catkin package
目标板 四圆孔 + 四 ArUco
支持类型 LiDAR 与 Camera 的组合标定
许可证 GPL-2.0
工程价值 适合理解目标板检测、特征提取与早期算法设计

官方仓库提供 ROS 包、目标板尺寸示意图和 Gazebo 验证方案。(GitHub6)

4.3 与 FAST-Calib 的差异

对比项 velo2cam_calibration FAST-Calib
定位 经典基础实现 更新的实用工程实现
固态 LiDAR 适配 较弱 重点支持
圆孔中心提取 基础深度突变方法 边缘提取 + 椭圆拟合补偿
Mid-360 / Avia 不作为主要验证目标 已验证
多场景联合优化 能扩展 官方流程支持
推荐优先级 算法参考 实际落地首选

对于你可能采用的 Livox Mid-360 / Jetson / ROS2 路线,不建议从 velo2cam 开始工程部署,更适合作为 FAST-Calib 的算法对照与源码参考。


5. 联合优化方案:OpenCalib / JointCalib

5.1 标定板类型

JointCalib 对应的是:

text 复制代码
棋盘格 + 四圆孔刚性板

而不是:

text 复制代码
ArUco / ChArUco + 四圆孔板

其论文提出在棋盘格周围增加四个圆孔,通过棋盘格角点与圆孔特征的重投影约束,联合求解:

  • 相机内参;
  • 镜头畸变参数;
  • LiDAR--Camera 外参。

论文和仓库均公开了该方案;仓库输入包括相机标定板图像目录,以及与图像对应的圆孔中心 CSV 文件。(arXiv7) (GitHub8)

5.2 适合场景

需求 是否适合
已知相机内参,只求外参 可以,但不是最简路线
相机内参质量不可靠 适合
希望联合优化内参与外参 适合
直接使用 ArUco / ChArUco 需要自行修改
ROS2 在线集成 需要二次开发

5.3 改造成 ChArUco + 四圆孔的思路

JointCalib 的核心不是必须依赖普通棋盘格,而是需要:

text 复制代码
图像侧:稳定且已知板坐标的二维角点
LiDAR 侧:四圆孔中心三维坐标
优化侧:角点与圆孔的联合重投影误差

因此可将图像特征模块替换为:

cpp 复制代码
cv::aruco::CharucoDetector

并保持:

text 复制代码
圆孔点云检测模块
+
内参 / 外参联合非线性优化模块

这样可以构建:

text 复制代码
ChArUco + 四圆孔 + 联合内外参优化

此方案比直接采用 FAST-Calib 更适合"相机内参尚未稳定"或"多相机系统需要统一标定基准"的场景。


6. 多传感器工具箱:PJLab SensorsCalibration

6.1 项目定位

PJLab-ADG/SensorsCalibration 是 OpenCalib 多传感器标定工具箱,覆盖:

  • Camera intrinsic;
  • LiDAR--Camera;
  • LiDAR--LiDAR;
  • LiDAR--IMU;
  • Radar--Camera;
  • Radar--LiDAR;
  • Sensor--Vehicle。

其工厂标定部分明确提供了:

text 复制代码
round hole board:Camera and LiDAR
aruco marker board:Camera
apriltag board:Camera

并在仓库中提供 round_hole_board.pdf。工具箱采用 Apache-2.0 许可证,同时提供 Docker 快速运行方式。(GitHub9)

6.2 与方案 C 的关系

它不是一个开箱即用的"ChArUco + 四圆孔"标定器,但可以组合使用:

text 复制代码
SensorsCalibration 圆孔板及工具链
+
OpenCV ChArUco 图像检测
+
JointCalib / 自定义优化器

6.3 使用方式

不仅要做 LiDAR--Camera,还包括:

text 复制代码
IMU + LiDAR + Camera + Robot Base / Navigation Frame

则 SensorsCalibration 更适合作为多传感器标定工具总库,FAST-Calib 则作为其中的 LiDAR--Camera 精标模块。


7. 多类型 LiDAR / RGB / 热成像扩展:LVT2Calib

7.1 项目特点

LVT2Calib 使用统一的四圆孔标定板,对不同传感器提取共同的四个圆心特征,支持:

  • Livox Horizon / Mid-40 / Mid-70 / Avia;
  • Robosense M1;
  • Velodyne VLP-16 / 32 / 64 / 128;
  • Ouster OS1-32 / 64 / 128;
  • RGB Camera;
  • Thermal Camera。

其开源仓库基于 ROS Noetic、PCL 1.10、Ceres Solver 1.14 和 OpenCV 4.2,并提供 Docker 运行方式。(GitHub10)

7.2 与方案 C 的差异

项目 LVT2Calib
四圆孔 支持
ArUco 不作为核心特征
ChArUco 不使用
RGB Camera 支持
Thermal Camera 支持
多 LiDAR 支持
面向固态 LiDAR 支持

若未来机器人平台需要同时接入:

text 复制代码
RGB + 热成像 + Livox / Ouster

LVT2Calib 更有扩展价值;但仅做 RGB + LiDAR 外参时,FAST-Calib 更直接。


8. ChArUco + 四圆孔:当前开源情况

检索到的最直接 ChArUco + 圆孔 方案来自 2025 年论文:

A Target-based Multi-LiDAR Multi-Camera Extrinsic Calibration System

该方法采用:

  • 带 ArUco 编码的 ChArUco 棋盘;
  • 位于标定板角部的圆孔;
  • 相机侧使用 OpenCV ChArUco 检测与 PnP;
  • LiDAR 侧利用圆孔深度不连续特征;
  • 面向多 LiDAR、多相机传感器套件执行全局优化。

论文明确描述了 ChArUco 与圆孔结合的标定板及相机 / LiDAR 特征提取流程。(arXiv11)

但是,目前未检索到该论文配套的公开 GitHub 代码仓库。因此,若需要立即工程实现,建议基于 FAST-Calib 修改其相机侧模块,而不是等待现成 ChArUco 实现。


9.2 选型结论

目标 推荐项目
立即跑通 ROS2 LiDAR--Camera 标定 FAST-Calib-ROS2
追求官方实现与论文复现 FAST-Calib
理解四 ArUco + 四圆孔经典算法 velo2cam_calibration
希望同时优化相机内参与外参 JointCalib
建设完整多传感器标定工具链 SensorsCalibration
RGB + Thermal + 多 LiDAR 统一标定 LVT2Calib
严格使用 ChArUco + 四圆孔 基于 FAST-Calib 二次开发

参考链接:

1: https://arxiv.org/abs/2507.16621?utm_source=chatgpt.com "A Target-based Multi-LiDAR Multi-Camera Extrinsic Calibration System"

2: https://arxiv.org/html/2507.17210v1 "FAST-Calib: LiDAR-Camera Extrinsic Calibration in One Second"

3: https://github.com/hku-mars/FAST-Calib "GitHub - hku-mars/FAST-Calib: A Handy Extrinsic Calibration Tool for LiDAR-camera Systems. · GitHub"

4: https://github.com/MaroSalah02/FAST-Calib-ROS2 "GitHub - MaroSalah02/FAST-Calib-ROS2: A Handy Extrinsic Calibration Tool for LiDAR-camera Systems. · GitHub"

5: https://www.researchgate.net/publication/359181926_Automatic_Extrinsic_Calibration_Method_for_LiDAR_and_Camera_Sensor_Setups?utm_source=chatgpt.com "Automatic Extrinsic Calibration Method for LiDAR and ..."

6: https://github.com/beltransen/velo2cam_calibration "GitHub - beltransen/velo2cam_calibration: Automatic Extrinsic Calibration Method for LiDAR and Camera Sensor Setups. ROS Package. · GitHub"

7: https://arxiv.org/abs/2202.13708?utm_source=chatgpt.com "Joint Camera Intrinsic and LiDAR-Camera Extrinsic Calibration"

8: https://github.com/OpenCalib/JointCalib "GitHub - OpenCalib/JointCalib · GitHub"

9: https://github.com/PJLab-ADG/SensorsCalibration "GitHub - PJLab-ADG/SensorsCalibration: OpenCalib: A Multi-sensor Calibration Toolbox for Autonomous Driving · GitHub"

10: https://github.com/Clothooo/lvt2calib "GitHub - Clothooo/lvt2calib: A unified calibration for 3D LiDARs, visual cameras and thermal cameras · GitHub"

11: https://arxiv.org/html/2507.16621v1 "A Target-based Multi-LiDAR Multi-Camera Extrinsic Calibration System"

相关推荐
我叫张土豆9 小时前
向量库原理与 Qdrant 实现详解
人工智能·机器学习
要加油GW9 小时前
DeepSeek V4 + Claude Code thinking mode 400 错误修复方案
人工智能
梦想三三9 小时前
【OpenCV四大边缘检测算法】Sobel、Scharr、Laplacian、Canny 详解
人工智能·opencv·计算机视觉
cci9 小时前
Moveit2 第一个C++规划程序
人工智能
J_Xiong01179 小时前
【WAM篇】04:This&That——用一句“把这个放到那儿“加两个手势点,消解机器人指令的歧义
机器人·wam
染指11109 小时前
12.LangChain框架4-输出解释器
人工智能·langchain·rag
YOLO数据集集合9 小时前
智慧农业|农田作物杂草识别数据集|航拍巡检|YOLO实例分割|深度学习训练集|智能除草视觉数据集
人工智能·深度学习·yolo·目标检测·无人机
星越华夏9 小时前
YOLO v11蚊子数据集训练
人工智能·python·深度学习·yolo