Capteurs 3D
Ce document sert d’introduction à ce qu’on peut faire avec des capteurs 3D.
Révisions
Auteur: Pierre-Yves
Date : 20 février 2018
Idiot-proofé par : _____
Contexte
Présentement, il y a 4 caméras 3D sur le quadricoptère (orientées dans 4 directions différentes), soit 3 Intel Realsense R200 et 1 Intel Realsense ZR300. Pour utiliser ces caméras, on utilise ce driver intégré dans ROS. Un autre capteur disponible au local est le LIDAR Hokuyo qui permet d’obtenir un nuage de points en 2 dimensions.
Comment travailler avec les capteurs 3D?
- Vous pouvez connecter une caméra à votre ordinateur et lancer un des launch files correspondant dans le package
realsense_rosmentionné précédemment. - Vous pouvez utiliser un enregistrement (
rosbag) comme expliqué à la section suivante. - Vous pouvez aussi utiliser la simulation Gazebo qui permet de simuler les capteurs. Il est possible d’ajouter des objets dans la scène ou carrément les obstacles de la compétition.
Utilisation d’enregistrements
Pour commencer à prototyper, il est utile de commencer à travailler avec des jeux de données préenregistrés avant de travailler directement avec les caméras. Dans ROS, on enregistre des données dans des rosbag.
Un rosbag avec données de profondeur est mis à votre disposition :
La façon la plus simple d’utiliser un rosbag est par la ligne de commande. Ce lien présente les différentes commandes liées aux rosbags. La commande play vous sera la plus utile. N’oubliez pas de lancer roscore dans un autre terminal pour être en mesure de jouer les rosbags.
Outils de diagnostique
Avant de commencer à coder, il faut analyser les données contenues dans le rosbag. Compte tenu que les enregistrements ci-dessus sont principalement des flux d’images, l’outil rqt_image_view est très utile. Aussi, l’outil rostopic est essentiel pour analyser les différents flux de données. L’outil rqt_graph permet quant à lui d’avoir une vue d’ensemble de ce qui roule actuellement. Toutefois, l’outil privilégié pour visualizer les nuages de points est rviz. Notez qu’un nuage de point a le type sensor_msgs/PointCloud2 dans ROS.
Pour utiliser rviz, procéder comme suit:
- Lancer le driver de la caméra, l’enregistrement ou la simulation.
- Lancer
rviz - Cliquer sur
Adden bas du menu de gauche. - Sélectionner l’onglet
By topic. - Double-cliquer sur le topic du nuage de points voulu (le symbole devrait être un petit nuage de points bleus).
- En haut du menu de gauche, sous
Global Options, cliquer sur la flèche à droite du nom duFixed Frame(ex.map) pour faire apparaître un menu déroulant. - Choisissez un frame relié à votre nuage de points (ex. celui spécifié dans le champ header/frame_id de sensor_msgs/PointCloud2). Si vous ne trouvez pas, essayez-en plusieurs jusqu’à voir le nuage de points sur la vue centrale de
rviz. L’outilrvizoffre beaucoup de possibilités intéressantes et il vous est conseillé d’explorer son utilisation et de l’apprivoiser graduellement.
Que puis-je faire avec ces données?
Actuellement, le but premier de ces capteurs est l’évitement d’obstacles. Néanmoins, il serait possible de les utiliser pour bien d’autres choses:
- Estimer l’altitude du quadricoptère.
- Détecter des objets.
- Estimer la distance avec un humain ou avec un autre drone.
- etc.
Comment est-ce que je peux traiter des nuages de points?
Pour manipuler les nuages de points, le standard dans ROS est d’utiliser la librairie PCL.
Il est aussi possible de s’inspirer de traitements déjà fait dans d’autres packages ROS. Notamment, un traitement très intéressant pour identifier le sol est fait dans le package rtab-map. Ce traitement est fait dans le nodelet obstacles_detection qui retire le sol du nuage de point en retirant les points dont la normale pointe dans l’axe Z. Le code du nodelet est ici , la fonction pour filtrer le sol est ici et un exemple pour lancer ce nodelet est ici.
Aussi, étant donné qu’on utilise des produits Intel il est intéressant de garder à l’oeil les outils qu’ils mettent à notre disposition. Des exemples d’utilisation très intéressants sont fournis dans ce repo.