Article 4 sur les LiDAR et leur intégration dans des projets ROS

Intégration d’un LiDAR avec ROS : exemples de projets

Cette entrée a été publiée dans Tutoriels en robotique, et marquée avec , , , , , , , le par .

Consultez les autres articles de notre série “Technologie LiDAR”

Quelles applications pour les LiDAR ?

Intégration d’un LiDAR avec ROS : exemples de projets

Dans cette publication, vous aller apprendre à connecter et intégrer votre LiDAR à votre PC ou carte embarquée en utilisant le middleware ROS sur Ubuntu. La fusion de donnée, très utilisée en robotique mobile sera également abordée en fin de publication.

ROS est nouveau pour vous ?

The Robot Operating System (ROS) est un ensemble de bibliothèques de logiciels et d’outils open source, qui vous aident à créer des applications robotiques. Des pilotes aux algorithmes de pointe, en passant par les puissants outils de développement, vous aurez très probablement besoin de ROS sur votre prochain projet robotique.

Si vous avez besoin de télécharger Ubuntu, installez la dernière version (Ubuntu 18.04). Vous devez ensuite télécharger la distribution ROS correspondant à votre version d’Ubuntu, pour Ubuntu 18.04 vous devez installer ROS Melodic.

Une fois que votre ordinateur fonctionne sous Ubuntu et que ROS est installé, nous vous recommandons passer un peu de temps sur ces tutoriels ROS pour vous familiariser avec ce middleware (niveaux débutant et intermédiaire disponibles).

Recevoir les données de votre LiDAR

Pour connecter le LiDAR à votre PC, vous devez l’alimenter. En fonction de votre appareil, ce sera du 5VDC ou du 12/24VDC, par exemple.

Une tension d’alimentation de 5VDC est généralement supportée par un connecteur USB branché directement sur votre PC. Vous n’avez qu’à le câbler et le LiDAR sera prêt à tourner.

Pour une tension d’alimentation plus élevée, vous avez besoin d’une alimentation externe (générateur basse fréquence) ou d’un transformateur/convertisseur vers l’alimentation secteur ou une batterie.

Une fois que vous avez connecté votre LiDAR à son alimentation, il faut connecter le transmetteur de données.
Il peut s’agir du même câble USB que pour l’alimentation, d’un autre câble USB, d’un câble Rx/Tx, UART ou d’un câble Ethernet.
Les câbles et adaptateurs nécessaires sont généralement vendus avec les LiDAR.

Lire les données de votre LiDAR

Une fois que votre LiDAR est prêt à être utilisé, vous devez vérifier si vous avez les permissions sur le port d’entrée de données.

Après avoir connecté le transmetteur de données sur un port USB (ou port (Ethernet), taper cette ligne de commande pour vérifier les permissions :

$ ls -l /dev/tty

Vous devriez voir un nouvel élément : ACMX, USBX ou ETHX, X étant un chiffre égal ou supérieur à zéro (en fonction du nombre de ports déjà utilisés).

Votre sortie doit être sous la forme :

$ crw-rw-XX- 1 root dialout 166, 0 2016-09-12 14:18 /dev/ttyACM0

ou

$ crw-rw-XX- 1 root dialout 166, 0 2016-09-12 14:18 /dev/ttyUSB0

  • Si XX est rw, le laser est configuré correctement.
  • Si XX est –, alors le laser n’est pas configuré correctement et vous devez changer les permissions comme suit :

$ sudo chmod a+rw /dev/ttyACM0

ou

$ sudo chmod a+rw /dev/ttyUSB0

Une fois les permissions configurées, vous devez télécharger le package ROS correspondant à votre constructeur LiDAR :

Pour télécharger le package LiDAR depuis GitHub dans le dossier src de votre environnement de travail ROS, les commandes sont :

$ cd ~/your_workspace/src

$ git clone

(voir liste des GitHub des différents fabricants ci-dessus)

Notez bien le nom du package que vous venez de télécharger.

$ cd ..

$ catkin_make

$ source devel/setup.bash

Allez dans le dossier launch et trouvez le fichier launch qui correspond à votre version de LiDAR et lancez-le :

$ roslaunch votre_package votre_launch.launch

Pour vérifier que le LiDAR est en cours de publication sur le topic /scan (le nom du topic est indiqué dans le fichier launch), utilisez :

$ rostopic list

Tous les topics actifs seront listés, vérifiez que /scan est présent. Ensuite, vérifiez les messages en cours de publication dans /scan en utilisant :

$ rostopic echo /scan

Si tout s’est bien passé, votre LiDAR est en train de diffuser ses mesures en continu avec succès. Il est possible de visualiser les données sur Rviz avec la commande ci-dessous. Plus de détails dans ce tutoriel : apprenez à lire les données de votre LiDAR avec ROS. Si vous voulez aller plus loin sur RViz, nous vous recommandons ce tutoriel.

$ rosrun rviz rviz

Cliquez sur Ajouter, puis sélectionnez le topic /scan. Si vous avez une erreur liée à tf, vous devez entrer manuellement votre fix frame comme « /votre_LiDAR_frame_id » dans la zone de texte à côté du fix frame sur le côté gauche de l’interface graphique.

Le résultat final devrait être une cartographie horizontale des distances par rapport au LiDAR dans un système de coordonnées rectangulaires.

Intégration d’un LiDAR avec ROS : exemples de projets

Pour intégrer le LiDAR avec un autre package, il vous suffit d’appeler ce launch depuis votre launch principal.

Certains LiDAR nécessitent des étapes de configuration supplémentaires. Veuillez consulter le fichier readme du package du constructeur pour suivre ces étapes.

Sur ROS, tous les LiDAR 2D publieront des données sur le topic de type LaserScan. Pour les LiDAR 2D/3D, ce sera sur le topic de type PointCloud. Il existe de très nombreux exemples de code pour vous aider à ensuite traiter ces données.

Comment implémenter du traitement de données de LiDAR ?

1) Cartographie

LeGO-LOAM

LeGO-LOAM est spécialement optimisé pour un VLP-16 ou un LiDAR Robosense placé horizontalement sur un véhicule terrestre. L’appareil suppose qu’il y a toujours un plan terrestre dans le scan.
L’UGV que nous utilisons dans beaucoup de nos expérimentations est le Jackal de Clearpath Robotics. Il dispose d’une IMU intégrée.

Ce repository contient le code d’un système d’odométrie et de cartographie LiDAR léger et optimisé au sol (LeGO-LOAM) pour les UGV compatibles ROS.

Le système prend en entrée les nuages de points d’un Velodyne VLP-16 LiDAR (placé horizontalement) et les données IMU en option. Pour utiliser un autre LiDAR 3D, comme le RS-LIDAR-16 de Robosense, vous devez alors changer les paramètres de configuration.

Il fournit une estimation de pose 6D en temps réel.

Une démonstration du système peut être trouvée ici.

Il faut avoir installé :

  • ROS (testé avec Indigo et Kinetic)
  • GTSAM (bibliothèque Georgia Tech Smoothing and Mapping, 4.0.0.0-alpha2)

    A-LOAM

    A-LOAM est une implémentation avancée du LOAM (J. Zhang and S. Singh. LOAM: LiDAR Odometry and Mapping in Real-time), qui utilise Eigen et Ceres Solver pour simplifier la structure du code.

    Ce code est modifié à partir de LOAM et LOAM_NOTED. Ce code est propre et simple, sans dérivation mathématique compliquée ni opérations redondantes.

    C’est un bon matériel d’apprentissage pour les débutants en SLAM.

    Il faut avoir installé :

    3D LIDAR-based Graph SLAM

    hdl_graph_slam est un package ROS open source pour 6DOF SLAM en temps réel utilisant un LIDAR 3D. Il est basé sur le SLAM 3D Graph SLAM avec une estimation de l’odométrie basée sur l’appariement des balayages CND et la détection des boucles.

    Il prend également en charge plusieurs contraintes graphiques, telles que le GPS, l’accélération IMU (vecteur gravité), l’orientation IMU (capteur magnétique) et le plan du sol (détecté dans un nuage de points).

    Nous avons testé ce package avec les capteurs Velodyne (HDL32e, VLP16) et Robosense (16 canaux) dans des environnements intérieurs et extérieurs.

    Spin Hokuyo

    Ce repository contient les codes qui permettent de contrôler un servomoteur Dynamixel et un LiDAR Hokuyo 2D pour créer un nuage de points 3D qui peut être visible dans RViz.

    Ce nuage de points peut ensuite être utilisé pour créer une octomap.

    Page Wiki: http://wiki.ros.org/spin_hokuyo

    Autre projet similaire avec le LiDAR Hokuyo UTM-30LX : cabine photo 3D.

    2) Calibration

    Package ROS pour calibrer un LiDAR et une caméra

    Ce package ROS permet de calibrer un LiDAR Velodyne avec une caméra (fonctionne aussi bien en monoculaire qu’en stéréo). Plus précisément, la caméra Point Gray Blackfly et la caméra ZED ont été étalonnées avec succès par rapport au Velodyne VLP-16 en utilisant l’étalonnage LiDAR_camera_calibration.

    Comme le VLP-16 n’offre que 16 faisceaux, nous pensons que les modèles supérieurs du Velodyne fonctionneront tout aussi bien avec cet ensemble. Nous montrons la précision du pipeline proposé en fusionnant des nuages de points, avec une perfection quasi parfaite, à partir de plusieurs caméras gardées dans différentes positions.

    Le package implémente une rotation et une translation qui transforment tous les points du cadre LiDAR en cadre (monoculaire) de la caméra.

    Le paquet utilise aruco_ros et un aruco_mapping légèrement modifié comme dépendances, les deux étant disponibles dans le dossier dependencies de ce tutoriel.

    La fonction LiDAR_camera_calibration/pointcloud_fusion fournit un script pour fusionner les nuages de points obtenus à partir de deux caméras stéréo. Tous deux ont été étalonnés à l’aide d’un étalonnage LiDAR et iDAR_camera_calibration.

    Il est possible de lire la publication qui a suivi ce projet ici.

    3) Tracking

    Multiple object tracking with LiDAR

    Le package ROS PCL pour Détecter/Catégoriser –> Tracker –> Classifier les objets statiques et dynamiques en temps réel à partir des scans LIDAR implémentés en C++.

    Caractéristiques :

    • Traitement des nuages de points basé sur l’arborescence K-D pour la détection de caractéristiques d’objets à partir de nuages de points
    • Regroupement non supervisé de k-means basé sur les caractéristiques détectées et le raffinement à l’aide de RANSAC
    • Suivi stable (identification d’objet et association de données) avec un ensemble de filtres Kalman
    • Robuste par rapport à la mise en grappe des moyennes k avec suivi du flux moyen

    4) Fusion

    Extended Kalman Filter Project Starter Code

    Dans ce projet, vous utiliserez un filtre Kalman pour estimer l’état d’un objet en mouvement à l’aide de mesures radar et LiDAR bruyantes.

    Pour réussir le projet, il faut obtenir des valeurs de REQM qui sont inférieures à la tolérance indiquée dans la rubrique du projet.

    Ce projet nécessite d’avoir installé le simulateur Term 2.

    Ce dépôt comprend deux fichiers qui peuvent être utilisés pour configurer et installer uWebSocketIO pour les systèmes Linux ou Mac. Pour Windows, vous pouvez utiliser Docker, VMware ou même Windows 10 Bash sur Ubuntu pour installer uWebSocketIO.

    Fusion EKF

     

Il s’agit d’une implémentation étendue du filtre de Kalman pour la fusion des mesures de LiDAR et de capteurs radar. Un filtre de Kalman peut être utilisé partout où vous avez des informations incertaines sur un système dynamique, et vous voulez faire une estimation éclairée sur ce que le système va faire ensuite.

Dans ce cas, nous avons deux capteurs ‘bruyant’ :

  • Un capteur LiDAR qui mesure notre position en coordonnées cartésiennes (x, y)
  • Un capteur radar qui mesure notre position et notre vitesse en coordonnées polaires (rho, phi, drho)Nous voulons prédire notre position et à quelle vitesse nous allons à tout moment :
  • Essentiellement : la position et la vitesse du système en coordonnées cartésiennes : (x, y, vx, vy)
  • Notez que nous supposons un modèle de vitesse constante (CV) pour ce système particulierCe filtre Kalman étendu fait exactement cela.

    Fusion UKF

    Comparé au filtre de Kalman étendu avec un modèle à vitesse constante, la RMSE devrait être plus faible pour le filtre de Kalman unscented, en particulier pour la vitesse.

    Le modèle CTRV est plus précis qu’un modèle à vitesse constante. Et UKF est également connu pour mieux gérer les équations non linéaires que EKF.

    Robotique mobile

    L’utilisation d’un LiDAR n’est parfois pas suffisante pour certaines applications. En effet, d’autres données doivent être recueillies pour en assurer l’exactitude. Au fur et à mesure que le capteur se déplace (car placé sur un robot mobile), l’emplacement et l’orientation de l’instrument doivent être inclus pour déterminer la position de l’impulsion laser au moment de l’envoi et le moment du retour.

    Ces informations supplémentaires sont cruciales pour l’intégrité des données. Sont souvent ajoutés en complément :

     

Pour obtenir des valeurs précises, vous devez fusionner ces données et conserver celles qui sont les plus fiables en fonction de l’environnement et de la situation. Cette étape est la fusion de données (data fusion). Attention, dans certains cas, certains capteurs fournissent le même type de données mais avec des valeurs différentes en raison de leur précision et de leur erreur. Vous devez donc trouver la valeur réelle en fonction des différentes valeurs des capteurs.

La fusion de données est une partie cruciale. Fusionner toutes ces données permettrait au robot de se situer dans son environnement connu. Plus la précision de vos capteurs et de votre logiciel de navigation est élevée, plus votre position d’estimation sera élevée.

Implémenter SLAM en robotique mobile

Les algorithmes SLAM les plus connus sont :

L’image ci-dessous est l’architecture de la navigation stack de ROS qui est une implémentation de SLAM :

Architecture de la navigation stack de ROS

Les capteurs fournissent les valeurs d’entrée : sources des capteurs et de l’odométrie. Sur la base de ces deux sources de données, l’algorithme calcule la transformation du capteur, l’estimation de la pose (amcl) et la cartographie de l’environnement (map_server). Avec toutes ces données, le planificateur de trajet peut prendre des décisions.

Les capteurs sont donc essentiels et le LiDAR est le meilleur capteur pour obtenir des données LaserScan ou PointCloud.

Pour plus de précisions, vous pouvez consulter cette introduction à la navigation avec ROS.

Consultez les autres articles de notre série “Technologie LiDAR”

Quelles applications pour les LiDAR ?

Consultez notre section LiDAR pour la recherche et le supérieur ou contactez-nous pour avoir plus d’informations ou obtenir un devis.

Les marques de LiDAR distribuées par Génération Robots

LiDARs Hokuyo LiDARs Slamtec LiDARs YDLidar
LiDARs Robosense LiDARs TeraRanger LiDARs SICK