LoginSignup
9
10

More than 5 years have passed since last update.

RaspberryPi3とZumoとROSで半永久自走式充放電ロボを作成したい_013日目_SLAM_VINS-Mono

Last updated at Posted at 2018-05-22

◆ 前回記事

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

  1. OS:Ubuntu 16.04
  2. CPU:第3世代 Intel Core i7-3517U(1.9GHz)
  3. MEM:16GB
  4. ROS kinetic

● シミュレーション環境構築

VINS-MonoのCloneとビルド_91MB
$ 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
サンプルデータとグランドトゥルースデータのダウンロード_1.5GB+1.6GB
$ 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

■ bagファイルの中身
masked.png

● ドローン飛行シミュレーションデータによるSLAM

VINS-Mono本体の起動
$ roslaunch vins_estimator euroc.launch
rvizの起動
$ roslaunch vins_estimator vins_rviz.launch
シミュレーションデータのプレイバック
$ rosbag play MH_05_difficult.bag

って・・・ うぉぉ!! すごい!!
Visual-SLAMの中でも最も素晴らしいと感じた。
"地図" ではないけど、軌道はすごい精度で推定してプロットできている気がする。
bagファイルに記録されている情報に、単眼カメラ画像だけではなく慣性情報(IMU)も含まれているため、若干反則気味だけど。。。

■ シミュレーションデータによるデモ
ezgif.com-optimize (8).gif

グランドトゥルース(実際に実機が移動した軌跡)も一緒に描画したいときは、 rosbag play を実行する直前で下記を実行しておく。
グランドトゥルースは赤い線で描画される。

グランドトゥルースデータの読み込み
$ roslaunch benchmark_publisher publish.launch sequence_name:=MH_05_difficult

● ARのデモ

なんのことだか分からないが、公式チュートリアルに 「ARデモ」 というセクションがあったので一応実行してみる。

ARデモデータのダウンロード
$ cd ~/catkin_ws
$ wget -O ar_box.bag https://www.dropbox.com/s/s29oygyhwmllw9k/ar_box.bag?dl=0

■ bagファイルの情報
masked.png

ARデモ本体の起動
$ roslaunch ar_demo 3dm_bag.launch
rvizの起動
$ roslaunch ar_demo ar_rviz.launch
シミュレーションデータのプレイバック
$ rosbag play ar_box.bag

著しく本題とはかけ離れるけど、 おもしろい!!

■ AR用シミュレーションデータによるデモ
ezgif.com-optimize (10).gif

これまでの作業経過により、自作したロボットからIMUをパブリッシュする仕組みは構築済みのため、単眼カメラからの映像入力+IMUの組み合わせで、立体的な動きをトレースすることも可能となりそうだ。
ただ、要件上は立体的な自己位置推定は不要なため、RaspberryPiによる検証はスキップする。

◆ 本日のまとめ

  • 段々と回を重ねるごとに組み合わせ次第でどういうことができるかが分かってきた。 依然として理論は分からないけど。
  • VINS-Mono は想像よりも負荷が高くなさそうだ。
  • VINS-Mono は mono-vo のアルゴリズムに慣性情報を足して、立体軌道をプロットできるようにした強化版アルゴリズム、というイメージかな。
  • CNN-SLAM は実行環境が見当たらなかったため、急遽検証を取りやめる。
  • SLAM祭り、猛烈に大変だったけど楽しかった。 少しだけ達成感。

◆ 次回予告

次回は Google CartoGrapher を使用し、遠隔制御で走行させたロボットから地図データを収集して、我が家の1フロア分の地図を完成させてみたい。

◆ 次回記事

RaspberryPi3とZumoとROSで半永久自走式充放電ロボを作成したい014日目_SLAM自律走行の前準備_ロボット再構成と自宅の地図作成 【"沼" 突入中】 へ続く

9
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10