Table des matières:

SLAM RGB-D avec Kinect sur Raspberry Pi 4 [Buster] ROS mélodique : 6 étapes
SLAM RGB-D avec Kinect sur Raspberry Pi 4 [Buster] ROS mélodique : 6 étapes

Vidéo: SLAM RGB-D avec Kinect sur Raspberry Pi 4 [Buster] ROS mélodique : 6 étapes

Vidéo: SLAM RGB-D avec Kinect sur Raspberry Pi 4 [Buster] ROS mélodique : 6 étapes
Vidéo: RGB-D SLAM с Kinect на Raspberry Pi 4 ROS Melodic 2024, Juillet
Anonim
Image
Image

L'année dernière, j'ai écrit un article sur la construction et l'installation de ROS Melodic sur le nouveau (à l'époque) Raspberry Pi avec Debian Buster OS. L'article a reçu beaucoup d'attention à la fois ici sur Instructables et sur d'autres plateformes. Je suis très heureux d'avoir aidé tant de personnes à installer avec succès ROS sur Raspberry Pi. Dans la vidéo d'accompagnement, j'ai également brièvement démontré l'obtention d'une image de profondeur à partir de Kinect 360. Plus tard, de nombreuses personnes m'ont contacté sur LinkedIn et m'ont demandé comment j'avais réussi à utiliser Kinect avec Raspberry Pi. J'ai été un peu surpris par la question, car le processus de préparation de Kinect à ce moment-là m'a pris environ 3-4 heures et ne semblait pas extrêmement compliqué. J'ai partagé mes fichiers.bash_history avec toutes les personnes qui me posaient des questions sur le problème et, en avril, j'ai finalement trouvé le temps d'écrire un article sur la façon d'installer les pilotes Kinect et d'effectuer RVB-D SLAM avec RTAB-MAP ROS. Semaine de nuits blanches après avoir commencé à écrire l'article je comprends maintenant pourquoi tant de gens m'ont posé cette question:)

Je vais commencer par une brève explication sur les approches qui ont fonctionné et celles qui n'ont pas fonctionné. Ensuite, j'expliquerai comment installer les pilotes Kinect pour une utilisation avec ROS Melodic et enfin comment configurer votre machine pour RGB-D SLAM avec RTAB-MAP ROS.

Étape 1: ce qui a fonctionné et ce qui n'a pas fonctionné

Il existe quelques pilotes disponibles pour Kinect sur Raspberry Pi - parmi eux, deux sont pris en charge par ROS.

Pilotes OpenNI - package openni_camera pour ROS

pilotes libfreenect - package freenect_stack pour ROS

Si vous regardez leurs référentiels GitHub respectifs, vous pouvez constater que le pilote OpenNI a été mis à jour pour la dernière fois il y a des années et qu'en pratique, il est en fin de vie depuis longtemps. ibfreekinect d'autre part est mis à jour en temps opportun. Idem pour leurs packages ROS respectifs, freenect_stack a été publié pour ROS mélodique, tandis que la dernière distribution openni_camera a répertorié le support pour est Fuerte…

Il est possible de compiler et d'installer le pilote OpenNI et le package openni_camera sur Raspberry Pi pour ROS Melodic, bien que cela n'ait pas fonctionné pour moi. Pour ce faire, suivez ce guide, les étapes 1, 2, 3, à l'étape 2 et 3, supprimez l'indicateur "-mfloat-abi=softfp" du fichier Platform/Linux/Build/Common/Platform. ARM (selon les conseils à ce sujet problème Github). Clonez ensuite le package openni_camera dans votre espace de travail catkin et compilez avec catkin_make. Cela n'a pas fonctionné pour moi, l'erreur de création du générateur de profondeur a échoué. Raison: l'interface USB n'est pas prise en charge !

L'utilisation de libfreenect et freenect_stack a finalement abouti, mais il y avait pas mal de problèmes à résoudre et la solution était un peu bidon, bien que fonctionnant de manière très stable (1 heure + opération continue).

Étape 2: Installation des pilotes Freenect et Freenect_stack

Installation des pilotes Freenect et Freenect_stack
Installation des pilotes Freenect et Freenect_stack

Je suppose que vous utilisez mon image ROS Melodic Desktop de cet article. Si vous souhaitez effectuer une installation dans un environnement différent, par exemple une image ros_comm ou dans Ubuntu pour Raspberry Pi, assurez-vous d'avoir suffisamment de connaissances sur ROS pour résoudre les problèmes pouvant découler de cette différence.

Commençons par créer les pilotes libfreenect à partir des sources, car la version pré-construite du référentiel apt-get est trop obsolète.

sudo apt-get mise à jour

sudo apt-get install libusb-1.0-0-dev

git clone

cd libfreenect

construction de mkdir && construction de cd

cmake -L..

Fabriquer

sudo faire installer

Espérons que le processus de construction se déroulera sans incident et plein de messages écologiques. Après avoir installé le pilote libfreenect, la prochaine chose à faire est d'installer le package freenect_stack pour ROS. Il y a pas mal d'autres packages dont cela dépend, nous devrons les cloner et construire avec catkin_make tous ensemble. Avant de commencer, assurez-vous que votre espace de travail Catkin est correctement configuré et fourni !

À partir du dossier src de votre espace de travail catkin:

git clone

git clone

git clone

git clone

git clone

git clone

Whooh, c'était beaucoup de clonage.

EDIT ULTÉRIEUR: Comme l'a souligné l'un de mes lecteurs, le référentiel vision_opencv doit être défini sur la branche mélodique. Pour ce cd à src/vision_opencv et exécuter

git checkout mélodique

Retournez ensuite dans votre dossier d'espace de travail catkin. Pour vérifier si nous avons des dépendances pour tous les packages en place, exécutez cette commande:

rosdep install --from-paths src --ignore-src

Si vous avez réussi à cloner tous les packages nécessaires, il vous demandera de télécharger libfreekinect avec apt-get. Répondez non, puisque nous l'avons déjà installé à partir des sources.

sudo apt-get install libbullet-dev libharfbuzz-dev libgtk2.0-dev libgtk-3-dev

catkin_make -j2

L'heure du thé;) ou quelle que soit votre boisson préférée.

Une fois le processus de compilation terminé, vous pouvez essayer de lancer la pile kinect et vérifier s'il génère correctement les images de profondeur et de couleur. J'utilise Raspberry Pi sans tête, je dois donc exécuter RVIZ sur mon ordinateur de bureau.

Sur Raspberry Pi faites (changez l'adresse IP en adresse IP de votre Raspberry Pi !):

exporter ROS_MASTER_URI=https://192.168.0.108:11311

exporter ROS_IP=192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration:=true

Vous verrez la sortie comme dans la capture d'écran 1. « Arrêt de l'appareil RVB et vidage du flux de profondeur ». indique que Kinect est prêt, mais rien n'est encore abonné à ses sujets.

Sur votre ordinateur de bureau avec ROS Melodic installé, faites:

exporter ROS_MASTER_URI=https://192.168.0.108:11311

export ROS_IP=[votre-ordinateur-de-bureau-ip] rviz

Vous devriez maintenant pouvoir voir les flux d'images RVB et Profondeur dans RVIZ comme dans la capture d'écran 2 ci-dessus… mais pas en même temps.

D'accord, c'est ici que les trucs hacky commencent. J'ai passé 3 jours à essayer différents pilotes et approches et rien n'a fonctionné - dès que j'essayais d'accéder à deux flux simultanément, le Kinect commençait à expirer comme vous pouvez le voir dans la capture d'écran 3. freenect_stack, arrêt de usb_autosuspend, injection d'eau de Javel sur les ports USB (d'accord, pas le dernier ! ne le fais pas, c'est une blague et ne doit pas constituer un conseil technique:)). Ensuite, dans l'un des problèmes de Github, j'ai vu le récit d'une personne qui a déclaré que son Kinect était instable, jusqu'à ce qu'elle "charge le bus USB" en connectant un dongle WiFi. J'ai essayé ça et ça a marché. D'un côté, je suis content que ça marche. D'un autre côté, quelqu'un devrait vraiment y remédier. Eh bien, en attendant d'avoir (en quelque sorte) corrigé cela, passons à l'étape suivante.

Étape 3: Installation de RTAB MAP autonome

Installation de RTAB MAP autonome
Installation de RTAB MAP autonome

Tout d'abord, nous avons un tas de dépendances à installer:

Bien qu'un package armhf préconstruit soit disponible pour PCL, nous devrons le compiler à partir des sources à cause de ce problème. Consultez le référentiel PCL GitHub pour savoir comment le compiler à partir des sources.

sudo apt-get install libvtk6-dev libvtk6-qt-dev libvtk6-java libvtk6-jni

sudo apt-get install libopencv-dev cmake libopenni2-dev libsqlite3-dev

Clonons maintenant le référentiel git du package autonome rtab map dans notre dossier de départ et construisons-le. J'ai utilisé la dernière version (0.18.0).

git clone

cd rtabmap/construire

cmake..

faire -j2

sudo faire installer

sudo ldconfig rtabmap

Maintenant, lorsque nous avons compilé RTAB MAP autonome, nous pouvons passer à la dernière étape - compiler et installer le wrapper ROS pour RTAB MAP, rtabmap_ros.

Étape 4: Installation de Rtabmap_ros

Installation de Rtabmap_ros
Installation de Rtabmap_ros

Si vous êtes arrivé jusque-là, vous connaissez probablement l'exercice maintenant:) Clonez le référentiel rtabmap_ros dans votre dossier src de l'espace de travail catkin. (Exécutez la commande suivante à partir de votre dossier catkin workspace src !)

git clone

Nous aurons également besoin de ces packages ROS, dont rtabmap_ros dépend:

git clone

git clone

git clone

git clone

git clone

Avant de commencer la compilation, vous pouvez vous assurer de ne manquer aucune dépendance avec la commande suivante:

rosdep install --from-paths src --ignore-src

Installez plus de dépendances depuis ap-get (celles-ci n'interrompront pas la liaison, mais généreront une erreur lors de la compilation)

sudo apt-get install libsdl-image1.2-dev

Ensuite, accédez au dossier de votre espace de travail catkin et commencez à compiler:

cd..

catkin_make -j2

J'espère que vous n'avez pas mis votre boisson de compilation préférée trop loin. Une fois la compilation terminée, nous sommes prêts à faire le mappage !

Étape 5: Afficher l'heure

Afficher l'heure
Afficher l'heure
Afficher l'heure
Afficher l'heure

Faites cette astuce en ajoutant quelque chose comme un dongle WiFi ou Bluetooth à un port USB - j'utilisais 2 ports USB 2.0, un pour Kinect, l'autre pour un dongle WiFi.

Sur Raspberry Pi do (changez l'adresse IP en adresse IP de votre Raspberry Pi !): 1er terminal:

exporter ROS_MASTER_URI=https://192.168.0.108:11311

exporter ROS_IP=192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration:=true data_skip:=2

2ème borne:

roslaunch rtabmap_ros rgbd_mapping.launch rtabmap_args:= --delete_db_on_start --Vis/MaxFeatures 500 --Mem/ImagePreDecimation 2 --Mem/ImagePostDecimation 2 --Kp/DetectorStrategy 6 --OdomF2M/MaxSize1000:=faux

Vous verrez la sortie comme dans la capture d'écran 1. « Arrêt de l'appareil RVB et vidage du flux de profondeur ». indique que Kinect est prêt, mais rien n'est encore abonné à ses sujets. Dans le deuxième terminal, vous devriez voir des messages sur la qualité d'odom. Si vous déplacez Kinect trop rapidement, la qualité d'odom passera à 0 et vous devrez vous déplacer vers un emplacement précédent ou commencer à partir d'une base de données propre.

Sur votre ordinateur de bureau avec les packages ROS Melodic et rtab_map installés (je vous recommande d'utiliser l'ordinateur Ubuntu pour cela, car des packages pré-construits sont disponibles pour l'architecture amd64):

exporter ROS_MASTER_URI=https://192.168.0.108:11311

export ROS_IP=[votre-ordinateur-de-bureau-ip]

rviz

Ajoutez des affichages MapGraph et MapCloud à rviz et choisissez les sujets correspondants provenant de rtab_map. Et bien, ça y est, doux goût de victoire ! Allez-y et faites un peu de cartographie:)

Étape 6: Références

Lors de la rédaction de cet article, j'ai consulté un certain nombre de ressources, principalement des forums et des problèmes GitHub. Je vais les laisser ici.

github.com/OpenKinect/libfreenect/issues/338

www.reddit.com/r/robotics/comments/8d37gy/ros_with_raspberry_pi_and_xbox_360_kinect_question/

github.com/ros-drivers/freenect_stack/issues/48

official-rtab-map-forum.67519.x6.nabble.com/RGB-D-SLAM-example-on-ROS-and-Raspberry-Pi-3-td1250.html

github.com/OpenKinect/libfreenect/issues/524

Ajoutez-moi sur LinkedIn si vous avez des questions et abonnez-vous à ma chaîne YouTube pour être informé des projets les plus intéressants impliquant l'apprentissage automatique et la robotique.

Conseillé: