Bundle Adjustment
- 又称: BA
- 类别: State estimation & navigation › Localisation
- 标签: slam, nonlinear-optimization, computer-vision, 3d-reconstruction, state-estimation
对相机位姿和 3D 路标位置(有时还有相机参数)进行的联合非线性最小二乘优化,使所有观测特征的重投影误差最小。
定义
光束法平差(BA)(bundle adjustment)通过同时调整相机位姿和 3D 点的位置来优化 3D 重建,使这些点投影到每幅图像中时,尽可能落在实际观测到特征的位置附近。被最小化的量是重投影误差的平方和,即预测的特征位置与测得的特征位置之间的像素距离;这些误差通常按测量不确定度加权,并套上 Huber 或 Cauchy 等鲁棒损失,以限制错误匹配的影响。这个名称指的是光线束:把每个 3D 点与观测到它的各个相机中心连接起来的光线;优化不断调整这些光线束,直到它们彼此一致。该技术源自摄影测量,一篇被广泛引用的现代论述是 Triggs、McLauchlan、Hartley 和 Fitzgibbon 的综述(2000)。
由于旋转和透视投影,这个问题是非线性的,因此需要迭代求解,通常使用 Levenberg-Marquardt 方法。它的结构使其在大规模下仍可处理:每个残差只涉及一个相机和一个点,因此系统是稀疏的,并且可以用舒尔补把点消去,只留下一个仅含相机变量、小得多的系统。解只在一个规范自由度(gauge freedom)之内确定,即一个全局旋转和平移,对于没有其他传感器的单个相机还要加上一个全局尺度,因此需要固定部分变量或加入先验。当相机内参和畸变标定得不好时,也可以同时对它们进行优化。
在机器人学中,BA 是运动恢复结构和基于关键帧的视觉 SLAM 的核心。全局 BA 优化整个地图,离线运行或在回环之后运行;局部 BA 或滑动窗口 BA 只优化最近的若干关键帧及其看到的路标,把较早的状态固定或边缘化,因此可以实时运行。视觉惯性系统用 IMU 预积分因子扩展它,其他传感器因子也可以加入同一个因子图。BA 与位姿图优化的区别在于,BA 把路标保留为变量并使用原始图像测量;位姿图只保留位姿和相对约束,更快、更小,但会丢弃信息。
为何重要
光束法平差把带噪声的特征轨迹变成精确的相机轨迹和 3D 地图。大多数视觉里程计、视觉 SLAM 和摄影测量流程都依赖它,而在全局、局部和滑动窗口 BA 之间的选择,在很大程度上决定了这些系统在精度和实时性能之间的权衡。
主要应用
- 运动恢复结构和摄影测量
- 基于关键帧的视觉 SLAM 和视觉惯性 SLAM 的后端
- 无人机、车辆和水下机器人上的滑动窗口视觉里程计
- 多相机标定和相机-激光雷达标定的精化
- 用于检测、建图和数字孪生的 3D 重建
实际应用
在水下或空中机器人上的视觉惯性 SLAM 系统中,每当相机移动得足够远,就会创建一个新的关键帧。随后,一个滑动窗口优化器利用来自跟踪特征的重投影因子以及关键帧之间的预积分 IMU 因子,对最近的关键帧位姿、它们的速度和 IMU 偏置,以及这些关键帧中看到的所有路标进行优化。较早的关键帧被边缘化为先验,使窗口保持固定大小。Huber 损失限制了由运动物体或反光造成的误匹配特征的影响。检测到回环时,位姿图优化或完整的全局 BA 会校正整条轨迹上的漂移,通常在后台线程中进行。
常见误解
- 光束法平差和位姿图优化是一回事 — BA 还会根据图像测量优化路标位置,而位姿图只保留位姿和相对约束
- BA 能修正糟糕的初始化 — 它是局部优化器,需要合理的位姿和点的初始估计才能收敛到正确答案
- 单目 BA 能恢复真实尺度 — 没有其他传感器或已知尺寸时,尺度不可观测,并且可能漂移
- BA 只用于离线重建 — 局部和滑动窗口变体在许多 SLAM 系统中实时运行
谁需要了解
- 视觉 SLAM 和视觉里程计工程师
- 计算机视觉和摄影测量工程师
- 将相机与其他传感器融合的状态估计工程师
- 学习建图与定位的机器人专业学生
相关技术
- 运动恢复结构(Structure from Motion)
- Levenberg-Marquardt 算法(Levenberg-Marquardt Algorithm)
- Ceres Solver
- g2o
- GTSAM
- COLMAP
相关术语
相关项目
- LingBot-Map: Streaming 3D reconstruction from one camera: pose and depth for every frame, live
- oomwoo: Open-source DIY robot vacuum: 3D-printed, ROS2 + 2D LiDAR, fully local.
- Cartographer: Google's real-time 2D and 3D SLAM system for multi-platform robotics
- OpenDroneMap: Open-source photogrammetry toolkit that turns drone images into maps and 3D models
- FAST-LIVO2: Fast, direct LiDAR-inertial-visual odometry from HKU-MARS, published in IEEE T-RO
- DimOS: Python robotics runtime with agents, SLAM and teleop, no ROS required
视频
- Bundle Adjustment - 5 Minutes with Cyrill: Cyrill Stachniss
- The Basics about Bundle Adjustment (Cyrill Stachniss): Cyrill Stachniss