Obsah:

RGB-D SLAM s Kinectem na Raspberry Pi 4 [Buster] ROS Melodic: 6 kroků
RGB-D SLAM s Kinectem na Raspberry Pi 4 [Buster] ROS Melodic: 6 kroků

Video: RGB-D SLAM s Kinectem na Raspberry Pi 4 [Buster] ROS Melodic: 6 kroků

Video: RGB-D SLAM s Kinectem na Raspberry Pi 4 [Buster] ROS Melodic: 6 kroků
Video: RGB-D SLAM с Kinect на Raspberry Pi 4 ROS Melodic 2024, Červenec
Anonim
Image
Image

Minulý rok jsem napsal článek o stavění a instalaci ROS Melodic na nový (v té době) Raspberry Pi s operačním systémem Debian Buster. Tento článek získal velkou pozornost jak zde, tak na jiných platformách. Jsem velmi rád, že jsem pomohl tolika lidem úspěšně nainstalovat ROS na Raspberry Pi. V doprovodném videu jsem také stručně demonstroval získání hloubkového obrazu z Kinect 360. Později mě kontaktovalo mnoho lidí na LinkedIn a zeptali se mě, jak se mi podařilo používat Kinect s Raspberry Pi. Tato otázka mě trochu překvapila, protože proces přípravy Kinectu mi v té době trval asi 3–4 hodiny a nevypadal nijak extrémně složitě. Sdílel jsem své soubory.bash_history se všemi lidmi, kteří se mě na tento problém ptali, a v dubnu jsem si konečně našel čas napsat článek o tom, jak nainstalovat ovladače Kinect a provádět RGB-D SLAM s RTAB-MAP ROS. Týden bezesných nocí poté, co jsem začal psát článek, už chápu, proč mi tolik lidí položilo tuto otázku:)

Začnu stručným vysvětlením, jaké přístupy fungovaly a které ne. Poté vysvětlím, jak nainstalovat ovladače Kinect pro použití s ROS Melodic a nakonec jak nastavit váš počítač pro RGB-D SLAM s RTAB-MAP ROS.

Krok 1: Co fungovalo a co ne

Pro Kinect na Raspberry Pi je k dispozici několik ovladačů - z nich dva podporuje ROS.

Ovladače OpenNI - balíček openni_camera pro ROS

ovladače libfreenect - balíček freenect_stack pro ROS

Když se podíváte na jejich příslušná úložiště GitHub, zjistíte, že ovladač OpenNI byl naposledy aktualizován před lety a v praxi je EOL dlouhou dobu. Na druhou stranu ibfreekinect se včas aktualizuje. Stejně jako pro jejich příslušné balíčky ROS, freenect_stack byl vydán pro melodii ROS, zatímco poslední distro openni_camera uvádí podporu pro Fuerte…

Je možné zkompilovat a nainstalovat ovladač OpenNI a balíček openni_camera na Raspberry Pi pro ROS Melodic, i když to pro mě nefungovalo. Chcete-li to provést, postupujte podle tohoto průvodce, kroky 1, 2, 3, v krocích 2 a 3, odeberte ze souboru Platform/Linux/Build/Common/Platform. ARM příznak „-mfloat-abi = softfp“(podle pokynů v tomto Problém s Githubem). Pak naklonujte balíček openni_camera do pracovního prostoru catkin a zkompilovejte pomocí catkin_make. Nefungovalo to pro mě, chyba byla při vytváření generátoru hloubky, který selhal. Důvod: Rozhraní USB není podporováno!

Použití libfreenect a freenect_stack nakonec přineslo úspěch, ale bylo třeba vyřešit několik problémů a řešení bylo trochu hacknuté, i když fungovalo velmi stabilně (1 hodina + pokračující provoz).

Krok 2: Instalace ovladačů Freenect a Freenect_stack

Instalace ovladačů Freenect a Freenect_stack
Instalace ovladačů Freenect a Freenect_stack

Budu předpokládat, že používáte můj obrázek ROS Melodic Desktop z tohoto článku. Pokud chcete provést instalaci v jiném prostředí, například ros_comm image nebo v Ubuntu pro Raspberry Pi, ujistěte se, že máte dostatek znalostí o ROS k řešení problémů, které mohou z tohoto rozdílu vzniknout.

Začněme vytvořením ovladačů libfreenect ze zdroje, protože předem připravená verze úložiště apt-get je příliš zastaralá.

sudo apt-get update

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

klon git

cd libfreenect

mkdir build && cd build

cmake -L..

udělat

sudo provést instalaci

Naštěstí bude proces sestavování bezproblémový a plný zelených zpráv. Poté, co nainstalujete ovladač libfreenect, další věcí, kterou musíte udělat, je nainstalovat balíček freenect_stack pro ROS. Existuje spousta dalších balíčků, na kterých závisí, budeme je muset naklonovat a stavět s catkin_make dohromady. Než začnete, ujistěte se, že je váš pracovní prostor pro jehnědy správně nastaven a pochází!

Ze složky src vašeho pracovního prostoru src:

klon git

klon git

klon git

klon git

klon git

klon git

Páni, to bylo hodně klonování.

POZDĚJŠÍ ÚPRAVA: Jak poznamenal jeden z mých čtenářů, úložiště vision_opencv je třeba nastavit na melodickou větev. Za to cd do src/vision_opencv a spusťte

git pokladna melodická

Poté se vraťte do složky pracovního prostoru Catkin. Chcete -li zkontrolovat, zda jsme závislí pro všechny zavedené balíčky, spusťte tento příkaz:

rosdep nainstalovat-z cest src --ignore-src

Pokud jste úspěšně naklonovali všechny potřebné balíčky, požádá o stažení libfreekinect pomocí apt-get. Odpověď ne, protože jsme ji již nainstalovali ze zdroje.

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

catkin_make -j2

Čaj;) nebo jakýkoli váš oblíbený nápoj.

Po dokončení procesu kompilace můžete zkusit spustit kinect stack a zkontrolovat, zda správně vydává obrázky hloubky a barev. Používám Raspberry Pi bez hlavy, takže potřebuji spustit RVIZ na svém stolním počítači.

Na Raspberry Pi do (Změňte IP adresu na IP adresu vašeho Raspberry Pi!):

exportovat ROS_MASTER_URI = https://192.168.0.108: 11311

exportovat ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration: = true

Uvidíte výstup jako na snímku obrazovky 1. „Zastavení zarovnávání zařízení RGB a hloubky streamu zařízení.“naznačuje, že Kinect je připraven, ale k jeho tématům se zatím nic nepřihlásilo.

Na stolním počítači s nainstalovaným ROS Melodic proveďte:

exportovat ROS_MASTER_URI = https://192.168.0.108: 11311

export ROS_IP = [your-desktop-computer-ip] rviz

Nyní byste měli být schopni vidět obrazové toky RGB a hloubky v RVIZ jako na Screenshot 2 výše … ale ne současně.

Dobře, tady začíná hacky. Strávil jsem 3 dny zkoušením různých ovladačů a přístupů a nic nefungovalo - jakmile bych zkusil přistupovat ke dvěma streamům současně, Kinect by začal vypršet, jak vidíte na Screenshotu 3. Zkoušel jsem všechno: lepší napájení, starší verze libfreenect a freenect_stack, zastavení usb_autosuspend, vstřikování bělidla do USB portů (dobře, ne poslední! nedělejte to, je to vtip a nemělo by jít o technickou radu:)). Pak jsem v jednom z problémů Githubu viděl účet člověka, který řekl, že jejich Kinect je nestabilní, dokud „nenačetli USB sběrnici“připojením WiFi dongle. Zkusil jsem to a fungovalo to. Na jednu stranu jsem rád, že to fungovalo. Na druhou stranu by to měl opravdu někdo opravit. Mezitím, co jsme to (nějak) vyřešili, přejdeme k dalšímu kroku.

Krok 3: Instalace samostatné mapy RTAB

Instalace samostatné mapy RTAB
Instalace samostatné mapy RTAB

Nejprve musíme nainstalovat spoustu závislostí:

Přestože je pro PCL k dispozici předem připravený balíček armhf, budeme ho kvůli tomuto problému muset zkompilovat ze zdroje. Konzultujte úložiště PCL GitHub a zjistěte, jak jej zkompilovat ze zdroje.

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

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

Nyní klonujeme rtab map samostatný balíček git repository do naší domovské složky a vytvoříme jej. Použil jsem nejnovější verzi (0.18.0).

klon git

cd rtabmap/build

cmake..

udělat -j2

sudo provést instalaci

sudo ldconfig rtabmap

Když jsme nyní zkompilovali samostatnou RTAB MAP, můžeme přejít k poslednímu kroku - kompilaci a instalaci ROS wrapperu pro RTAB MAP, rtabmap_ros.

Krok 4: Instalace Rtabmap_ros

Instalace Rtabmap_ros
Instalace Rtabmap_ros

Pokud jste se dostali tak daleko, pravděpodobně už znáte nácvik:) Klonujte úložiště rtabmap_ros do složky src pracovního prostoru src. (Proveďte další příkaz ze složky src pracovního prostoru src!)

klon git

Budeme také potřebovat tyto balíčky ROS, na kterých rtabmap_ros závisí:

klon git

klon git

klon git

klon git

klon git

Než spustíte kompilaci, můžete se ujistit, že vám nechybí žádné závislosti, pomocí následujícího příkazu:

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

Nainstalujte více závislostí z ap-get (ty nepřeruší propojení, ale při kompilaci způsobí chybu)

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

Poté se přesuňte do složky pracovního prostoru Catkin a začněte kompilovat:

cd..

catkin_make -j2

Doufám, že jste svůj oblíbený kompilační nápoj nedali nikam příliš daleko. Po dokončení kompilace jsme připraveni provést mapování!

Krok 5: Zobrazit čas

Zobrazit čas
Zobrazit čas
Zobrazit čas
Zobrazit čas

Udělejte ten hacky trik s přidáním něco jako WiFi nebo Bluetooth dongle do USB portu - používal jsem 2 USB 2.0 porty, jeden pro Kinect, druhý pro WiFi dongle.

Na Raspberry Pi do (Změňte IP adresu na IP adresu vašeho Raspberry Pi!): 1. terminál:

exportovat ROS_MASTER_URI = https://192.168.0.108: 11311

exportovat ROS_IP = 192.168.0.108

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

2. terminál:

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: = nepravda

Uvidíte výstup jako na snímku obrazovky 1. „Zastavení zarovnávání zařízení RGB a hloubky streamu zařízení.“znamená, že Kinect je připraven, ale jeho témata zatím nejsou přihlášena. Ve druhém terminálu byste měli vidět zprávy o kvalitě odom. Pokud pohybujete Kinectem příliš rychle, kvalita odom přejde na 0 a budete se muset přesunout na předchozí místo nebo začít z čisté databáze.

Na stolním počítači s nainstalovaným balíčkem ROS Melodic a rtab_map (doporučuji k tomu použít počítač Ubuntu, protože pro architekturu amd64 jsou k dispozici předem připravené balíčky):

exportovat ROS_MASTER_URI = https://192.168.0.108: 11311

export ROS_IP = [vaše-stolní-počítač-ip]

rviz

Přidejte do rviz displeje MapGraph a MapCloud a vyberte odpovídající témata pocházející z rtab_map. No, to je ono, sladká chuť vítězství! Pokračujte a udělejte nějaké mapování:)

Krok 6: Reference

Při psaní tohoto článku jsem konzultoval řadu zdrojů, většinou fóra a problémy s GitHubem. Nechám je tady.

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

Pokud máte nějaké dotazy, přidejte si mě na LinkedIn a přihlaste se k odběru mého kanálu YouTube, abyste byli informováni o zajímavějších projektech zahrnujících strojové učení a robotiku.

Doporučuje: