Skip to content
Snippets Groups Projects
Select Git revision
  • main
1 result

git_projet

  • 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.

    alt text

    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

    • Visualisation de la voiture de Kitti: Voiture Kitti Capteurs 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
    • 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 :

    1. lancer le RVIZ
    roslaunch vins vins_rviz.launch
    1. 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

    alt text

    Le code prend deux arguments :

    1. 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

    2. 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 :

    1. 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

    Demo code

    3. Interprétation de code

    1. KITTIOdomTest : caméra et imu.
    2. 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.

    Diagram D evoution du code

    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: Diagram D evoution VINS

    Adaptation à la véhicule Zoé

    SensorsZoe

    SensorsZoe

    • 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