Spisu treści:

RGB-D SLAM z Kinect na Raspberry Pi 4 [Buster] ROS Melodic: 6 kroków
RGB-D SLAM z Kinect na Raspberry Pi 4 [Buster] ROS Melodic: 6 kroków

Wideo: RGB-D SLAM z Kinect na Raspberry Pi 4 [Buster] ROS Melodic: 6 kroków

Wideo: RGB-D SLAM z Kinect na Raspberry Pi 4 [Buster] ROS Melodic: 6 kroków
Wideo: RGB-D SLAM с Kinect на Raspberry Pi 4 ROS Melodic 2024, Listopad
Anonim
Image
Image

W zeszłym roku napisałem artykuł o budowie i instalacji ROS Melodica na nowym (wówczas) Raspberry Pi z systemem Debian Buster OS. Artykułowi poświęcono wiele uwagi zarówno tutaj, w Instructables, jak i na innych platformach. Bardzo się cieszę, że tak wielu osobom pomogłem pomyślnie zainstalować ROS na Raspberry Pi. W dołączonym filmie krótko zademonstrowałem również uzyskiwanie obrazu głębi z Kinect 360. Później wiele osób skontaktowało się ze mną na LinkedIn i zapytało mnie, jak udało mi się użyć Kinect z Raspberry Pi. Byłem trochę zaskoczony tym pytaniem, ponieważ proces przygotowania Kinect w tamtym czasie zajmował mi około 3-4 godzin i nie wydawał się wyjątkowo skomplikowany. Udostępniłem swoje pliki.bash_history wszystkim osobom, które pytały mnie o ten problem i w kwietniu znalazłem wreszcie czas na napisanie artykułu o tym, jak zainstalować sterowniki Kinect i wykonać SLAM RGB-D z RTAB-MAP ROS. Tydzień nieprzespanych nocy po rozpoczęciu pisania artykułu rozumiem już, dlaczego tak wiele osób zadało mi to pytanie:)

Zacznę od krótkiego wyjaśnienia, jakie podejścia sprawdziły się, a które nie. Następnie wyjaśnię, jak zainstalować sterowniki Kinect do użytku z ROS Melodic i na koniec, jak skonfigurować komputer do RGB-D SLAM z RTAB-MAP ROS.

Krok 1: Co zadziałało, a co nie?

Dostępnych jest kilka sterowników dla Kinect na Raspberry Pi - z nich dwa są obsługiwane przez ROS.

Sterowniki OpenNI - pakiet openni_camera dla ROS

Sterowniki libfreenect - pakiet freenect_stack dla ROS

Jeśli spojrzysz na ich repozytoria GitHub, zobaczysz, że sterownik OpenNI był ostatnio aktualizowany lata temu i w praktyce jest EOL przez długi czas. Z drugiej strony ibfreekinect jest aktualizowany na czas. To samo dla ich odpowiednich pakietów ROS, freenect_stack został wydany dla ROS Melodic, podczas gdy ostatnia dystrybucja openni_camera wymieniła wsparcie dla Fuerte…

Możliwe jest skompilowanie i zainstalowanie sterownika OpenNI i pakietu openni_camera na Raspberry Pi dla ROS Melodic, chociaż u mnie to nie działało. W tym celu postępuj zgodnie z tym przewodnikiem, kroki 1, 2, 3, w krokach 2 i 3 usuń flagę "-mfloat-abi=softfp" z pliku Platform/Linux/Build/Common/Platform. ARM (za radą na ten temat problem z Githubem). Następnie sklonuj pakiet openni_camera do swojego obszaru roboczego catkin i skompiluj go za pomocą catkin_make. U mnie to jednak nie zadziałało, błąd polegał na tym, że tworzenie generatora głębokości nie powiodło się. Powód: interfejs USB nie jest obsługiwany!

Korzystanie z libfreenect i freenect_stack przyniosło w końcu sukces, ale było sporo problemów do rozwiązania, a rozwiązanie było trochę zwariowane, aczkolwiek działało bardzo stabilnie (1 godzina + ciągła praca).

Krok 2: Instalowanie sterowników Freenect i Freenect_stack

Instalowanie sterowników Freenect i Freenect_stack
Instalowanie sterowników Freenect i Freenect_stack

Zakładam, że używasz mojego obrazu ROS Melodic Desktop z tego artykułu. Jeśli chcesz przeprowadzić instalację w innym środowisku, na przykład obraz ros_comm lub w Ubuntu dla Raspberry Pi, upewnij się, że masz wystarczającą wiedzę o ROS, aby rozwiązać problemy, które mogą wynikać z tej różnicy.

Zacznijmy od zbudowania sterowników libfreenect ze źródeł, ponieważ prekompilowana wersja repozytorium apt-get jest zbyt przestarzała.

aktualizacja sudo apt-get

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

klon git

cd libfreenect

mkdir build && cd build

cmake -L..

robić

sudo dokonać instalacji

Mamy nadzieję, że proces budowania przebiegnie bez zakłóceń i będzie pełen zielonych, przyjaznych wiadomości. Po zainstalowaniu sterownika libfreenect następną rzeczą do zrobienia jest zainstalowanie pakietu freenect_stack dla ROS. Jest sporo innych pakietów, od których zależy, będziemy musieli je sklonować i zbudować razem z catkin_make. Zanim zaczniesz, upewnij się, że twój koci obszar roboczy jest odpowiednio skonfigurowany i pozyskiwany!

Z folderu src w obszarze roboczym kotki:

klon git

klon git

klon git

klon git

klon git

klon git

Och, to było dużo klonowania.

PÓŹNIEJSZA EDYCJA: Jak zauważył jeden z moich czytelników, repozytorium vision_opencv musi być ustawione na gałąź melodyczną. Z tego cd do src/vision_opencv i wykonaj

git kasa melodyjny

Następnie wróć do folderu obszaru roboczego kotki. Aby sprawdzić, czy mamy zależności dla wszystkich pakietów, wykonaj to polecenie:

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

Jeśli pomyślnie sklonujesz wszystkie potrzebne pakiety, poprosi o pobranie libfreekinect za pomocą apt-get. Odpowiedz nie, ponieważ już zainstalowaliśmy go ze źródła.

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

catkin_make -j2

Czas na herbatę;) lub jakikolwiek ulubiony napój.

Po zakończeniu procesu kompilacji możesz spróbować uruchomić stos kinect i sprawdzić, czy prawidłowo wyświetla obrazy głębi i kolorów. Używam Raspberry Pi bez głowy, więc muszę uruchomić RVIZ na moim komputerze stacjonarnym.

Na Raspberry Pi zrób (Zmień adres IP na adres IP swojego Raspberry Pi!):

eksportuj ROS_MASTER_URI=https://192.168.0.108:11311

eksport ROS_IP=192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration:=true

Zobaczysz dane wyjściowe jak na zrzucie ekranu 1. „Zatrzymywanie opróżniania strumienia RGB i głębokości urządzenia”. wskazuje, że sensor Kinect jest gotowy, ale nic nie jest jeszcze subskrybowane do jego tematów.

Na komputerze stacjonarnym z zainstalowanym ROS Melodic wykonaj:

eksport ROS_MASTER_URI=https://192.168.0.108:11311

export ROS_IP=[adres-ip-komputera-komputera] rviz

Teraz powinieneś być w stanie zobaczyć strumienie obrazu RGB i Depth w RVIZ, jak na zrzucie 2 powyżej… ale nie w tym samym czasie.

Dobra, tutaj zaczynają się hacky. Spędziłem 3 dni, próbując różnych sterowników i podejść i nic nie działało - jak tylko spróbowałem uzyskać dostęp do dwóch strumieni jednocześnie, Kinect zacząłby odliczać czas, jak widać na zrzucie ekranu 3. Próbowałem wszystkiego: lepszego zasilania, starszych wersji libfreenect i freenect_stack, zatrzymanie usb_autosuspend, wstrzyknięcie wybielacza do portów USB (no dobrze, nie ostatni! nie rób tego, to żart i nie powinien stanowić porady technicznej:)). Następnie w jednym z wydań Github zobaczyłem konto osoby, która twierdziła, że ich Kinect jest niestabilny, dopóki nie „załaduje magistrali USB” przez podłączenie klucza WiFi. Próbowałem tego i zadziałało. Z jednej strony cieszę się, że się udało. Z drugiej strony ktoś naprawdę powinien to naprawić. Cóż, w międzyczasie (w pewnym sensie) naprawiliśmy to, przejdźmy do następnego kroku.

Krok 3: Instalacja samodzielnej RTAB MAP

Instalowanie samodzielnego RTAB MAP
Instalowanie samodzielnego RTAB MAP

Najpierw musimy zainstalować kilka zależności:

Pomimo tego, że istnieje gotowy pakiet armhf dostępny dla PCL, będziemy musieli skompilować go ze źródeł z powodu tego problemu. Skonsultuj się z repozytorium PCL GitHub, aby zobaczyć, jak skompilować je ze źródła.

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

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

Teraz sklonujmy samodzielny pakiet git z repozytorium rtab do naszego folderu domowego i zbudujmy je. Użyłem najnowszej wersji (0.18.0).

klon git

cd rtabmap/kompilacja

cmak..

make -j2

sudo dokonać instalacji

sudo ldconfig rtabmap

Teraz, gdy skompilowaliśmy samodzielny RTAB MAP, możemy przejść do ostatniego kroku - kompilacji i instalacji wrappera ROS dla RTAB MAP, rtabmap_ros.

Krok 4: Instalacja Rtabmap_ros

Instalowanie Rtabmap_ros
Instalowanie Rtabmap_ros

Jeśli dotarłeś tak daleko, prawdopodobnie znasz już ćwiczenie:) Sklonuj repozytorium rtabmap_ros do folderu src catkin workspace. (Wykonaj następne polecenie z folderu src catkin workspace!)

klon git

Będziemy potrzebować również tych pakietów ROS, od których rtabmap_ros zależy:

klon git

klon git

klon git

klon git

klon git

Przed rozpoczęciem kompilacji możesz upewnić się, że nie brakuje żadnych zależności za pomocą następującego polecenia:

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

Zainstaluj więcej zależności z ap-get (nie zakłócą one linkowania, ale spowodują błąd podczas kompilacji)

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

Następnie przejdź do folderu obszaru roboczego kotki i rozpocznij kompilację:

Płyta CD..

catkin_make -j2

Mam nadzieję, że nie umieściłeś swojego ulubionego napoju kompilacyjnego nigdzie za daleko. Po zakończeniu kompilacji jesteśmy gotowi do mapowania!

Krok 5: Pokaż czas

Czas na przedstawienie
Czas na przedstawienie
Czas na przedstawienie
Czas na przedstawienie

Zrób ten chwytliwy trik, dodając coś takiego jak klucz WiFi lub Bluetooth do portu USB – używałem 2 portów USB 2.0, jednego dla Kinecta, drugiego dla klucza WiFi.

Na Raspberry Pi wykonaj (Zmień adres IP na adres IP swojego Raspberry Pi!): 1. terminal:

eksport ROS_MASTER_URI=https://192.168.0.108:11311

eksport ROS_IP=192.168.0.108

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

Drugi terminal:

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/MaxSize 1000-Decimapadom:=fałsz

Zobaczysz dane wyjściowe jak na zrzucie ekranu 1. „Zatrzymywanie opróżniania strumienia RGB i głębokości urządzenia”. wskazuje, że Kinect jest gotowy, ale nic nie jest jeszcze subskrybowane do jego tematów. W drugim terminalu powinieneś widzieć komunikaty o jakości odom. Jeśli przesuniesz Kinect zbyt szybko, jakość odomu spadnie do 0 i będziesz musiał przejść do poprzedniej lokalizacji lub zacząć od czystej bazy danych.

Na komputerze stacjonarnym z zainstalowanym ROS Melodic i pakietem rtab_map (polecam używać do tego komputera Ubuntu, ponieważ gotowe pakiety są dostępne dla architektury amd64) wykonaj:

eksport ROS_MASTER_URI=https://192.168.0.108:11311

export ROS_IP=[adres-ip-komputera-komputera]

rviz

Dodaj wyświetlacze MapGraph i MapCloud do rviz i wybierz odpowiednie tematy pochodzące z rtab_map. Cóż, to jest to, słodki smak zwycięstwa! Śmiało i zrób trochę mapowania:)

Krok 6: Referencje

Podczas pisania tego artykułu konsultowałem się z wieloma zasobami, głównie z forami i problemami z GitHub. Zostawię je tutaj.

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

Dodaj mnie na LinkedIn, jeśli masz jakieś pytania i zasubskrybuj mój kanał na YouTube, aby otrzymywać powiadomienia o ciekawszych projektach związanych z uczeniem maszynowym i robotyką.

Zalecana: