สารบัญ:

RGB-D SLAM พร้อม Kinect บน Raspberry Pi 4 [Buster] ROS Melodic: 6 Steps
RGB-D SLAM พร้อม Kinect บน Raspberry Pi 4 [Buster] ROS Melodic: 6 Steps

วีดีโอ: RGB-D SLAM พร้อม Kinect บน Raspberry Pi 4 [Buster] ROS Melodic: 6 Steps

วีดีโอ: RGB-D SLAM พร้อม Kinect บน Raspberry Pi 4 [Buster] ROS Melodic: 6 Steps
วีดีโอ: 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 ไพเราะในขณะที่เขา 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 ให้ผลสำเร็จในท้ายที่สุด แต่มีปัญหาค่อนข้างน้อยที่ต้องแก้ไขและวิธีแก้ปัญหาค่อนข้างแฮ็กแม้ว่าจะทำงานได้เสถียรมาก (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 update

sudo apt-get ติดตั้ง libusb-1.0-0-dev

โคลน git

cd libfreenect

mkdir build && cd build

cmake -L..

ทำ

sudo ทำการติดตั้ง

หวังว่ากระบวนการสร้างจะราบรื่นและเต็มไปด้วยข้อความที่เป็นมิตรต่อสิ่งแวดล้อม หลังจากที่คุณติดตั้งไดรเวอร์ libfreenect แล้ว สิ่งที่ต้องทำต่อไปคือติดตั้งแพ็คเกจ freenect_stack สำหรับ ROS มีแพ็คเกจอื่น ๆ ค่อนข้างน้อยที่เราจะต้องโคลนและสร้างด้วย catkin_make ทั้งหมดเข้าด้วยกัน ก่อนที่คุณจะเริ่ม ตรวจสอบให้แน่ใจว่าพื้นที่ทำงาน catkin ของคุณได้รับการตั้งค่าและจัดหาอย่างถูกต้อง!

จากโฟลเดอร์ catkin workspace src ของคุณ:

โคลน git

โคลน git

โคลน git

โคลน git

โคลน git

โคลน git

โอ้โห โคลนนิ่งมาก

แก้ไขภายหลัง: ตามที่ผู้อ่านคนหนึ่งของฉันชี้ให้เห็น ที่เก็บ vision_opencv จำเป็นต้องตั้งค่าเป็นสาขาไพเราะ สำหรับ cd นั้นไปที่ src/vision_opencv และดำเนินการ

git ชำระเงินไพเราะ

จากนั้นกลับไปที่โฟลเดอร์พื้นที่ทำงาน catkin ของคุณ ในการตรวจสอบว่าเราพึ่งพาแพ็คเกจทั้งหมดหรือไม่ให้รันคำสั่งนี้:

การติดตั้ง rosdep --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 ทำ (เปลี่ยนที่อยู่ IP เป็นที่อยู่ IP ของ Raspberry Pi ของคุณ!):

ส่งออก ROS_MASTER_URI=https://192.168.0.108:11311

ส่งออก ROS_IP=192.168.0.108

roslaunch freenect_launch freenect.launch ความลึก_registration:=true

คุณจะเห็นผลลัพธ์ดังในภาพหน้าจอ 1 "การหยุดอุปกรณ์ RGB และการล้างสตรีมความลึก" แสดงว่า Kinect พร้อมแล้ว แต่ยังไม่มีการสมัครรับข้อมูลในหัวข้อ

บนคอมพิวเตอร์เดสก์ท็อปที่ติดตั้ง ROS Melodic ให้ทำดังนี้

ส่งออก ROS_MASTER_URI=https://192.168.0.108:11311

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

ตอนนี้ คุณควรจะสามารถเห็นสตรีมภาพ RGB และความลึกใน RVIZ ได้เหมือนในภาพหน้าจอที่ 2 ด้านบน… แต่ไม่ใช่ในเวลาเดียวกัน

โอเค นี่คือจุดเริ่มต้นของการแฮ็ก ฉันใช้เวลา 3 วันในการลองใช้ไดรเวอร์และแนวทางต่างๆ และไม่มีอะไรทำงาน - ทันทีที่ฉันลองเข้าถึงสองสตรีมพร้อมกัน Kinect จะเริ่มหมดเวลาดังที่คุณเห็นในสกรีนช็อต 3 ฉันลองทุกอย่างแล้ว: แหล่งจ่ายไฟที่ดีขึ้น, การกระทำที่เก่ากว่าของ libfreenect และ freenect_stack, หยุด usb_autosuspend, ฉีดสารฟอกขาวลงในพอร์ต USB (โอเค ไม่ใช่อันสุดท้าย! อย่าทำ มันเป็นเรื่องตลกและไม่ควรถือเป็นคำแนะนำทางเทคนิค:)) จากนั้นในปัญหาหนึ่งของ Github ฉันเห็นบัญชีของบุคคลที่กล่าวว่า Kinect ของพวกเขาไม่เสถียร จนกว่าพวกเขาจะ "โหลดบัส USB" โดยเชื่อมต่อดองเกิล WiFi ฉันลองแล้วได้ผล ด้านหนึ่งฉันดีใจที่มันได้ผล ในทางกลับกัน ใครบางคนควรจะแก้ไขสิ่งนั้นจริงๆ ในขณะที่มี (ประเภท) แก้ไขปัญหานั้นแล้ว ไปที่ขั้นตอนต่อไป

ขั้นตอนที่ 3: การติดตั้ง RTAB MAP แบบสแตนด์อโลน

การติดตั้ง RTAB MAP แบบสแตนด์อโลน
การติดตั้ง RTAB MAP แบบสแตนด์อโลน

อันดับแรก เรามีการพึ่งพาจำนวนมากที่จะติดตั้ง:

แม้ว่าจะมีแพ็คเกจ armhf ที่สร้างไว้ล่วงหน้าสำหรับ PCL แต่เราจำเป็นต้องรวบรวมจากแหล่งที่มาเนื่องจากปัญหานี้ ปรึกษาที่เก็บ 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 ทำการติดตั้ง

sudo ldconfig rtabmap

ตอนนี้เมื่อเราคอมไพล์ RTAB MAP แบบสแตนด์อโลนแล้ว เราสามารถย้ายไปยังขั้นตอนสุดท้าย - รวบรวมและติดตั้ง ROS wrapper สำหรับ RTAB MAP, 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 --from-paths src --ignore-src

ติดตั้งการพึ่งพาเพิ่มเติมจาก ap-get (สิ่งเหล่านี้จะไม่ขัดจังหวะการลิงก์ แต่จะเกิดข้อผิดพลาดระหว่างการรวบรวม)

sudo apt-get ติดตั้ง libsdl-image1.2-dev

จากนั้นย้ายไปยังโฟลเดอร์พื้นที่ทำงาน catkin ของคุณและเริ่มรวบรวม:

ซีดี..

catkin_make -j2

หวังว่าคุณจะไม่ได้ใส่เครื่องดื่มที่คุณโปรดปรานมากเกินไป หลังจากรวบรวมเสร็จแล้ว เราก็พร้อมที่จะทำแผนที่!

ขั้นตอนที่ 5: แสดงเวลา

เวลาแสดง
เวลาแสดง
เวลาแสดง
เวลาแสดง

ทำเคล็ดลับที่แฮ็กด้วยการเพิ่มบางอย่างเช่น WiFi หรือดองเกิล Bluetooth ลงในพอร์ต USB - ฉันใช้พอร์ต USB 2.0 2 พอร์ต พอร์ตหนึ่งสำหรับ Kinect และอีกพอร์ตหนึ่งสำหรับดองเกิล WiFi

บน Raspberry Pi ทำ (เปลี่ยนที่อยู่ IP เป็นที่อยู่ IP ของ Raspberry Pi ของคุณ!): 1 เทอร์มินัล:

ส่งออก ROS_MASTER_URI=https://192.168.0.108:11311

ส่งออก ROS_IP=192.168.0.108

roslaunch freenect_launch freenect.launch ความลึก_registration:=true data_skip:=2

เทอร์มินัลที่ 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 --OdomrtF2M/MaxSize Decimation 1000 --Odomation":=เท็จ

คุณจะเห็นผลลัพธ์ดังในภาพหน้าจอ 1 "การหยุดอุปกรณ์ RGB และการล้างสตรีมความลึก" บ่งชี้ว่า Kinect พร้อมแล้ว แต่ยังไม่มีการสมัครรับข้อมูลหัวข้อในเทอร์มินัลที่สอง คุณควรเห็นข้อความเกี่ยวกับคุณภาพที่ไม่เหมาะสม หากคุณย้าย Kinect เร็วเกินไป คุณภาพ odom จะเป็น 0 และคุณจะต้องย้ายไปยังตำแหน่งก่อนหน้าหรือเริ่มจากฐานข้อมูลใหม่ทั้งหมด

บนคอมพิวเตอร์เดสก์ท็อปของคุณที่ติดตั้งแพ็คเกจ ROS Melodic และ rtab_map (ฉันแนะนำให้คุณใช้คอมพิวเตอร์ Ubuntu สำหรับสิ่งนั้น เนื่องจากแพ็คเกจที่สร้างไว้ล่วงหน้าพร้อมใช้งานสำหรับสถาปัตยกรรม 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

เพิ่มฉันใน LinkedIn หากคุณมีคำถามใดๆ และสมัครรับข้อมูลจากช่อง YouTube ของฉัน เพื่อรับการแจ้งเตือนเกี่ยวกับโครงการที่น่าสนใจอื่นๆ ที่เกี่ยวข้องกับแมชชีนเลิร์นนิงและวิทยาการหุ่นยนต์

แนะนำ: