RTAB MAP やり方

研究室のPCでKinect v2を使ってRTAB-MAPをやってみました。

 Kinect v2はMicrosoftから2013年に発売されたもので、本来はモーションキャプチャのように人間の動きをゲームセンサーとして利用するデバイスです。深度センサが搭載されており、それをUbuntuでRGBDカメラとして利用し、SLAMを行いました。
 RTAB-MAPはRGBDカメラ,ステレオカメラ,Lidarを使ってSLAMが行えます。単眼カメラには対応していません。

今回はUbuntu16.04 + ROS kineticの環境で試してみました。kinect v2とROS kineticは綴りが似ていますが全然違うものです。
RTAB-MAPはROS上で動かさなくてもスタンドアローンで動かすこともできます。しかし、自分のPCには既にROS kineticが入っていて、ROS上で動かした方がインストールが簡単だったのでROS上でやっています。それとロボット制御などに活用する場合はROS上で動かした方が良いです。

ROS kineticのインストールは以下のサイトに従って行いました。ROSのバージョンは基本的にUbuntuのバージョンによって決まるので各環境に合ったROSを入れてください。
http://wiki.ros.org/ja/kinetic/Installation/Ubuntu

以下はRTAB-MAPをインストールしたときのコマンドです。この一行で入ってくれます。

sudo apt-get install ros-kinetic-rtabmap-ros

次にUbuntuKinect v2を認識するためにlibfreenect2の導入します。その後KinectをROS上で認識するためにiai_kinect2を導入します。このサイトを参考に導入しました。↓
qiita.com

上記のサイトでは以下のコマンドでKinect v2の接続確認を行っています。その際Kinect v2の線をUSBポートに接続しますがUSB3.0に接続してください。USB2.0に接続した場合には認識できませんでした。

$ ./bin/Protonect

Kinect v2がフリーズしてうまく行かないなどがあれば試しにNvidiaのドライバーを入れてみてください。詳細は以前こちらのページにまとめています。
sh090.hatenablog.com

RTAB-MAPをROS上でKinect v2を使って実行する際のコマンドです。

$ source ~/ros_ws/devel/setup.bash
$ roslaunch rtabmap_ros rgbd_mapping_kinect2.launch
$ rosrun kinect2_bridge kinect2_bridge  _publish_tf:=true

実際に研究室を撮影してみました。研究室の様子を見てもらうため通常の写真を載せときます。

f:id:shibuya_shogo:20200817172339j:plainf:id:shibuya_shogo:20200817172327j:plainf:id:shibuya_shogo:20200817172317j:plain

RTAB-MAP実行中の動画です。
youtu.be

3Dマップが赤くなっている時がありますが、自己位置をロストしているときです。懐中電灯を照らしているみたいにマップが出来上がっていきますね。
以下の画像はRTAB-MAPで出力した2Dの地図です。

f:id:shibuya_shogo:20200817014420p:plain
RTAB-MAP 2D
 これまで単眼SLAMを中心にやってきたので、それに比べるともちろん精度も良く(自己位置をロストしにくい)、また計算コストも少ないため小型のコンピュータでもRTAB-MAPは実行できます。深度センサがあるとスケールがわかるので、点郡間の距離を測ることで実際の距離やサイズも計測することができます。
以下のサイトでは、ドローンでステレオカメラ×RTAB-MAPを使って実際に対象物のサイズの測定を行なっているようです。誤差は7cm(計測値174.6cm,実測値182cm)となっています。

dronebiz.net