つまりなにするの?
単眼カメラを使ったVisualSLAMの技術をいろいろ試して、ロボットについて知見を得よう。と思った夏休み。
7Days自由研究とは?
7回構成でいままで触ったことのない技術に触れて自分のできることを増やして見ようと思った。
なので、ここで書いた内容は初見で試行錯誤したエンジニアのメモであり、エキスパートによるベストプラクティスで構成されているわけではないことに注意が必要。
サクセスクライテリア
- ミニマムサクセス:
バーチャルマシン上でVisualSLAMのサンプルを動かしてみる
- フルサクセス:
Webカメラの動画を使ってリアルタイムにVisualSLAMによる位置姿勢表示を試してみる
- エクストラサクセス:
精度はどうあれ、お外を歩き回って位置・姿勢がログに残るようにする
大まかな予定(未定)
- Day1 最近のVisual SLAMを調べてみる
- Day2 VirtualBox上でVisualSLAMを動かしてサンプル動画を使ってみたい
- Day3 Ubuntu16.04上でVisualSLAMを動かしてサンプル動画を使ってみたい
- Day4 ROSからVisualSLAMを使ってみたい
- Day5 ROSにUSBカメラを繋いでキャリブレーションしてみたい
- Day6 USBカメラとVisualSLAMを繋いで机の周りをスキャンしてみたい
- Day7 持ち歩けるPCにUSBカメラとVisualSLAMを導入して近所を歩き回りたい
最近のVisual SLAMを調べてみた
人がウロウロするときに目で周りを見てなんとなく距離を把握して歩き回っていて、。
ロボットでも似たようなかんじで歩き回ったり、ARとかMRで現実のものの上に3dモデルを乗っけたりするために使わるようす。
今回試すのはどちらかと言うと前者(ロボットがうろうろする)のためのVisualSLAMをやってみたい。
SLAMとは
SLAMとはSimultaneous Localization and Mappingのことで、自分の位置を推定することと環境の地図作成を同時にやる技術で、元はカメラよりもレーザレンジファインダとかでやるのがメジャーみたいです。レーザレンジファインダみたいにレーザで奥行きがわかるセンサのほうがやりやすいみたい(SLAM
https://staff.aist.go.jp/y-ichisugi/brain-archi/20140422YokozukaMasashi.pdf
)
こいつのいいところは、元の場所に戻ってきたら、戻ってきたことをちゃんと認識できることと、あとで地図が残っていること。
VisualSLAMにVisualがついているのは可視カメラでやるSLAMだからみたい。
ただ、VisualSLAMのカメラの種類にもいくつかあって、
- 単眼カメラ(普通のスマホみたいなの)
- ステレオカメラ(普通のスマホのカメラを2台並べてどうじにつかったもの)
- 全天球カメラ(Thetaみたいなの)
- RGB-Dカメラ(Kinectみたいに深さ(奥行き)情報まで含まれたもの)
があるものの、今回はお金がないので単眼カメラでできるやつに挑戦する。
他の手段は?
GPSでよくね?って思うけど、GPSは意外と精度は悪いし、衛星測位できない建物の中やビルの隙間では使えない。
モーションキャプチャでよくね?って思うけど、今度は部屋中にカメラを用意しなければいけない。
慣性航法でよくね?って思うけど、超高い光ファイバーとか使ったやつでもだんだんずれていっちゃう。
これらをうまく組み合わせればアプリケーションによっては確かにいい感じに位置情報を捉え続けることはできるかもしれない。ただ普通のWebカメラ1台でそこそこ歩き回って戻ってこられるのは魅力的!というわけでVisualSLAMをやってみたい。
VisualSLAMの種類
VisualSLAMは画像から抽出する特徴の密集度合いで分類できるみたいで、
疎なものから順にSparse, Semi−Dense, Denseがある。
どちらがいい悪いというのは使い方によるのでなんとも言えないけど、
外も歩き回りたいんだってなるとSparseやSemi-Denseくらい疎なほうが良いようです。
というわけで候補に上がったのがこの2つ、
Semi-DenseのLSD-SLAM
LSD-SLAM: Large-Scale Direct Monocular SLAM (ECCV '14)
github.com
SparseのORB-SLAM2(1もあるけど2のほうが性能がいいらしい)
ORB-SLAM2: an Open-Source SLAM for Monocular, Stereo and RGB-D Cameras
github.com
シンプルなLSD-SLAMから試してみたいと思います。
Day-2はこちら
ensekitt.hatenablog.com