#◆ 前回記事
RaspberryPi3とZumoとROSで半永久自走式充放電ロボを作成したい_012日目_SLAM_ORB-SLAM2 の続き
#◆ はじめに
今回は VINS-Mono
を試行してみる。
ドローンを使用した空中での自己位置推定を想定したアルゴリズムのようだ。
いよいよSLAM検証祭り最終回。
Visual-SLAMは やりたいこと の要件には合わないことがわかってきたが、せっかくなので最後までしっかり検証しようと思う。
ちなみに当方、ドローンは所持していない。
今回 | 他記事 | アルゴリズム | 特徴 |
---|---|---|---|
008日目 | Gmapping | 一番有名らしい、ROS対応、loop closure有り | |
009日目 | Google Cartographer | 精度が高そう、ROS対応、loop closure有り | |
010日目 | Hector SLAM | 精度がいまいちっぽい、loop closure無し | |
011日目 | Karto SLAM | 単眼カメラでも動く、ROS対応、Visual-SLAM | |
012日目 | ORB-SLAM2 | 単眼カメラでも動く、Visual-SLAM | |
007日目 | mono-vo | 単眼カメラでも動く、Visual-SLAM | |
★ | VINS-Mono | 単眼カメラでも動く、ROS対応、Visual-SLAM、ドローン | |
ー | ー | CNN-SLAM | 単眼カメラでも動く、3D、アイデアのメモ情報しか見当たらなかったため検証対象外とする |
ー | ー | RGBD-SLAM-V2 | RGB-Dカメラ専用、検証対象外とする |
#◆ 参考にさせていただいた記事、謝辞
【公式】
https://github.com/HKUST-Aerial-Robotics/VINS-Mono
#◆ 作業に着手する前の前提条件
Raspbian Stretch+NCS(Neural Compute Stick)+YoloV2+Webカメラ+ROSによるリアルタイム複数動体検知環境の構築 と 002日目 から 012日目 の記事を参考に、全ての作業を実施済みであり、導入済みパッケージの種類と数の同期がとれていることを前提とする。
#◆ UbuntuPCでのシミュレーション
このフェーズで使用する検証環境は下記。
■ 検証用PC
- OS:Ubuntu 16.04
- CPU:第3世代 Intel Core i7-3517U(1.9GHz)
- MEM:16GB
- ROS kinetic
##● シミュレーション環境構築
$ sudo apt install libceres-dev libceres1
$ cd ~/catkin_ws/src
$ git clone https://github.com/PINTO0309/VINS-Mono.git
$ cd ../
$ catkin_make
$ source devel/setup.bash
$ wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_05_difficult/MH_05_difficult.bag
$ wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_05_difficult/MH_05_difficult.zip
$ unzip MH_05_difficult.zip;rm MH_05_difficult.zip
##● ドローン飛行シミュレーションデータによるSLAM
$ roslaunch vins_estimator euroc.launch
$ roslaunch vins_estimator vins_rviz.launch
$ rosbag play MH_05_difficult.bag
って・・・ うぉぉ!! すごい!!
Visual-SLAMの中でも最も素晴らしいと感じた。
"地図" ではないけど、軌道はすごい精度で推定してプロットできている気がする。
bagファイルに記録されている情報に、単眼カメラ画像だけではなく慣性情報(IMU)も含まれているため、若干反則気味だけど。。。
グランドトゥルース(実際に実機が移動した軌跡)も一緒に描画したいときは、 rosbag play
を実行する直前で下記を実行しておく。
グランドトゥルースは赤い線で描画される。
$ roslaunch benchmark_publisher publish.launch sequence_name:=MH_05_difficult
##● ARのデモ
なんのことだか分からないが、公式チュートリアルに 「ARデモ」 というセクションがあったので一応実行してみる。
$ cd ~/catkin_ws
$ wget -O ar_box.bag https://www.dropbox.com/s/s29oygyhwmllw9k/ar_box.bag?dl=0
$ roslaunch ar_demo 3dm_bag.launch
$ roslaunch ar_demo ar_rviz.launch
$ rosbag play ar_box.bag
著しく本題とはかけ離れるけど、 おもしろい!!
これまでの作業経過により、自作したロボットからIMUをパブリッシュする仕組みは構築済みのため、単眼カメラからの映像入力+IMUの組み合わせで、立体的な動きをトレースすることも可能となりそうだ。
ただ、要件上は立体的な自己位置推定は不要なため、RaspberryPiによる検証はスキップする。
#◆ 本日のまとめ
- 段々と回を重ねるごとに組み合わせ次第でどういうことができるかが分かってきた。 依然として理論は分からないけど。
- VINS-Mono は想像よりも負荷が高くなさそうだ。
- VINS-Mono は mono-vo のアルゴリズムに慣性情報を足して、立体軌道をプロットできるようにした強化版アルゴリズム、というイメージかな。
- CNN-SLAM は実行環境が見当たらなかったため、急遽検証を取りやめる。
- SLAM祭り、猛烈に大変だったけど楽しかった。 少しだけ達成感。
#◆ 次回予告
次回は Google CartoGrapher
を使用し、遠隔制御で走行させたロボットから地図データを収集して、我が家の1フロア分の地図を完成させてみたい。
#◆ 次回記事
RaspberryPi3とZumoとROSで半永久自走式充放電ロボを作成したい_014日目_SLAM_自律走行の前準備_ロボット再構成と自宅の地図作成 【"沼" 突入中】 へ続く