Turinys:

RGB-D SLAM su „Kinect on Raspberry Pi 4“[Buster] ROS melodika: 6 žingsniai
RGB-D SLAM su „Kinect on Raspberry Pi 4“[Buster] ROS melodika: 6 žingsniai

Video: RGB-D SLAM su „Kinect on Raspberry Pi 4“[Buster] ROS melodika: 6 žingsniai

Video: RGB-D SLAM su „Kinect on Raspberry Pi 4“[Buster] ROS melodika: 6 žingsniai
Video: RGB-D SLAM With Kinect on Raspberry Pi 4 ROS Melodic 2024, Lapkritis
Anonim
Image
Image

Praėjusiais metais aš parašiau straipsnį apie „ROS Melodic“kūrimą ir įdiegimą į naują (tuo metu) „Raspberry Pi“su „Debian Buster“OS. Straipsnis sulaukė daug dėmesio tiek čia „Instructables“, tiek kitose platformose. Labai džiaugiuosi, kad padėjau tiek daug žmonių sėkmingai įdiegti ROS „Raspberry Pi“. Pridedamame vaizdo įraše taip pat trumpai pademonstravau gylio vaizdo gavimą iš „Kinect 360“. Vėliau daugybė žmonių susisiekė su manimi „LinkedIn“ir paklausė, kaip man pavyko naudoti „Kinect“su „Raspberry Pi“. Buvau nustebintas klausimo, nes tuo metu „Kinect“paruošimo procesas užtruko apie 3–4 valandas ir neatrodė itin sudėtingas. Aš pasidalinau savo.bash_history failais su visais manęs klausiančiais žmonėmis ir balandžio mėnesį pagaliau radau laiko parašyti straipsnį apie tai, kaip įdiegti „Kinect“tvarkykles ir atlikti RGB-D SLAM su RTAB-MAP ROS. Savaitė bemiegių naktų po to, kai pradėjau rašyti straipsnį, dabar suprantu, kodėl tiek daug žmonių man uždavė šį klausimą:)

Pradėsiu nuo trumpo paaiškinimo, kokie metodai veikė, o kurie ne. Tada paaiškinsiu, kaip įdiegti „Kinect“tvarkykles, skirtas naudoti su „ROS Melodic“, ir galiausiai, kaip nustatyti savo įrenginį RGB-D SLAM su RTAB-MAP ROS.

1 žingsnis: kas pavyko ir kas ne

Yra keletas „Kinect on Raspberry Pi“tvarkyklių - iš jų dvi palaiko ROS.

„OpenNI“tvarkyklės - „openni_camera“paketas, skirtas ROS

„libfreenect“tvarkyklės - freenect_stack paketas, skirtas ROS

Jei pažvelgsite į jų atitinkamas „GitHub“saugyklas, pamatysite, kad „OpenNI“tvarkyklė paskutinį kartą buvo atnaujinta prieš daugelį metų ir praktiškai ilgą laiką yra EOL. Kita vertus, „ibfreekinect“yra laiku atnaujinamas. Tas pats, kaip ir atitinkamiems ROS paketams, freenect_stack buvo išleistas ROS melodic, o paskutinis distro openni_camera išvardijo palaikymą Fuerte …

„Raspberry Pi“, skirtą „ROS Melodic“, galima surinkti ir įdiegti „OpenNI“tvarkyklės ir „openni_camera“paketą, nors man tai nepadėjo. Norėdami tai padaryti, vadovaukitės šiuo vadovu, 1, 2, 3 veiksmai 2 ir 3 veiksmuose pašalinkite „-mfloat-abi = softfp“vėliavą iš „Platform/Linux/Build/Common/Platform. ARM“failo (pagal patarimus šiuo klausimu „Github“problema). Tada klonuokite „openni_camera“paketą į savo kačių darbo vietą ir sukompiliuokite naudodami „catkin_make“. Tačiau man tai nepadėjo, klaida sukūrus gylio generatorių nepavyko. Priežastis: USB sąsaja nepalaikoma!

Naudojant „libfreenect“ir „freenect_stack“galų gale buvo sėkminga, tačiau buvo išspręsta nemažai problemų, o sprendimas buvo šiek tiek niūrus, nors ir veikė labai stabiliai (1 valanda + tolesnis veikimas).

2 veiksmas: įdiekite „Freenect“tvarkykles ir „Freenect_stack“

„Freenect“tvarkyklių ir „Freenect_stack“diegimas
„Freenect“tvarkyklių ir „Freenect_stack“diegimas

Manau, kad jūs naudojate mano ROS Melodic Desktop vaizdą iš šio straipsnio. Jei norite diegti kitoje aplinkoje, pavyzdžiui, „ros_comm image“arba „Ubuntu for Raspberry Pi“, įsitikinkite, kad turite pakankamai žinių apie ROS, kad išspręstumėte problemas, kurios gali kilti dėl šio skirtumo.

Pradėkime kurdami „libfreenect“tvarkykles iš šaltinio, nes iš anksto sukurta „apt-get“saugyklos versija yra per daug pasenusi.

sudo apt-get atnaujinimas

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

git klonas

cd libfreenect

mkdir build && cd build

cmake -L..

padaryti

sudo make install

Tikimės, kad kūrimo procesas bus nevykęs ir kupinas žalių draugiškų pranešimų. Įdiegę „libfreenect“tvarkyklę, kitas dalykas, kurį reikia padaryti, yra įdiegti „freenect_stack“paketą ROS. Yra daug kitų paketų, nuo kurių priklauso, turėsime juos klonuoti ir kurti kartu su „catkin_make“. Prieš pradėdami įsitikinkite, kad jūsų kačių darbo vieta yra tinkamai paruošta ir įsigyta!

Iš „catkin workspace src“aplanko:

git klonas

git klonas

git klonas

git klonas

git klonas

git klonas

Oho, tai buvo daug klonavimo.

VĖLESNIS REDAGAVIMAS: Kaip pažymėjo vienas iš mano skaitytojų, „vision_opencv“saugyklą reikia nustatyti į melodinę šaką. Kad CD būtų src/vision_opencv ir vykdomas

git checkout melodingas

Tada grįžkite į „catkin“darbo vietos aplanką. Norėdami patikrinti, ar mes priklausome nuo visų esamų paketų, vykdykite šią komandą:

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

Jei sėkmingai klonavote visus reikalingus paketus, jis paprašys atsisiųsti „libfreekinect“su apt-get. Atsakykite ne, nes mes jį jau įdiegėme iš šaltinio.

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

catkin_make -j2

Arbatos laikas;) ar koks tavo mėgstamiausias gėrimas.

Baigę kompiliavimo procesą, galite pabandyti paleisti „Kinect“kaminą ir patikrinti, ar jis tinkamai pateikia gylio ir spalvotus vaizdus. Aš naudoju Raspberry Pi be galvos, todėl turiu paleisti RVIZ savo staliniame kompiuteryje.

„Raspberry Pi do“(pakeiskite „Raspberry Pi“IP adresą į IP adresą!):

eksportuoti ROS_MASTER_URI = https://192.168.0.108: 11311

eksportuoti ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch deep_registration: = tiesa

Pamatysite išvestį, kaip parodyta 1 ekrano kopijoje. „Sustabdymo įrenginio RGB ir gylio srauto praplovimas“. rodo, kad „Kinect“yra pasirengusi, tačiau jos temomis dar niekas nėra užsiprenumeravęs.

Staliniame kompiuteryje, kuriame įdiegta „ROS Melodic“, atlikite šiuos veiksmus:

eksportuoti ROS_MASTER_URI = https://192.168.0.108: 11311

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

Dabar turėtumėte matyti RGB ir gylio vaizdo srautus RVIZ, kaip parodyta 2 ekrano kopijoje aukščiau … bet ne tuo pačiu metu.

Gerai, čia prasideda nemalonūs dalykai. Praleidau 3 dienas bandydamas įvairius tvarkykles ir metodus, tačiau niekas nepadėjo - kai tik bandžiau vienu metu pasiekti du srautus, „Kinect“pradės skaičiuoti laikas, kaip matote 3 ekrano kopijoje. Išbandžiau viską: geresnį maitinimą, senesnius „libfreenect“įsipareigojimus ir freenect_stack, sustabdydami usb_autosuspend, įpurškite baliklio į USB prievadus (gerai, ne paskutinis! nedarykite to, tai pokštas ir neturėtų būti techninis patarimas:)). Tada viename iš „Github“numerių pamačiau asmens, kuris sakė, kad jų „Kinect“buvo nestabilus, paskyrą, kol „įkėlė USB magistralę“prijungę „WiFi“raktą. Aš tai išbandžiau ir tai pavyko. Viena vertus, džiaugiuosi, kad tai pavyko. Kita vertus, kažkas tikrai turėtų tai ištaisyti. Na, o tuo tarpu (tarsi) tai ištaisę, pereikime prie kito žingsnio.

3 žingsnis: Įdiekite atskirą RTAB MAP

Įdiekite atskirą RTAB MAP
Įdiekite atskirą RTAB MAP

Pirmiausia turime įdiegti daugybę priklausomybių:

Nepaisant to, kad PCL yra iš anksto sukurtas „armhf“paketas, dėl šios problemos turėsime jį surinkti iš šaltinio. Norėdami sužinoti, kaip ją surinkti iš šaltinio, apsilankykite „PCL GitHub“saugykloje.

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

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

Dabar klonuojame rtab žemėlapio atskirą paketo git saugyklą į savo namų aplanką ir sukuriame jį. Aš naudojau naujausią versiją (0.18.0).

git klonas

cd rtabmap/build

cmake..

padaryti -j2

sudo make install

sudo ldconfig rtabmap

Dabar, kai sudarėme atskirą RTAB MAP, galime pereiti prie paskutinio žingsnio - RTA įvyniojimo RTAB MAP, rtabmap_ros, surinkimo ir įdiegimo.

4 veiksmas: „Rtabmap_ros“diegimas

„Rtabmap_ros“diegimas
„Rtabmap_ros“diegimas

Jei pasiekėte tiek toli, tikriausiai jau žinote grąžtą:) Klonuokite rtabmap_ros saugyklą į savo „catkin“darbo src aplanką. (Vykdykite kitą komandą iš „catkin workspace src“aplanko!)

git klonas

Mums taip pat reikės šių ROS paketų, kad rtabmap_ros priklauso nuo:

git klonas

git klonas

git klonas

git klonas

git klonas

Prieš pradėdami kompiliaciją, galite įsitikinti, kad neprarandate jokių priklausomybių naudodami šią komandą:

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

Įdiekite daugiau priklausomybių iš „ap-get“(jos nepertrauks susiejimo, bet sukels klaidą kompiliavimo metu)

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

Tada pereikite prie katino darbo srities aplanko ir pradėkite rinkti:

cd..

catkin_make -j2

Tikimės, kad niekur per toli neįdėjote savo mėgstamo kompiliavimo gėrimo. Kai kompiliacija bus baigta, būsime pasirengę atlikti žemėlapių sudarymą!

5 žingsnis: Parodykite laiką

Pasirodymas
Pasirodymas
Pasirodymas
Pasirodymas

Padarykite tą keistą triuką pridėdami kažką panašaus į „WiFi“ar „Bluetooth“raktą prie USB prievado - aš naudoju 2 USB 2.0 prievadus, vieną „Kinect“, kitą - „WiFi“raktą.

„Raspberry Pi do“(pakeiskite „Raspberry Pi“IP adresą į IP adresą!): 1 -asis terminalas:

eksportuoti ROS_MASTER_URI = https://192.168.0.108: 11311

eksportuoti ROS_IP = 192.168.0.108

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

2 terminalas:

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

Pamatysite išvestį, kaip parodyta 1 ekrano kopijoje. „Sustabdymo įrenginio RGB ir gylio srauto praplovimas“. rodo, kad „Kinect“yra pasirengusi, tačiau jos temos dar nėra prenumeruojamos. Antrame terminale turėtumėte matyti pranešimus apie odom kokybę. Jei perkeliate „Kinect“per greitai, „odom“kokybė bus 0 ir turėsite pereiti į ankstesnę vietą arba pradėti nuo švarios duomenų bazės.

Staliniame kompiuteryje, kuriame yra įdiegtas „ROS Melodic“ir „rtab_map“paketas (tam rekomenduoju naudoti „Ubuntu“kompiuterį, nes galimi iš anksto sukurti paketai, skirti amd64 architektūrai):

eksportuoti ROS_MASTER_URI = https://192.168.0.108: 11311

eksportuoti ROS_IP = [your-desktop-computer-ip]

rviz

Pridėkite „MapGraph“ir „MapCloud“ekranus prie „rviz“ir pasirinkite atitinkamas temas iš „rtab_map“. Tai štai, saldus pergalės skonis! Pirmyn ir padaryk žemėlapius:)

6 žingsnis: nuorodos

Rašydamas šį straipsnį, aš konsultavau daugybę šaltinių, daugiausia forumų ir „GitHub“problemų. Paliksiu juos čia.

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

Jei turite klausimų, pridėkite mane „LinkedIn“ir užsiprenumeruokite mano „YouTube“kanalą, kad gautumėte pranešimą apie įdomesnius projektus, susijusius su mašininiu mokymusi ir robotika.

Rekomenduojamas: