SLAM
SLAM は Simultaneous Localization and Mapping の略で、未知環境の map を作りながら、同時に sensor 自身の pose を推定する問題です。Robotics、AR、autonomous driving、mobile mapping で中心的な技術です。
基本構成
典型的な SLAM system は、次の component から構成されます。
Tracking
Tracking は、現在 frame の pose を既存 map に対して推定する処理です。Visual SLAM では、feature matching、PnP、direct alignment などが使われます。RGB-D SLAM や LiDAR SLAM では、ICP や scan matching が使われることもあります。
Mapping
Mapping は、landmark、point cloud、mesh、voxel、TSDF、semantic map などを更新する処理です。Map representation は、sensor と用途によって異なります。
Loop closure
SLAM では、長時間移動すると pose estimation の誤差が蓄積して drift が発生します。Loop closure は、過去に訪れた場所へ戻ってきたことを検出し、全体の pose graph を修正する処理です。
Loop closure によって、map の歪みや trajectory の drift を大きく減らせます。
Visual SLAM の代表例
ORB-SLAM は、feature-based visual SLAM の代表的な system です。ORB feature を使い、tracking、local mapping、loop closing の thread を分けて動作します。Monocular、stereo、RGB-D、visual-inertial などへ発展しています。
Sensor 別の SLAM
| 種類 | 説明 |
|---|---|
| Monocular SLAM | 単眼 camera を使います。Scale ambiguity が課題です。 |
| Stereo SLAM | Stereo camera により metric scale を得やすいです。 |
| RGB-D SLAM | Depth sensor を使い、dense map を作りやすいです。 |
| LiDAR SLAM | 3D point cloud を使います。屋外や大規模環境で強いです。 |
| Visual-Inertial SLAM | Camera と IMU を組み合わせ、motion に頑健です。 |
| Semantic SLAM | Semantic label や object を map に統合します。 |
SLAM の難所
- Dynamic object
- Textureless environment
- Illumination change
- Loop closure の誤検出
- Long-term map maintenance
- Scale drift
- Real-time constraint
数式で見る SLAM の状態推定
SLAM は、trajectory と map を同時に推定する確率的な状態推定問題として書けます。時刻 の pose を 、map を 、control または odometry を 、観測を とすると、目的は次の posterior を求めることです。
この式の気持ちは、「これまでの motion と sensor 観測をすべて見たとき、もっともありそうな trajectory と map は何か」を求めることです。Graph-based SLAM では、maximum a posteriori estimation として次のような最小二乗問題に変換します。
ここで、 は odometry、loop closure、landmark observation などの residual、 は information matrix です。Information matrix は、その constraint をどれくらい信頼するかを表します。
Pose graph optimization だけを見る場合、edge が相対 pose 観測 を持つとして、residual は Lie group 上で次のように書けます。
この式は、「推定された pose 差 が、観測された pose 差 と一致してほしい」という意味です。Loop closure は、遠く離れた時刻の pose 間にこのような edge を追加し、蓄積した drift を全体に分散させて修正します。
関連ページ
- Visual Odometry
- Place Recognition and Loop Closure
- Bundle Adjustment
- Depth Estimation
- Segmentation for 3D Reconstruction
主なソース
- Cadena et al., “Past, Present, and Future of SLAM”, 2016: https://arxiv.org/abs/1606.05830
- ORB-SLAM paper: https://arxiv.org/abs/1502.00956
- ORB-SLAM3 paper: https://arxiv.org/abs/2007.11898
- Durrant-Whyte and Bailey, “Simultaneous Localization and Mapping: Part I”, 2006: https://ieeexplore.ieee.org/document/1638022