SLAMの調査

SLAMのオープンソースソフトウェアであるORB-SLAM3とrtabmap_rosを試した話です。

SLAMとは

SLAM (Simultaneous Localization and Mapping) とは、カメラやセンサを搭載したロボット等の移動体が、移動個所の地図を作成し、自身の位置を認識する技術です。カメラで実現するVisual SLAM、測距デバイスによる深度画像で実現するDepth SLAMが代表的な方式です。

[Visual SLAM] ORB-SLAM3 + Webカメラ

Visual SLAM に興味があったので、オープンソースのプログラムを探した所、情報が比較的得られた ORB-SLAM3 に絞りました。このような高度な技術を無償で公開している方々には感謝です。カメラは安価なウェブカメラ(Logicool C310)を使用。カメラのキャリブレーションデータの作成は割愛しました。

少し動かしてみて、マッピングにはかなりコツが必要なことが判明。ORB-SLAM3 の Visual SLAM では可視光画像から抽出した特徴点を元にマッピングします。視界内の特徴点の集合がすでに撮影された集合と部分的に一致しなければ現在地を把握できなくなります。現在地(相対位置と撮影方向のベクトル)を把握できない状態でいくら撮影してもマッピングは進みません。例えば急激に撮影方向を変えたり、視界を一時的に遮ったり、特徴点の少ない箇所を撮影すると簡単に現在地の追跡が外れます。

実行結果

この実行動画ではカーテンの模様は特徴点を多く抽出できています。対して左側の戸や壁は特徴点が非常に少なく、マッピングが難しくなっています。

とは言ってもキャリブレーションなし、手持ちでの撮影、可視光画像のみという条件である程度動作するというのはなかなか凄いことです。なお、動画がカクカクしていますが、録画の都合上フレームレートが低くなってしまっただけで、実際はもっと滑らかです。

[Depth SLAM] RealSense + rtabmap_ros

D435i

可視光の情報だけでは相当難しいことがわかったので、カメラを変更することにしました。Intel RealSense D435i を約5万円で購入。可視光、深度、IMU(加速度・ジャイロセンサ) を搭載してこの価格はお買い得。三脚も同梱。

とりあえずRealSenseのビューアで画像を確認。

全体的にはよく深度情報が取得できていると思います。D435iの深度センサは近赤外線を投射してステレオカメラで撮影するタイプなので照明の影響を受けます。蛍光灯の光が強く当たっているモニタの上辺りは深度を正常に取得できていないことがわかります。

実行結果

SLAMのプログラムは rtabmap_rosを使用。動かしてみるとリアルタイムに3次元の画像が構成されていく様子に感動しました…が、やはり現在地の追跡を継続させるにはORB-SLAM3のときと同じようなコツが必要でした。印象としては深度情報があるのでマッピングされた構造物の距離感は比較的良好。IMUのおかげでカメラ方向の検知は良好。それでも現在地の追跡を継続して撮影するのはかなり難しかったです。

もっとゴチャゴチャっとした特徴点を抽出しやすい場所でも大差はありませんでした。YouTubeで公開されている同じ手法を使った動画をいくつか見る限りでは調整すればもっと使えそうなのですが、時間の都合で調査はここまでとしました。