תוכן עניינים:

RGB-D SLAM עם Kinect ב- Raspberry Pi 4 [באסטר] ROS Melodic: 6 שלבים
RGB-D SLAM עם Kinect ב- Raspberry Pi 4 [באסטר] ROS Melodic: 6 שלבים

וִידֵאוֹ: RGB-D SLAM עם Kinect ב- Raspberry Pi 4 [באסטר] ROS Melodic: 6 שלבים

וִידֵאוֹ: RGB-D SLAM עם Kinect ב- Raspberry Pi 4 [באסטר] ROS Melodic: 6 שלבים
וִידֵאוֹ: Depth Cameras 2024, דֵצֶמבֶּר
Anonim
Image
Image

בשנה שעברה כתבתי מאמר על בניית והתקנת ROS Melodic על פטל פטל חדש (באותה תקופה) עם מערכת ההפעלה Debian Buster. המאמר זכה לתשומת לב רבה הן כאן ב- Instructables והן בפלטפורמות אחרות. אני שמח מאוד שעזרתי לכל כך הרבה אנשים להתקין בהצלחה ROS ב- Raspberry Pi. בסרטון המצורף הדגמתי בקצרה גם תמונת עומק מ- Kinect 360. מאוחר יותר אנשים רבים יצרו איתי קשר בלינקדאין ושאלו אותי איך הצלחתי להשתמש ב- Kinect עם Raspberry Pi. קצת הופתעתי מהשאלה, מכיוון שהתהליך של הכנת קינקט באותה תקופה לקח לי בערך 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, בעוד שהוא האחרון distro 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 ותערוך עם catkin_make. זה לא עבד בשבילי, אך השגיאה הייתה יצירת מחולל עומק נכשל. סיבה: ממשק USB אינו נתמך!

השימוש ב- libfreenect ו- freenect_stack הניב הצלחה בסופו של דבר, אך היו לא מעט בעיות לפתור והפתרון היה קצת פרוץ, אם כי עובד יציב מאוד (שעה + המשך פעולה).

שלב 2: התקנת מנהלי התקן Freenect ו- Freenect_stack

התקנת מנהלי התקן Freenect ו- Freenect_stack
התקנת מנהלי התקן Freenect ו- Freenect_stack

אני מניח שאתה משתמש בתמונת שולחן העבודה המלודי של ROS שלי ממאמר זה. אם אתה רוצה לבצע התקנה בסביבה אחרת, למשל תמונת ros_comm או באובונטו עבור Raspberry Pi, ודא שיש לך מספיק ידע על ROS כדי לפתור בעיות שעלולות לנבוע מההבדל הזה.

נתחיל בבניית מנהלי התקנים של libfreenect מהמקור, מכיוון שגרסה שנבנתה מראש ל- apt-get היא מיושנת מדי.

עדכון sudo apt-get

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

שיבוט git

cd libfreenect

mkdir build && build build

cmake -L..

עשה

sudo עשה התקנה

יש לקוות שתהליך הבנייה יהיה ללא אירועים ומלא הודעות ידידותיות ירוקות. לאחר התקנת מנהל ההתקן libfreenect, הדבר הבא שצריך לעשות הוא להתקין את חבילת freenect_stack עבור ROS. יש לא מעט חבילות אחרות שזה תלוי בהן, נצטרך לשבט אותן ולבנות עם catkin_make הכל יחד. לפני שתתחיל, וודא שסביבת העבודה שלך של catkin מותקנת כראוי ומקורה בה!

מתיקיית ה- src של מרחב העבודה של catkin שלך:

שיבוט git

שיבוט git

שיבוט git

שיבוט git

שיבוט git

שיבוט git

וואו, זה היה הרבה שיבוט.

עריכה מאוחרת יותר: כפי שציין אחד הקוראים שלי, צריך להגדיר את מאגר vision_opencv לענף מלודי. עבור תקליטור זה ל- src/vision_opencv ולבצע

git checkout מלודי

לאחר מכן חזור לתיקיית סביבת העבודה שלך ב- catkin. כדי לבדוק אם אנו תלויים עבור כל החבילות במקום, בצע את הפקודה הבאה:

rosdep להתקין-מתוך-נתיבים src --ignore-src

אם תשכפל בהצלחה את כל החבילות הדרושות הוא יבקש להוריד libfreekinect עם apt-get. תשובה לא, מכיוון שכבר התקנו אותו מהמקור.

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

catkin_make -j2

זמן תה;) או מה המשקה האהוב עליכם.

לאחר סיום תהליך האוסף אתה יכול לנסות להפעיל את ערימת 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 depth_registration: = נכון

תראה את הפלט כמו בצילום מסך 1. "עצירת RGB והתקנת עומק של המכשיר." מציין כי Kinect מוכן, אך עדיין אין מנוי לנושאיו.

במחשב השולחני עם ROS Melodic מותקן בצע:

ייצא ROS_MASTER_URI = https://192.168.0.108: 11311

ייצא ROS_IP = [your-desktop-computer-ip] rviz

כעת אתה אמור להיות מסוגל לראות זרמי תמונות של RGB ו- עומק ב- RVIZ כמו בצילום מסך 2 למעלה … אך לא בעת ובעונה אחת.

אוקיי, כאן מתחילים דברים פרוצים. ביליתי 3 ימים בניסיונות של נהגים וגישות שונות ושום דבר לא עבד - ברגע שהייתי מנסה לגשת לשני זרמים במקביל הקינקט יתחיל להתזמן כפי שאתה יכול לראות בצילום 3. ניסיתי הכל: אספקת חשמל טובה יותר, התחייבות ישנה יותר של libfreenect ו freenect_stack, עצירת usb_autosuspend, הזרקת אקונומיקה ליציאות USB (בסדר, לא האחרון! אל תעשה את זה, זו בדיחה ולא אמורה להוות עצה טכנית:)). ואז באחד הנושאים של Github ראיתי חשבון של אדם שאמר שהקינקט שלהם אינו יציב, עד שהם "הטעינו את אוטובוס ה- USB" על ידי חיבור דונגל WiFi. ניסיתי את זה וזה עבד. מצד אחד, אני שמח שזה עבד. מצד שני, מישהו באמת צריך לתקן את זה. ובכן, בינתיים לאחר ש (בערך) תיקנו את זה, בואו נעבור לשלב הבא.

שלב 3: התקנת מפת RTAB עצמאית

התקנת מפת RTAB עצמאית
התקנת מפת RTAB עצמאית

ראשית יש לנו חבורה של תלות להתקנה:

למרות שיש חבילת 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

עכשיו בואו לשכפל את מאגר git החבילה העצמאית של rtab לתיקיית הבית שלנו ולבנות אותו. השתמשתי במהדורה האחרונה (0.18.0).

שיבוט git

cd rtabmap/build

cmake..

לעשות -j2

sudo עשה התקנה

sudo ldconfig rtabmap

כעת כאשר ריכזנו RTAB MAP עצמאי, אנו יכולים לעבור לשלב האחרון - הידור והתקנת עטיפת ROS עבור RTAB MAP, rtabmap_ros.

שלב 4: התקנת Rtabmap_ros

התקנת Rtabmap_ros
התקנת Rtabmap_ros

אם הגעת עד כדי כך, אתה בטח מכיר את התרגיל עד עכשיו:) שיבוט את מאגר rtabmap_ros לתיקיית ה- src של סביבת העבודה של catkin. (בצע את הפקודה הבאה ממך תיקיית src של סביבת העבודה של catkin!)

שיבוט git

נזדקק גם לחבילות ה- ROS האלה, ש- rtabmap_ros תלוי ב:

שיבוט git

שיבוט git

שיבוט git

שיבוט git

שיבוט git

לפני שתתחיל לאסוף אתה יכול לוודא שלא חסרות לך תלות עם הפקודה הבאה:

rosdep להתקין-מתוך נתיבים src --ignore-src

התקן תלות נוספת מ- ap-get (אלה לא יפריעו לקישור, אלא יגרמו לשגיאה במהלך האוסף)

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

לאחר מכן, עברו לתיקיית סביבת העבודה של catkin והתחילו לאסוף:

תקליטור..

catkin_make -j2

מקווה שלא שמתם את משקה האוסף האהוב עליכם לשום מקום רחוק מדי. לאחר סיום האוסף אנו מוכנים לבצע את המיפוי!

שלב 5: הצג זמן

הצג זמן
הצג זמן
הצג זמן
הצג זמן

בצע את הטריק המטורף הזה עם הוספת משהו כמו WiFi או דונגל Bluetooth ליציאת USB - השתמשתי ב -2 יציאות USB 2.0, אחת עבור Kinect, השנייה עבור dongle WiFi.

ב- 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 depth_registration: = data_skip true: = 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 --OdomF2M/MaxSize 1000-: = שקר

תראה את הפלט כמו בצילום מסך 1. "עצירת RGB והתקנת עומק של המכשיר." מציין כי Kinect מוכן, אך עדיין לא נרשם דבר לנושאיו. במסוף השני אתה אמור לראות הודעות על איכות odom. אם תזיז את Kinect מהר מדי, איכות ה- odom תעלה ל- 0 ותצטרך לעבור למיקום קודם או להתחיל ממסד נתונים נקי.

במחשב השולחני שלך עם חבילת ROS Melodic וחבילת rtab_map מותקנת (אני ממליץ לך להשתמש במחשב אובונטו לשם כך, שכן חבילות מובנות זמינות עבור ארכיטקטורת 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

הוסף אותי בלינקדאין אם יש לך שאלות והירשם לערוץ היוטיוב שלי כדי לקבל הודעה על פרויקטים מעניינים יותר הקשורים ללמידת מכונות ורובוטיקה.

מוּמלָץ: