Πίνακας περιεχομένων:

RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 βήματα
RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 βήματα

Βίντεο: RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 βήματα

Βίντεο: RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 βήματα
Βίντεο: RGB-D SLAM With Kinect on Raspberry Pi 4 ROS Melodic 2024, Νοέμβριος
Anonim
Image
Image

Πέρυσι έγραψα ένα άρθρο σχετικά με τη δημιουργία και εγκατάσταση του ROS Melodic σε νέο (εκείνη την εποχή) Raspberry Pi με Debian Buster OS. Το άρθρο έχει λάβει μεγάλη προσοχή τόσο εδώ στο Instructables όσο και σε άλλες πλατφόρμες. Είμαι πολύ χαρούμενος που βοήθησα τόσους πολλούς ανθρώπους να εγκαταστήσουν επιτυχώς το ROS στο Raspberry Pi. Στο συνοδευτικό βίντεο επίσης παρουσίασα εν συντομία τη λήψη βάθους εικόνας από το Kinect 360. Αργότερα, πολλοί άνθρωποι επικοινώνησαν μαζί μου στο LinkedIn και με ρώτησαν πώς κατάφερα να χρησιμοποιήσω το Kinect με το Raspberry Pi. Έμεινα έκπληκτος στην ερώτηση, καθώς η διαδικασία προετοιμασίας του Kinect μου πήρε περίπου 3-4 ώρες και δεν φαινόταν εξαιρετικά περίπλοκη. Μοιράστηκα τα αρχεία μου.bash_history με όλους τους ανθρώπους που με ρωτούσαν για το ζήτημα και τον Απρίλιο βρήκα επιτέλους τον χρόνο να γράψω ένα άρθρο σχετικά με τον τρόπο εγκατάστασης προγραμμάτων οδήγησης Kinect και εκτέλεσης RGB-D SLAM με RTAB-MAP ROS. Εβδομάδα αϋπνιών μετά την έναρξη της συγγραφής του άρθρου τώρα καταλαβαίνω γιατί τόσοι πολλοί μου έκαναν αυτήν την ερώτηση:)

Θα ξεκινήσω με μια σύντομη εξήγηση σχετικά με το ποιες προσεγγίσεις λειτούργησαν και ποιες όχι. Στη συνέχεια, θα εξηγήσω πώς να εγκαταστήσετε προγράμματα οδήγησης Kinect για χρήση με το ROS Melodic και τέλος πώς να ρυθμίσετε το μηχάνημά σας για RGB-D SLAM με RTAB-MAP ROS.

Βήμα 1: Τι λειτούργησε και τι όχι

Υπάρχουν μερικά διαθέσιμα προγράμματα οδήγησης για το Kinect στο Raspberry Pi - από αυτά τα δύο υποστηρίζονται από ROS.

Προγράμματα οδήγησης OpenNI - πακέτο openni_camera για ROS

προγράμματα οδήγησης libfreenect - πακέτο freenect_stack για ROS

Αν κοιτάξετε τα αντίστοιχα αποθετήρια GitHub, μπορείτε να διαπιστώσετε ότι το πρόγραμμα οδήγησης OpenNI ενημερώθηκε τελευταία φορά πριν από χρόνια και στην πράξη είναι EOL για μεγάλο χρονικό διάστημα. Το ibfreekinect από την άλλη ενημερώνεται έγκαιρα. Το ίδιο και για τα αντίστοιχα πακέτα ROS, το freenect_stack κυκλοφόρησε για μελωδικό ROS, ενώ η τελευταία διανομή openni_camera που έχει αναφέρει είναι η Fuerte…

Είναι δυνατή η μεταγλώττιση και εγκατάσταση του προγράμματος οδήγησης OpenNI και του πακέτου openni_camera στο Raspberry Pi για ROS Melodic, αν και δεν λειτούργησε για μένα. Για να το κάνετε αυτό ακολουθήστε αυτόν τον οδηγό, τα βήματα 1, 2, 3, στα βήματα 2 και 3 αφαιρέστε τη σημαία "-mfloat-abi = softfp" από το αρχείο Platform/Linux/Build/Common/Platform. ARM (ανά συμβουλή σχετικά με αυτό Ζήτημα Github). Στη συνέχεια, κλωνοποιήστε το πακέτο openni_camera στον χώρο εργασίας σας και κάντε μεταγλώττιση με το catkin_make. Δεν λειτούργησε για μένα όμως, το σφάλμα δημιουργίας γεννήτρια βάθους απέτυχε. Αιτία: Η διεπαφή USB δεν υποστηρίζεται!

Η χρήση του libfreenect και του freenect_stack απέδωσε επιτυχία στο τέλος, αλλά υπήρχαν αρκετά προβλήματα προς επίλυση και η λύση ήταν λίγο χακαρή, αν και λειτούργησε πολύ σταθερά (1 ώρα + συνέχιση λειτουργίας).

Βήμα 2: Εγκατάσταση προγραμμάτων οδήγησης Freenect και Freenect_stack

Εγκατάσταση προγραμμάτων οδήγησης Freenect και Freenect_stack
Εγκατάσταση προγραμμάτων οδήγησης Freenect και Freenect_stack

Υποθέτω ότι χρησιμοποιείτε την εικόνα ROS Melodic Desktop μου από αυτό το άρθρο. Εάν θέλετε να κάνετε εγκατάσταση σε διαφορετικό περιβάλλον, για παράδειγμα εικόνα ros_comm ή στο Ubuntu για Raspberry Pi, βεβαιωθείτε ότι έχετε αρκετές γνώσεις σχετικά με το ROS για την επίλυση προβλημάτων που ενδέχεται να προκύψουν από αυτήν τη διαφορά.

Ας ξεκινήσουμε με τη δημιουργία προγραμμάτων οδήγησης libfreenect από την πηγή, αφού η προεγκατεστημένη έκδοση αποθετηρίου apt-get είναι πολύ ξεπερασμένη.

sudo apt-get ενημέρωση

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

git clone

cd libfreenect

mkdir build && cd build

cmake -L..

φτιαχνω, κανω

sudo make install

Ας ελπίσουμε ότι η διαδικασία κατασκευής θα είναι χωρίς προβλήματα και γεμάτη πράσινα φιλικά μηνύματα. Αφού εγκαταστήσετε το πρόγραμμα οδήγησης libfreenect, το επόμενο βήμα είναι να εγκαταστήσετε το πακέτο freenect_stack για ROS. Υπάρχουν αρκετά άλλα πακέτα από τα οποία εξαρτάται, θα πρέπει να τα κλωνοποιήσουμε και να τα δημιουργήσουμε με το catkin_make όλα μαζί. Πριν ξεκινήσετε, βεβαιωθείτε ότι ο χώρος εργασίας σας είναι κατάλληλα διαμορφωμένος και προμηθευμένος!

Από το φάκελο src του χώρου εργασίας catkin:

git clone

git clone

git clone

git clone

git clone

git clone

Ουφ, αυτό ήταν πολύ κλωνοποίηση.

LATER EDIT: Όπως επεσήμανε ένας από τους αναγνώστες μου, το αποθετήριο vision_opencv πρέπει να ρυθμιστεί σε μελωδικό κλάδο. Για αυτό το cd στο src/vision_opencv και εκτελέστε

μελωδικό git checkout

Στη συνέχεια, επιστρέψτε στον φάκελο του χώρου εργασίας catkin. Για να ελέγξουμε εάν εξαρτώμενοι για όλα τα πακέτα που υπάρχουν, εκτελέστε αυτήν την εντολή:

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

Εάν κλωνοποιήσατε με επιτυχία όλα τα απαραίτητα πακέτα, θα ζητήσει τη λήψη του libfreekinect με το apt-get. Απαντήστε όχι, αφού το έχουμε ήδη εγκαταστήσει από την πηγή.

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

catkin_make -j2

Timeρα για τσάι;) ή όποιο είναι το αγαπημένο σας ποτό.

Αφού ολοκληρωθεί η διαδικασία μεταγλώττισης, μπορείτε να δοκιμάσετε να ξεκινήσετε τη στοίβα kinect και να ελέγξετε αν εξάγει σωστά το βάθος και τις έγχρωμες εικόνες. Χρησιμοποιώ το Raspberry Pi ακέφαλο, οπότε πρέπει να τρέξω το RVIZ στον επιτραπέζιο υπολογιστή μου.

Στο Raspberry Pi do (Αλλάξτε τη διεύθυνση IP σε διεύθυνση IP του Raspberry Pi!):

εξαγωγή ROS_MASTER_URI = https://192.168.0.108: 11311

εξαγωγή ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch deep_registration: = true

Θα δείτε την έξοδο όπως στο Στιγμιότυπο οθόνης 1. "Διακοπή ροής συσκευής RGB και Depth stream flush." υποδεικνύει ότι το Kinect είναι έτοιμο, αλλά τίποτα δεν έχει εγγραφεί ακόμα στα θέματα του.

Στον επιτραπέζιο υπολογιστή σας με εγκατεστημένο το ROS Melodic κάντε:

εξαγωγή ROS_MASTER_URI = https://192.168.0.108: 11311

εξαγωγή ROS_IP = [your-desktop-computer-ip] rviz

Τώρα θα πρέπει να μπορείτε να βλέπετε ροές εικόνας RGB και Depth σε RVIZ όπως στο Screenshot 2 παραπάνω … αλλά όχι ταυτόχρονα.

Εντάξει, εδώ ξεκινούν τα χακαρισμένα πράγματα. Πέρασα 3 ημέρες δοκιμάζοντας διαφορετικούς οδηγούς και προσεγγίσεις και τίποτα δεν λειτούργησε - μόλις προσπαθούσα να έχω πρόσβαση σε δύο ροές ταυτόχρονα, το Kinect θα ξεκινούσε το χρονικό όριο όπως μπορείτε να δείτε στο Screenshot 3. Δοκίμασα τα πάντα: καλύτερη παροχή ρεύματος, παλαιότερες δεσμεύσεις libfreenect και freenect_stack, διακοπή usb_autosuspend, έγχυση χλωρίνης σε θύρες USB (εντάξει, όχι η τελευταία! μην το κάνετε, είναι αστείο και δεν πρέπει να συνιστά τεχνική συμβουλή:)). Στη συνέχεια, σε ένα από τα τεύχη του Github είδα έναν λογαριασμό ενός ατόμου που είπε ότι το Kinect ήταν ασταθές, μέχρι να "φορτώσει το δίαυλο USB" συνδέοντας το WiFi dongle. Το δοκίμασα και λειτούργησε. Από τη μία χαίρομαι που λειτούργησε. Από την άλλη πλευρά, κάποιος πρέπει πραγματικά να το διορθώσει. Λοιπόν, εν τω μεταξύ (κάπως) το διορθώσαμε, ας προχωρήσουμε στο επόμενο βήμα.

Βήμα 3: Εγκατάσταση αυτόνομου RTAB MAP

Εγκατάσταση αυτόνομου RTAB MAP
Εγκατάσταση αυτόνομου RTAB MAP

Πρώτα έχουμε μια δέσμη εξαρτήσεων που πρέπει να εγκατασταθούν:

Παρόλο που υπάρχει ένα προσχεδιασμένο πακέτο armhf διαθέσιμο για PCL, θα χρειαστεί να το μεταγλωττίσουμε από την πηγή λόγω αυτού του ζητήματος. Συμβουλευτείτε το αποθετήριο PCL GitHub για να δείτε πώς να το μεταγλωττίσετε από την πηγή.

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

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

Τώρα ας κλωνοποιήσουμε το rtab χάρτη αυτόνομου πακέτου git αποθήκη στον αρχικό μας φάκελο και να το δημιουργήσουμε. Χρησιμοποίησα την τελευταία έκδοση (0.18.0).

git clone

cd rtabmap/build

cmake..

κάνω -j2

sudo make install

sudo ldconfig rtabmap

Τώρα, όταν έχουμε συγκεντρώσει αυτόνομο RTAB MAP, μπορούμε να προχωρήσουμε στο τελευταίο βήμα - τη σύνταξη και εγκατάσταση περιτυλίγματος ROS για RTAB MAP, rtabmap_ros.

Βήμα 4: Εγκατάσταση του Rtabmap_ros

Εγκατάσταση του Rtabmap_ros
Εγκατάσταση του Rtabmap_ros

Αν φτάσατε τόσο μακριά, πιθανότατα γνωρίζετε το τρυπάνι:) Κλωνοποιήστε το αποθετήριο rtabmap_ros στον φάκελο src του χώρου εργασίας catkin. (Εκτέλεση επόμενης εντολής από το φάκελο catrink src workspace!)

git clone

Θα χρειαστούμε επίσης αυτά τα πακέτα ROS, από τα οποία το rtabmap_ros εξαρτάται:

git clone

git clone

git clone

git clone

git clone

Πριν ξεκινήσετε τη μεταγλώττιση, μπορείτε να βεβαιωθείτε ότι δεν σας λείπουν εξαρτήσεις με την ακόλουθη εντολή:

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

Εγκαταστήστε περισσότερες εξαρτήσεις από το ap-get (αυτές δεν θα διακόψουν τη σύνδεση, αλλά θα προκαλέσουν σφάλμα κατά τη μεταγλώττιση)

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

Στη συνέχεια, μεταβείτε στον φάκελο χώρου εργασίας catkin και ξεκινήστε τη σύνταξη:

cd..

catkin_make -j2

Ελπίζω να μην βάλατε το αγαπημένο σας ποτό συλλογής πουθενά πολύ μακριά. Αφού ολοκληρωθεί η μεταγλώττιση είμαστε έτοιμοι να κάνουμε τη χαρτογράφηση!

Βήμα 5: Εμφάνιση ώρας

Εμφάνιση ώρας
Εμφάνιση ώρας
Εμφάνιση ώρας
Εμφάνιση ώρας

Κάντε αυτό το παραπλανητικό κόλπο προσθέτοντας κάτι σαν WiFi ή dongle Bluetooth σε μια θύρα USB - χρησιμοποιούσα 2 θύρες USB 2.0, η μία για Kinect και η άλλη για dongle WiFi.

Στο Raspberry Pi do (Αλλάξτε τη διεύθυνση IP σε διεύθυνση IP του Raspberry Pi!): 1ο τερματικό:

εξαγωγή ROS_MASTER_URI = https://192.168.0.108: 11311

εξαγωγή ROS_IP = 192.168.0.108

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

2ος τερματικός σταθμός:

roslaunch rtabmap_ros rgbd_mapping.launch rtabmap_args: = "-delete_db_on_start --Vis/MaxFeatures 500 --Mem/ImagePreDecimation 2 --Mem/ImagePostDecimation 2 --Kp/DetectorStrategy 6 --Odomrt2Odom/MaxSize" 1000Size: = ψευδές

Θα δείτε την έξοδο όπως στο Στιγμιότυπο οθόνης 1. "Διακοπή ροής συσκευής RGB και ροή βάθους". υποδεικνύει ότι το Kinect είναι έτοιμο, αλλά τίποτα δεν έχει εγγραφεί ακόμη στα θέματα του. Στο δεύτερο τερματικό θα πρέπει να βλέπετε μηνύματα σχετικά με την ποιότητα της οσμής. Εάν μετακινήσετε το Kinect πολύ γρήγορα, η ποιότητα odom θα πάει στο 0 και θα χρειαστεί να μετακινηθείτε σε προηγούμενη τοποθεσία ή να ξεκινήσετε από καθαρή βάση δεδομένων.

Στον επιτραπέζιο υπολογιστή σας με εγκατεστημένο το πακέτο ROS Melodic και rtab_map (σας συνιστώ να χρησιμοποιήσετε τον υπολογιστή Ubuntu για αυτό, δεδομένου ότι είναι διαθέσιμα πακέτα για αρχιτεκτονική amd64):

εξαγωγή ROS_MASTER_URI = https://192.168.0.108: 11311

εξαγωγή ROS_IP = [your-desktop-computer-ip]

rviz

Προσθέστε τις οθόνες MapGraph και MapCloud στο rviz και επιλέξτε τα αντίστοιχα θέματα που προέρχονται από το rtab_map. Λοιπόν, αυτό είναι, γλυκιά γεύση νίκης! Προχωρήστε και κάντε λίγη χαρτογράφηση:)

Βήμα 6: Αναφορές

Κατά τη συγγραφή αυτού του άρθρου υπήρχαν αρκετοί πόροι που συμβουλεύτηκα, κυρίως φόρουμ και θέματα GitHub. Θα τους αφήσω εδώ.

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

Προσθέστε με στο LinkedIn αν έχετε οποιεσδήποτε ερωτήσεις και εγγραφείτε στο κανάλι μου στο YouTube για να λαμβάνετε ειδοποιήσεις για πιο ενδιαφέροντα έργα που περιλαμβάνουν μηχανική εκμάθηση και ρομποτική.

Συνιστάται: