Բովանդակություն:

RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 Steps
RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 Steps

Video: RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 Steps

Video: RGB-D SLAM With Kinect on Raspberry Pi 4 [Buster] ROS Melodic: 6 Steps
Video: 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 melodic- ի համար, մինչդեռ նա ամենավերջին դիստրոյցը 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 թողարկում): Այնուհետև clone openni_camera փաթեթը ձեր catkin աշխատանքային տարածքի վրա և կազմեք catkin_make- ի հետ: Ինձ համար դա չաշխատեց, խորության գեներատոր ստեղծելու սխալը ձախողվեց: Պատճառը. USB ինտերֆեյսը չի ապահովվում:

Libfreenect- ի և freenect_stack- ի օգտագործումը, ի վերջո, հաջողություն բերեց, բայց լուծելու բավականին շատ խնդիրներ կային, և լուծումը մի փոքր հաքերական էր, չնայած աշխատում էր շատ կայուն (1 ժամ + շարունակական գործողություն):

Քայլ 2: Freenect վարորդների և Freenect_stack- ի տեղադրում

Freenect վարորդների և Freenect_stack- ի տեղադրում
Freenect վարորդների և Freenect_stack- ի տեղադրում

Ենթադրեմ, որ դուք օգտագործում եք այս հոդվածից իմ ROS Melodic Desktop պատկերը: Եթե ցանկանում եք տեղադրել տարբեր միջավայրերում, օրինակ ՝ ros_comm image- ում կամ Ubuntu- ում Raspberry Pi- ի համար, համոզվեք, որ ROS- ի վերաբերյալ ունեք բավարար գիտելիքներ ՝ այդ տարբերությունից բխող խնդիրները լուծելու համար:

Սկսենք ՝ ստեղծելով libfreenect վարորդներ սկզբնաղբյուրից, քանի որ apt-get պահոցի նախապես կառուցված տարբերակը չափազանց հնացած է:

sudo apt-get թարմացում

sudo apt-get տեղադրել libusb-1.0-0-dev

git կլոն

cd libfreenect

mkdir build && cd build

սմակե -Լ..

կատարել

sudo make install

Հուսանք, որ շինարարական գործընթացը կլինի առանց իրադարձությունների և լի կանաչ բարեկամական հաղորդագրություններով: Libfreenect վարորդը տեղադրելուց հետո հաջորդ քայլը ROS- ի համար freenect_stack փաթեթը տեղադրելն է: Կան մի քանի այլ փաթեթներ, որոնցից կախված է, մենք ստիպված կլինենք դրանք կլոնավորել և միասին կառուցել catkin_make- ով: Նախքան սկսելը, համոզվեք, որ ձեր կատուի աշխատանքային տարածքը պատշաճ կերպով կազմված և աղբյուրված է:

Ձեր catkin workspace src թղթապանակից.

git կլոն

git կլոն

git կլոն

git կլոն

git կլոն

git կլոն

Վայ, դա շատ կլոնավորում էր:

ՎԵՐ ED ԽՄԲՈԹՅՈՆ. Ինչպես նշվեց իմ ընթերցողներից մեկի կողմից, vision_opencv շտեմարանը պետք է դնել մեղեդային ճյուղի վրա: Այդ cd- ի համար src/vision_opencv և կատարեք

git checkout մեղեդային

Հետո վերադառնաք ձեր catkin աշխատանքային տարածքի թղթապանակ: Ստուգելու համար, թե արդյոք մենք կախվածություն ունենք բոլոր առկա փաթեթների համար, կատարեք այս հրամանը.

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

Եթե դուք հաջողությամբ կլոնավորեք բոլոր անհրաժեշտ փաթեթները, այն կպահանջի ներբեռնել libfreekinect- ը apt-get- ով: Պատասխան ՝ ոչ, քանի որ մենք այն արդեն տեղադրել ենք աղբյուրից:

sudo apt-get տեղադրել libbullet-dev libharfbuzz-dev libgtk2.0-dev libgtk-3-dev

catkin_make -j2

Թեյի ժամանակ;) կամ ինչ էլ որ լինի ձեր սիրած ըմպելիքը:

Կոմպիլյացիայի գործընթացն ավարտվելուց հետո կարող եք փորձել գործարկել kinect stack- ը և ստուգել, արդյոք այն պատշաճ կերպով դուրս է բերում խորությունը և գունավոր պատկերները: Ես օգտագործում եմ Raspberry Pi- ն անգլուխ, այնպես որ ես պետք է աշխատեմ RVIZ- ով իմ աշխատասեղանի համակարգչում:

Raspberry Pi do (Փոխեք IP հասցեն ձեր Raspberry Pi- ի IP հասցեով):

արտահանել 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 և Խորքային հոսքի հոսքի դադարեցում»: ցույց է տալիս, որ Kinect- ը պատրաստ է, բայց դեռևս ոչինչ բաժանորդագրված չէ դրա թեմաներին:

ROS Melodic- ով տեղադրված ձեր աշխատասեղանի համակարգչում կատարեք.

արտահանել ROS_MASTER_URI = https://192.168.0.108: 11311

արտահանել ROS_IP = [your-desktop-computer-ip] rviz

Այժմ դուք պետք է կարողանաք տեսնել RGB և Depth պատկերի հոսքերը RVIZ- ով, ինչպես վերը նշված 2 -րդ նկարում … բայց ոչ միևնույն ժամանակ:

Լավ, ահա թե որտեղից են սկսվում հաքերային իրերը: Ես 3 օր անցկացրի տարբեր վարորդների և մոտեցումների վրա, և ոչինչ չստացվեց. Հենց որ փորձեի միաժամանակ երկու հոսք մուտք գործել, Kinect- ը կսկսեր ժամանակի ավարտը, ինչպես տեսնում եք Սքրինշոթ 3 -ում: Ես փորձեցի ամեն ինչ. freenect_stack, դադարեցնել usb_autosuspend- ը, սպիտակեցում ներարկել USB պորտերին (լավ, ոչ վերջինը: մի արա դա, դա կատակ է և չպետք է տեխնիկական խորհուրդ լինի:)): Հետո Github- ի համարներից մեկում ես տեսա մի մարդու պատմություն, ով ասաց, որ իրենց Kinect- ն անկայուն է, մինչև նրանք «չբեռնեցին USB ավտոբուսը» `միացնելով WiFi դոնգը: Ես դա փորձեցի և ստացվեց: Մի կողմից, ուրախ եմ, որ ստացվեց: Մյուս կողմից, ինչ -որ մեկը իսկապես պետք է շտկի դա: Դե, մինչդեռ (մի տեսակ) դա շտկելով, եկեք անցնենք հաջորդ քայլին:

Քայլ 3. Տեղադրեք ինքնուրույն RTAB քարտեզ

Տեղադրելով ինքնուրույն RTAB քարտեզ
Տեղադրելով ինքնուրույն RTAB քարտեզ

Նախ, մենք ունենք մի շարք կախվածություններ, որոնք պետք է տեղադրվեն.

Չնայած PCL- ի համար առկա է նախապես կառուցված armhf փաթեթ, մենք այս խնդրի պատճառով պետք է այն կազմենք աղբյուրից: Խորհրդակցեք PCL GitHub պահեստի հետ ՝ տեսնելու, թե ինչպես այն կազմել աղբյուրից:

sudo apt-get տեղադրել libvtk6-dev libvtk6-qt-dev libvtk6-java libvtk6-jni

sudo apt-get տեղադրել libopencv-dev cmake libopenni2-dev libsqlite3-dev

Այժմ եկեք կլոնավորենք rtab քարտեզի անկախ փաթեթների git պահեստը մեր տնային թղթապանակին և կառուցենք այն: Ես օգտագործել եմ վերջին թողարկումը (0.18.0):

git կլոն

cd rtabmap/build

սմեկ..

կատարել -j2

sudo make install

sudo ldconfig rtabmap

Այժմ, երբ մենք կազմում ենք ինքնուրույն RTAB MAP, կարող ենք անցնել վերջին քայլին `RTAB MAP- ի համար ROS փաթաթան կազմել և տեղադրել, rtabmap_ros:

Քայլ 4: Rtabmap_ros- ի տեղադրում

Rtabmap_ros- ի տեղադրում
Rtabmap_ros- ի տեղադրում

Եթե այդքան հեռու եք հասել, հավանաբար արդեն գիտեք վարժությունը:) Կլոնավորեք rtabmap_ros պահեստը ձեր catkin workspace src պանակին: (Կատարեք հաջորդ հրամանը catkin workspace src թղթապանակից):

git կլոն

Մեզ նույնպես պետք կգան այս ROS փաթեթները, այդ rtabmap_ros- ը կախված է.

git կլոն

git կլոն

git կլոն

git կլոն

git կլոն

Նախքան կազմելը սկսելը, կարող եք համոզվել, որ որևէ կախվածություն բաց չեք թողնում հետևյալ հրամանով.

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

Տեղադրեք ավելի շատ կախվածություններ ap-get- ից (դրանք չեն ընդհատի կապը, այլ կազմման ընթացքում սխալ կթողնեն)

sudo apt-get տեղադրել libsdl-image1.2-dev

Այնուհետև անցեք ձեր catkin աշխատանքային տարածքի թղթապանակ և սկսեք կազմել.

cd..

catkin_make -j2

Հուսով եմ, որ ձեր սիրած հավաքածուն խմիչքը ոչ մի տեղ շատ հեռու չեք դրել: Կազմման ավարտից հետո մենք պատրաստ ենք կատարել քարտեզագրումը:

Քայլ 5: Showույց տալ ժամանակը

Showույց տալ ժամանակը
Showույց տալ ժամանակը
Showույց տալ ժամանակը
Showույց տալ ժամանակը

Կատարեք այդ հնարքային հնարքը ՝ USB պորտին WiFi կամ Bluetooth dongle նման բան ավելացնելով. Ես օգտագործում էի 2 USB 2.0 նավահանգիստ, մեկը Kinect- ի, մյուսը WiFi dongle- ի համար:

Raspberry Pi- ում (Փոխեք IP հասցեն ձեր Raspberry Pi- ի IP հասցեով). 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.: = կեղծ

Դուք կտեսնեք ելքը, ինչպես Սքրինշոթ 1 -ում: «Սարքի RGB և Խորքային հոսքի հոսքի դադարեցում»: ցույց է տալիս, որ Kinect- ը պատրաստ է, բայց դրա թեմաներին դեռ ոչինչ գրանցված չէ: Երկրորդ տերմինալում դուք պետք է տեսնեք odom- ի որակի մասին հաղորդագրություններ: Եթե դուք շատ արագ տեղափոխեք Kinect- ը, odom- ի որակը կհասնի 0 -ի, և դուք պետք է տեղափոխվեք նախկին վայր կամ սկսեք մաքուր տվյալների բազայից:

ROS Melodic և rtab_map փաթեթներով աշխատասեղանին (խորհուրդ եմ տալիս դրա համար օգտագործել Ubuntu համակարգիչը, քանի որ նախապես կառուցված փաթեթները հասանելի են amd64 ճարտարապետության համար) արեք.

արտահանել ROS_MASTER_URI = https://192.168.0.108: 11311

արտահանել ROS_IP = [ձեր աշխատասեղան-համակարգիչ-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 ալիքին ՝ մեքենայական ուսուցման և ռոբոտաշինության հետ կապված ավելի հետաքրքիր նախագծերի մասին տեղեկանալու համար:

Խորհուրդ ենք տալիս: