Mục lục:

RGB-D SLAM với Kinect trên Raspberry Pi 4 [Buster] ROS Melodic: 6 bước
RGB-D SLAM với Kinect trên Raspberry Pi 4 [Buster] ROS Melodic: 6 bước

Video: RGB-D SLAM với Kinect trên Raspberry Pi 4 [Buster] ROS Melodic: 6 bước

Video: RGB-D SLAM với Kinect trên Raspberry Pi 4 [Buster] ROS Melodic: 6 bước
Video: RGB-D SLAM With Kinect on Raspberry Pi 4 ROS Melodic 2024, Tháng mười một
Anonim
Image
Image

Năm ngoái, tôi đã viết một bài báo về việc xây dựng và cài đặt ROS Melodic trên Raspberry Pi mới (tại thời điểm đó) với Hệ điều hành Debian Buster. Bài viết đã nhận được rất nhiều sự chú ý trên cả các kênh truyền hình và các nền tảng khác. Tôi rất vui vì tôi đã giúp rất nhiều người cài đặt thành công ROS trên Raspberry Pi. Trong video đi kèm, tôi cũng đã chứng minh ngắn gọn việc lấy hình ảnh chiều sâu từ Kinect 360. Sau đó, nhiều người đã liên hệ với tôi trên LinkedIn và hỏi tôi làm cách nào để sử dụng Kinect với Raspberry Pi. Tôi hơi ngạc nhiên về câu hỏi này, vì quá trình chuẩn bị Kinect vào thời điểm đó khiến tôi mất khoảng 3-4 giờ và không có vẻ gì là cực kỳ phức tạp. Tôi đã chia sẻ tệp.bash_history của mình với tất cả những người hỏi tôi về vấn đề này và cuối cùng vào tháng 4, tôi đã tìm thấy thời gian để viết một bài báo về cách cài đặt trình điều khiển Kinect và thực hiện RGB-D SLAM với RTAB-MAP ROS. Hàng tuần mất ngủ sau khi bắt đầu viết bài, giờ tôi đã hiểu tại sao nhiều người hỏi tôi câu này:)

Tôi sẽ bắt đầu với lời giải thích ngắn gọn về những cách tiếp cận đã hiệu quả và cách nào không. Sau đó, tôi sẽ giải thích cách cài đặt trình điều khiển Kinect để sử dụng với ROS Melodic và cuối cùng là cách thiết lập máy của bạn cho RGB-D SLAM với RTAB-MAP ROS.

Bước 1: Điều gì hiệu quả và điều gì không hiệu quả

Có một vài trình điều khiển có sẵn cho Kinect trên Raspberry Pi - trong số đó có hai trình điều khiển được hỗ trợ bởi ROS.

Trình điều khiển OpenNI - gói openni_camera cho ROS

Trình điều khiển libfreenect - gói freenect_stack cho ROS

Nếu bạn nhìn vào kho GitHub tương ứng của họ, bạn có thể thấy rằng trình điều khiển OpenNI đã được cập nhật lần cuối cách đây nhiều năm và trên thực tế là EOL trong một thời gian dài. ibfreekinect mặt khác đang được cập nhật kịp thời. Tương tự đối với các gói ROS tương ứng của chúng, freenect_stack được phát hành cho ROS melodic, trong khi bản phân phối cuối cùng mà openni_camera đã liệt kê hỗ trợ là Fuerte…

Có thể biên dịch và cài đặt trình điều khiển OpenNI và gói openni_camera trên Raspberry Pi cho ROS Melodic, mặc dù nó không hoạt động với tôi. Để thực hiện việc đó, hãy làm theo hướng dẫn này, bước 1, 2, 3, trên bước 2 và 3, hãy xóa cờ "-mfloat-abi = softfp" khỏi tệp Platform / Linux / Build / Common / Platform. ARM (theo lời khuyên về điều này Vấn đề trên Github). Sau đó, sao chép gói openni_camera vào không gian làm việc catkin của bạn và biên dịch với catkin_make. Tuy nhiên, nó không hoạt động với tôi, lỗi tạo độ sâu không thành công. Lý do: Giao diện USB không được hỗ trợ!

Cuối cùng, việc sử dụng libfreenect và freenect_stack đã mang lại thành công, nhưng có khá nhiều vấn đề cần giải quyết và giải pháp hơi khó giải quyết, mặc dù hoạt động rất ổn định (1 giờ + hoạt động liên tục).

Bước 2: Cài đặt trình điều khiển Freenect và Freenect_stack

Cài đặt trình điều khiển Freenect và Freenect_stack
Cài đặt trình điều khiển Freenect và Freenect_stack

Tôi giả sử rằng bạn sử dụng hình ảnh ROS Melodic Desktop của tôi từ bài viết này. Nếu bạn muốn cài đặt trong môi trường khác, ví dụ như ảnh ros_comm hoặc trong Ubuntu cho Raspberry Pi, hãy đảm bảo rằng bạn có đủ kiến thức về ROS để giải quyết các vấn đề có thể phát sinh từ sự khác biệt đó.

Hãy bắt đầu bằng cách xây dựng trình điều khiển libfreenect từ nguồn, vì phiên bản tạo sẵn của kho lưu trữ apt-get đã quá lỗi thời.

sudo apt-get cập nhật

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

git clone

cd libfreenect

mkdir build && cd build

cmake -L..

chế tạo

sudo thực hiện cài đặt

Hy vọng rằng quá trình xây dựng sẽ suôn sẻ và tràn đầy thông điệp thân thiện với môi trường xanh. Sau khi bạn cài đặt trình điều khiển libfreenect, việc tiếp theo cần làm là cài đặt gói freenect_stack cho ROS. Có khá nhiều gói khác mà nó phụ thuộc vào, chúng tôi sẽ phải sao chép chúng và xây dựng với catkin_make tất cả cùng nhau. Trước khi bắt đầu, hãy đảm bảo rằng không gian làm việc catkin của bạn được thiết lập đúng cách và có nguồn gốc!

Từ thư mục src không gian làm việc catkin của bạn:

git clone

git clone

git clone

git clone

git clone

git clone

Ồ, đó là rất nhiều nhân bản.

CHỈNH SỬA SAU: Như đã được một độc giả của tôi chỉ ra, kho lưu trữ vision_opencv cần được đặt thành nhánh du dương. Đối với cd đó vào src / vision_opencv và thực thi

git checkout du dương

Sau đó quay lại thư mục không gian làm việc catkin của bạn. Để kiểm tra xem chúng tôi có phụ thuộc cho tất cả các gói tại chỗ hay không, hãy thực hiện lệnh này:

cài đặt rosdep - từ đường dẫn src --ignore-src

Nếu bạn đã nhân bản thành công tất cả các gói cần thiết, nó sẽ yêu cầu tải xuống libfreekinect bằng apt-get. Trả lời không, vì chúng tôi đã cài đặt nó từ nguồn.

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

catkin_make -j2

Giờ uống trà;) hoặc bất cứ thức uống yêu thích nào của bạn.

Sau khi quá trình biên dịch kết thúc, bạn có thể thử khởi chạy ngăn xếp kinect và kiểm tra xem nó có xuất ra hình ảnh độ sâu và màu sắc phù hợp hay không. Tôi sử dụng Raspberry Pi không có đầu, vì vậy tôi cần chạy RVIZ trên máy tính để bàn của mình.

Trên Raspberry Pi làm (Thay đổi địa chỉ IP thành địa chỉ IP của Raspberry Pi của bạn!):

xuất ROS_MASTER_URI = https://192.168.0.108: 11311

xuất ROS_IP = 192.168.0.108

roslaunch freenect_launch freenect.launch depth_registration: = true

Bạn sẽ thấy đầu ra như trong Ảnh chụp màn hình 1. "Dừng thiết bị RGB và độ sâu luồng tuôn ra." cho biết rằng Kinect đã sẵn sàng, nhưng chưa có gì được đăng ký cho các chủ đề của nó.

Trên máy tính để bàn của bạn có cài đặt ROS Melodic, hãy thực hiện:

xuất ROS_MASTER_URI = https://192.168.0.108: 11311

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

Bây giờ bạn sẽ có thể xem các luồng hình ảnh RGB và Độ sâu trong RVIZ như trong Ảnh chụp màn hình 2 ở trên… nhưng không phải cùng một lúc.

Được rồi, đây là nơi mà những thứ hacky bắt đầu. Tôi đã dành 3 ngày để thử các trình điều khiển và cách tiếp cận khác nhau và không có gì hiệu quả - ngay sau khi tôi thử truy cập hai luồng đồng thời, Kinect sẽ bắt đầu hết thời gian như bạn có thể thấy trong Ảnh chụp màn hình 3. Tôi đã thử mọi thứ: cung cấp điện tốt hơn, các cam kết cũ hơn của libfreenect và freenect_stack, dừng usb_autosuspend, tiêm thuốc tẩy vào cổng USB (được rồi, không phải là cuối cùng! Đừng làm vậy, đó là một trò đùa và không nên tạo thành một lời khuyên kỹ thuật:)). Sau đó, trong một số vấn đề của Github, tôi thấy tài khoản của một người nói rằng Kinect của họ không ổn định, cho đến khi họ "tải USB bus" bằng cách kết nối WiFi dongle. Tôi đã thử điều đó và nó hoạt động. Một mặt, tôi rất vui vì nó đã hoạt động. Mặt khác, ai đó thực sự phải sửa chữa điều đó. Chà, trong khi (đại loại) đã khắc phục điều đó, chúng ta hãy chuyển sang bước tiếp theo.

Bước 3: Cài đặt RTAB MAP độc lập

Cài đặt RTAB MAP độc lập
Cài đặt RTAB MAP độc lập

Đầu tiên, chúng tôi có một loạt các phụ thuộc cần được cài đặt:

Mặc dù có một gói armhf dựng sẵn cho PCL, chúng tôi sẽ cần phải biên dịch nó từ nguồn vì vấn đề này. Tham khảo kho lưu trữ PCL GitHub để xem cách biên dịch nó từ nguồn.

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

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

Bây giờ, hãy sao chép kho lưu trữ git gói git độc lập của bản đồ rtab vào thư mục chính của chúng ta và xây dựng nó. Tôi đã sử dụng bản phát hành mới nhất (0.18.0).

git clone

cd rtabmap / bản dựng

cmake..

make -j2

sudo thực hiện cài đặt

sudo ldconfig rtabmap

Bây giờ khi chúng ta đã biên dịch RTAB MAP độc lập, chúng ta có thể chuyển sang bước cuối cùng - biên dịch và cài đặt trình bao bọc ROS cho RTAB MAP, rtabmap_ros.

Bước 4: Cài đặt Rtabmap_ros

Cài đặt Rtabmap_ros
Cài đặt Rtabmap_ros

Nếu bạn đã hiểu đến mức đó, chắc hẳn bạn đã biết rõ về vấn đề này:) Sao chép kho lưu trữ rtabmap_ros vào thư mục src không gian làm việc catkin của bạn. (Thực hiện lệnh tiếp theo từ thư mục src không gian làm việc catkin của bạn!)

git clone

Chúng tôi cũng sẽ cần các gói ROS này, rtabmap_ros đó phụ thuộc vào:

git clone

git clone

git clone

git clone

git clone

Trước khi bắt đầu biên dịch, bạn có thể đảm bảo rằng mình không thiếu bất kỳ phần phụ thuộc nào bằng lệnh sau:

cài đặt rosdep - từ đường dẫn src --ignore-src

Cài đặt thêm các phần phụ thuộc từ ap-get (những phần này sẽ không làm gián đoạn liên kết, nhưng sẽ gây ra lỗi trong quá trình biên dịch)

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

Sau đó, di chuyển đến thư mục không gian làm việc catkin của bạn và bắt đầu biên dịch:

đĩa CD..

catkin_make -j2

Hy vọng bạn đã không đặt thức uống tổng hợp yêu thích của mình ở đâu quá xa. Sau khi biên dịch xong, chúng tôi đã sẵn sàng để lập bản đồ!

Bước 5: Hiển thị thời gian

Hiển thị thời gian
Hiển thị thời gian
Hiển thị thời gian
Hiển thị thời gian

Thực hiện thủ thuật hacky đó bằng cách thêm một thứ gì đó như Wi-Fi hoặc Bluetooth dongle vào cổng USB - Tôi đang sử dụng 2 cổng USB 2.0, một cổng cho Kinect, cổng còn lại cho khóa Wi-Fi.

Trên Raspberry Pi thực hiện (Thay đổi địa chỉ IP thành địa chỉ IP của Raspberry Pi của bạn!): Thiết bị đầu cuối thứ nhất:

xuất ROS_MASTER_URI = https://192.168.0.108: 11311

xuất ROS_IP = 192.168.0.108

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

Nhà ga thứ 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 2: = false

Bạn sẽ thấy đầu ra như trong Ảnh chụp màn hình 1. "Dừng thiết bị RGB và độ sâu luồng tuôn ra." cho biết Kinect đã sẵn sàng, nhưng vẫn chưa có gì được đăng ký cho các chủ đề của nó. Ở thiết bị đầu cuối thứ hai, bạn sẽ thấy các thông báo về chất lượng odom. Nếu bạn di chuyển Kinect quá nhanh, chất lượng odom sẽ về 0 và bạn sẽ cần chuyển đến vị trí trước đó hoặc bắt đầu từ cơ sở dữ liệu sạch.

Trên máy tính để bàn của bạn có cài đặt gói ROS Melodic và rtab_map (tôi khuyên bạn nên sử dụng máy tính Ubuntu cho điều đó, vì các gói được tạo sẵn có sẵn cho kiến trúc amd64), hãy thực hiện:

xuất ROS_MASTER_URI = https://192.168.0.108: 11311

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

rviz

Thêm các màn hình MapGraph và MapCloud vào rviz và chọn các chủ đề tương ứng đến từ rtab_map. Chà, đây rồi, vị ngọt ngào của chiến thắng! Hãy tiếp tục và thực hiện một số ánh xạ:)

Bước 6: Tham khảo

Trong khi viết bài này, tôi đã tham khảo một số tài nguyên, chủ yếu là các diễn đàn và các vấn đề về GitHub. Tôi sẽ để chúng ở đây.

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

Thêm tôi trên LinkedIn nếu bạn có bất kỳ câu hỏi nào và đăng ký kênh YouTube của tôi để nhận thông báo về các dự án thú vị hơn liên quan đến học máy và người máy.

Đề xuất: