135 lines
3.5 KiB
ReStructuredText
135 lines
3.5 KiB
ReStructuredText
Stack SLAM
|
|
==========
|
|
|
|
Choix : ORB-SLAM3
|
|
-----------------
|
|
|
|
ORB-SLAM3 :cite:`campos2021orbslam3` est retenu comme backend SLAM.
|
|
|
|
Justification :
|
|
|
|
- **Modes** : Monoculaire, Stéréo, RGB-D, IMU (Stéréo-Inertiel)
|
|
- **Précision** : RMSE trajectoire < 2 cm en stéréo indoor (EuRoC dataset)
|
|
- **Open-source** : GPLv3, actif sur GitHub
|
|
- **ROS2** : wrappers disponibles (ros2-orbslam3)
|
|
- **Robustesse** : réinitialisation automatique, loop closure, multi-map
|
|
|
|
Comparatif
|
|
----------
|
|
|
|
.. list-table::
|
|
:header-rows: 1
|
|
:widths: 20 20 20 20 20
|
|
|
|
* - Stack
|
|
- Mode stéréo
|
|
- IMU
|
|
- ROS2
|
|
- Licence
|
|
* - **ORB-SLAM3**
|
|
- Oui
|
|
- Oui
|
|
- Via wrapper
|
|
- GPLv3
|
|
* - VINS-Fusion
|
|
- Oui
|
|
- Oui
|
|
- ROS1 natif
|
|
- GPLv3
|
|
* - OpenVSLAM
|
|
- Oui
|
|
- Non
|
|
- Oui
|
|
- BSD
|
|
* - Kimera
|
|
- Oui
|
|
- Oui
|
|
- ROS1
|
|
- BSD
|
|
* - ElasticFusion
|
|
- RGB-D only
|
|
- Non
|
|
- Non
|
|
- Non-commercial
|
|
|
|
VINS-Fusion :cite:`qin2019fusion` — candidat secondaire.
|
|
Avantage : robustesse outdoor. Inconvénient : ROS1, moins maintenu.
|
|
|
|
Architecture ORB-SLAM3
|
|
----------------------
|
|
|
|
.. code-block:: text
|
|
|
|
┌─────────────────────────────────────────────────┐
|
|
│ ORB-SLAM3 │
|
|
│ │
|
|
│ Tracking Thread ──► Local Mapping Thread │
|
|
│ │ │ │
|
|
│ Feature ORB Map Points │
|
|
│ Matching KeyFrames │
|
|
│ │ │ │
|
|
│ Pose Estimation Loop Closing Thread │
|
|
│ (PnP + IMU) (DBoW2 + g2o) │
|
|
│ │ │
|
|
│ Atlas (Multi-Map) │
|
|
└─────────────────────────────────────────────────┘
|
|
|
|
Dépendances compilation
|
|
-----------------------
|
|
|
|
.. code-block:: bash
|
|
|
|
# Eigen3
|
|
sudo apt install libeigen3-dev
|
|
|
|
# OpenCV 4.x
|
|
sudo apt install libopencv-dev
|
|
|
|
# Pangolin (viewer 3D)
|
|
git clone https://github.com/stevenlovegrove/Pangolin
|
|
cd Pangolin && cmake -B build && cmake --build build
|
|
|
|
# g2o (inclus dans ORB-SLAM3)
|
|
# DBoW2 (inclus dans ORB-SLAM3)
|
|
|
|
# ORB-SLAM3
|
|
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3
|
|
cd ORB_SLAM3 && chmod +x build.sh && ./build.sh
|
|
|
|
Paramètres SLAM — fichier YAML
|
|
--------------------------------
|
|
|
|
Voir ``config/orbslam3_stereo.yaml`` (à créer après calibration) :
|
|
|
|
.. code-block:: yaml
|
|
|
|
Camera.type: "KannalaBrandt8" # ou "Pinhole"
|
|
Camera.fx: 525.0
|
|
Camera.fy: 525.0
|
|
Camera.cx: 640.0
|
|
Camera.cy: 360.0
|
|
|
|
Stereo.b: 0.11 # baseline en mètres
|
|
Stereo.ThDepth: 35.0 # profondeur max (b * ThDepth pixels)
|
|
|
|
ORBextractor.nFeatures: 1000
|
|
ORBextractor.scaleFactor: 1.2
|
|
ORBextractor.nLevels: 8
|
|
|
|
Contraintes sous-marines
|
|
-------------------------
|
|
|
|
- **Texture** : eau lisse = peu de features. Pointer vers fond ou structure.
|
|
- **Absorption** : rouge absorbé > 3 m. Filtre passe-haut sur illumination.
|
|
- **Turbidité** : features instables. Réduire ``ThDepth``, augmenter ``nFeatures``.
|
|
- **Réfraction** : calibration en air ≠ en eau. Recalibrer si possible en eau.
|
|
|
|
Références
|
|
----------
|
|
|
|
:cite:`campos2021orbslam3`
|
|
|
|
:cite:`qin2019fusion`
|
|
|
|
:cite:`joshi2019survey`
|