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