Git_projet
Ce projet a pour objectif de développer un système d'odométrie visuelle utilisant des séquences de données issues de la base KITTI. Le projet comprend des étapes de prétraitement des données, de calibration des caméras, d'odométrie visuelle et de fusion avec les données GPS. Le code est basé sur le projet VINS-Fusion, et des modifications ont été apportées pour l'adapter aux besoins spécifiques de ce projet.
Ce fichier README vous guidera à travers la configuration du projet, l'exécution des différents modules et la compréhension des résultats obtenus.
0. Présentation de la base de données KITTI
-
La base de données KITTI fournit des séquences de données capturées avec des caméras et un GPS, utilisées pour des tâches de vision par ordinateur, comme l'odométrie visuelle et la fusion avec le GPS. Dataset KITTI : Lien vers le site officiel de KITTI
1. Modifications sur le code d'origine
Le projet d'origine Vins Mono a été modifié pour intégrer des ajustements spécifiques à ce projet. Voici quelques-unes des principales modifications :
-
Changements dans le code
checkboard
:- Remplacement de certaines constantes OpenCV pour améliorer la calibration du
chessboard
:CV_GRAY2BGR → cv::COLOR_GRAY2BGR CV_BGR2GRAY → cv::COLOR_BGR2GRAY CV_CALIB_CB_ADAPTIVE_THRESH → cv::CALIB_CB_ADAPTIVE_THRESH
- Remplacement de certaines constantes OpenCV pour améliorer la calibration du
-
Changements dans le code
CameraCalibration
:- Modification des paramètres de calibration pour adapter la méthode aux données de KITTI.
-
Changements dans le code
pose_graph
:- Intégration de la fusion des données GPS pour améliorer l'estimation de la pose.
2. lancement de code
Odométrie visuelle
Pour lancer l'odométrie visuelle avec les données KITTI, suivez ces étapes :
- lancer le RVIZ
roslaunch vins vins_rviz.launch
- Lancer l'interprétation des sequences
rosrun vins kitti_odom_test ~/catkin_ws2/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml /home/tosyma/catkin_ws2/kitti_dataset/data_odometry_gray/dataset/sequences/00
Le code prend deux arguments :
-
Fichier de configuration : Ce fichier de configuration contient tous les paramètres nécessaires à la configuration de l'odométrie visuelle. Il définit des paramètres comme la calibration de la caméra, les options de prétraitement des images, et d'autres variables nécessaires pour que l'algorithme d'odométrie fonctionne correctement.config
-
Chemin vers les séquences d'images KITTI : Ce chemin doit pointer vers le dossier contenant les images de la séquence KITTI que tu souhaites traiter. Les séquences sont généralement divisées en sous-dossiers, chacun contenant des images capturées par les caméras stéréoscopiques (gauche et droite).
- Dossier image_0 : Les images de la caméra gauche.
- Dossier image_1 : Les images de la caméra droite.
- Fichier times.txt : Contenant les timestamps (horodatages) pour chaque image.
Images en niveaux de gris : Les images utilisées dans ce projet sont en niveaux de gris (monochromes), ce qui signifie qu'elles ne contiennent pas d'information de couleur, mais seulement des variations de luminosité. Ce choix a été fait pour plusieurs raisons :
- Simplification du traitement : Les images en niveaux de gris réduisent la complexité computationnelle, car elles ne nécessitent pas de traitement des couleurs (qui pourrait être plus coûteux).
- Adaptation à l'odométrie visuelle : Pour des tâches comme l'odométrie visuelle, les algorithmes se concentrent souvent sur les variations de luminosité, et les informations de couleur ne sont pas toujours nécessaires.
Les images en niveaux de gris sont issues des séquences de KITTI, où chaque image est stockée sous forme de valeurs de pixel représentant des intensités lumineuses (allant du noir au blanc).
GPS
Pour lancer la fusion des données GPS avec l'odométrie, suivez les étapes suivantes :
- lancer le RVIZ
roslaunch vins vins_rviz.launch
rosrun vins kitti_gps_test /home/tosyma/catkin_ws2/src/VINS-Fusion/config/kitti_raw/kitti_10_03_config.yaml /home/tosyma/catkin_ws2/kitti_dataset/2011_10_03/2011_10_03_drive_0027_sync
rosrun global_fusion global_fusion_node
Video
3. Interprétation de code
- KITTIOdomTest : caméra et imu.
- KITTIGPSTest : caméra, imu, et GPS.
- Référence est le papier de VINS :
T. Qin, P. Li and S. Shen, "VINS-Mono : A Robust and Versatile Monocular Visual-Inertial State Estimator," in IEEE Transactions on Robotics, vol. 34, no. 4, pp. 1004-1020, Aug. 2018, doi : 10.1109/TRO.2018.2853729.
4. Résultats
L'organigramme illustre le fonctionnement d'un système conçu pour estimer une trajectoire fusionnée à partir des données du dataset KITTI. Ce système combine l'odométrie visuelle et les données GPS afin de tirer partie de leurs avantages exclusifs. Le processus débute par le chargement des données issues de KITTI, qui inclut à la fois les images capturées par les caméras embarquées et les mesures GPS fournissant des positions absolues. Ces données servent de base à l'ensemble du système. D'un côté, les images de la caméra subissent un traitement visant à corriger les dérives et à détecter des caractéristiques visuelles, telles que des points distincts dans les images (pièces de monnaie, contours, etc.). Ces caractéristiques sont ensuite utilisées pour calculer les poses relatives entre les différentes images successives, grâce à un algorithme d'odométrie visuelle-inertielle (VIO). Cela permet d'obtenir une estimation précise des déplacements locaux, mais qui peut être sujette à des erreurs cumulatives à long terme, appelées dérives.
En parallèle, les données GPS sont traitées pour fournir des positions globales. Une synchronisation des horaires entre les données GPS et les images de la caméra est réalisée, afin d'assurer une correspondance temporelle parfaite. Le GPS fournit ensuite une localisation absolue en termes de latitude, longitude et altitude, qui sera utilisée comme référence globale pour le système. Une fois les données visuelles et GPS prêtes, elles sont fusionnées. Cette étape permet de combiner les forces des deux systèmes : l'odométrie visuelle, avec sa précision locale élevée, et le GPS, qui corrige les erreurs de dérive à long terme. Après la fusion, une étape de correction est effectuée pour supprimer les erreurs restantes et aligner précisément les trajectoires calculées avec les positions absolues fournies par le GPS.
Le résultat final est une trajectoire fusionnée, optimisée et cohérente. Cette trajectoire est ensuite publiée, permettant son exploitation dans des environnements robotiques, par exemple à travers des outils comme ROS ou RViz pour la visualisation et l'utilisation pratique. Une fois la publication réalisée, le processus s'achève.
Voici le diagrame d'origine du papier pour Monocular camera:
Adaptation à la véhicule Zoé
- Lidar1: Velodyne VLP-16 (lien), message de sortie : "sensor_msgs/PointCloud2" (10hz)
- Lidar2: HESAI PandarXT-32 (lien), message de sortie : "sensor_msgs/PointCloud2" (10hz)
- Caméra: intel RealSense D435i stéréo (lien), messages de sortie : "sensor_msgs/Image" (5hz) et "sensor_msgs/Imu"
- Récepteur1: Ublox EVK M8T (lien), messages de sortie : "sensor_msgs/NavSatFix" (1hz) et "/ublox/RXMRAWX" (1hz) (Données brutes GNSS du format RINEX)
- Récepteur2: Sept PolaRX5 (lien), messages de sortie : "sensor_msgs/NavSatFix" (1hz) et données brutes GNSS
- Récepteur3: Novatel PwkpakD-E2 (lien), messages de sortie : "sensor_msgs/NavSatFix" (30hz) et "sensor_msgs/Imu" (100hz) (contient une centrale inertielle)
- Récepteur4: Ublox LEA (lien), message de sortie : "sensor_msgs/NavSatFix" (1hz)
- IMU1: yost3 labs (lien), message : "sensor_msgs/Imu" (100hz)
- IMU2: SBG Ellipse E (lien), message : "sensor_msgs/Imu" (100hz) Données mécanique du bus can, comme la vitesse de la voiture, la vitesse de chaque roue, freinage, ...
Contenu de la dataset kitti
YOUR_DATASET_FOLDER/
├── sequences/
│ ├── 00/ # Séquence 00
│ │ ├── image_0/ # Images de la caméra gauche
│ │ │ ├── 000000.png
│ │ │ ├── 000001.png
│ │ │ └── ...
│ │ ├── image_1/ # Images de la caméra droite
│ │ │ ├── 000000.png
│ │ │ ├── 000001.png
│ │ │ └── ...
│ │ ├── velodyne/ # Données LIDAR
│ │ │ ├── 000000.bin
│ │ │ ├── 000001.bin
│ │ │ └── ...
│ │ ├── imu/ # Données IMU (inertie)
│ │ │ ├── 000000.txt
│ │ │ ├── 000001.txt
│ │ │ └── ...
│ │ ├── gps/ # Données GPS (si utilisées)
│ │ │ ├── 000000.txt
│ │ │ ├── 000001.txt
│ │ │ └── ...
│ │ ├── calib.txt # Fichier de calibration des capteurs
│ │ ├── times.txt # Horodatages des données
│ │ ├── poses.txt # Ground truth des poses (optionnel)
│ │ └── README.txt # Informations sur la séquence
│ ├── 01/ # Séquence 01
│ │ ├── ...
│ └── ... # Autres séquences
├── config/
│ ├── zoe_config00-02.yaml # Fichier de configuration VINS-Fusion adapté à la Zoé
│ ├── camera_calib.yaml # Calibration de la caméra
│ ├── lidar_calib.yaml # Calibration du LIDAR
│ ├── imu_calib.yaml # Calibration de l'IMU
│ ├── gps_calib.yaml # Calibration du GPS
│ └── README.txt # Informations sur les fichiers de configuration
└── README.txt # Documentation générale du dataset
Exigences pour la nouvelle acquisition :
- Respect du RGPD : flou visages et plateaux de voitures
- calibrage du Lidar et de la caméra
- Extraction des données depuis le rosbag selon la bonne configuration