おおたfabさんでは、「素人でもロボットをつくりたい」という勉強会を定期的に行っています。前回はLiDARを使って地図の作成を行いましたが、今回はKinectを使って地図作成にチャレンジします。
RGB-D SLAMとは
SLAMの説明はマクニカさんのサイトがよくまとまっています。
これまではLiDAR SLAMの実験でしたが、今回はDepth SLAMとなります。Microsoft Kinectセンサーで深度の情報が取得できるのでいろいろな記事が掲載されています。今回は以下のサイトを参考にさせていただきました。
- RGB-D SLAM With Kinect on Raspberry Pi 4 ROS Melodic
- ROS上でのKinect v1の導入方法
- Getting Started – OpenKinect
- RTABMAPの使い方
- ROSによる画像処理(Kinect版)
HARDWARE
- Raspberry Pi 4 4GB
- Kinect for Windows
SOFTWARE
- Ubuntu 18.04
- ROS Melodic
- libfreenect
libfreenect is a userspace driver for the Microsoft Kinect. It runs on Linux, OSX, and Windows and supports. (RGB and Depth Images、Motors、Accelerometer、LED、Audio) - rgbd_launch
This package contains launch files for using RGB-D devices such as the Microsoft Kinect in ROS. - freenect_stack
This stack provides a ROS interface to the Microsoft Kinect using the libfreenect library. - rtabmap
RTAB-Map library and standalone application. - rtabmap_ros
RTAB-Map’s ros-pkg. RTAB-Map is a RGB-D SLAM approach with real-time constraints.
Raspberry Pi 4のセットアップ
1. catkin_wsを作成
mkdir -p ~/catkin_ws/src
cd catkin_ws
catkin_make
source devel/setup.bash
2. libfreenectのインストール
cd ~/git/
git clone https://github.com/OpenKinect/libfreenect.git
cd libfreenect/
mkdir build
cd build
cmake ..
sudo make install
cd ../..
sudo cp libfreenect/platform/linux/udev/51-kinect.rules /etc/udev/rules.d
sudo udevadm trigger
3. rgbd_launchとfreenect_stackパッケージのインストール
cd ~/catkin_ws/src
git clone https://github.com/ros-drivers/rgbd_launch.git
git clone https://github.com/ros-drivers/freenect_stack.git
cd ~/catkin_ws
catkin_make
source ~/.bashrc
4. RTAB-Mapのスタンドアロンライブラリのインストール
cd ~/git
git clone https://github.com/introlab/rtabmap.git
cd rtabmap/build
cmake ..
make
sudo make install
5. RTAB-Map rosパッケージのインストール
cd catkin_ws/src
git clone https://github.com/introlab/rtabmap_ros.git
cd ..
catkin_make -j4
RGB-Depth SLAMを動かしてみる
1. KinnectをRaspberry Pi 4に接続する
2. 1番めのターミナルでkinectデータ取得ノードを起動する
roslaunch freenect_launch freenect.launch depth_registration:=true
3. 2番めのターミナルでimage_viewを立ち上げて画像トピックが流れているか確認する。
rosrun rqt_image_view rqt_image_view
GUIで表示したい画像トピックを選択すると画像が移ります。カラー画像は/camera/rgb/image_color,距離画像は/camera/depth_registered/imageです。
4. 3番目のターミナルでRTAB-Mapのノードを起動する
roslaunch rtabmap_ros rgbd_mapping.launch
5. Kinectを持ってゆっくり動いてみる。
6. rtabmapのノードを停止する。
7. 以下のコマンドで作成したマップが表示される。
/usr/local/bin/rtabmap-databaseViewer ~/.ros/rtabmap.db
実験結果
残念ながらおおたFabの勉強会では時間切れで良い結果が得られませんでした。
おおたFabさんからKinectをお借りして自宅で再度動かしたところ、RTAB-Mapで次のような結果が得られました。
部屋の角が見えています。
部屋の全景はこのような表示になりました。マウスで拡大・縮小・回転など自在に動かせます。
rtabmap-databaseViewerの結果はもっと良い画質に仕上がっているのですが、部屋が丸見えになってしまうので掲載は遠慮しておきます。
次回
次回はおおたFabさんでもう一度実験をして、Rvizでも結果を表示したいと考えています。