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`