EnsekiTT Blog

EnsekiTTが書くブログです。

【7Days自由研究】Visual SLAMとROSを使えるようになる話 Day-7【最終話】

前回までのえんせき

ORB_SLAM2でWebカメラを繋いでリアルタイムで地図が出てくるようになった
ensekitt.hatenablog.com

つまりなにしたの?

ORB_SLAM2の結果出てくる座標をパブリッシュして別のROSパッケージから配信するサンプルを作って、別のパッケージから購読した。
f:id:ensekitt:20170827232316j:plain

別のパッケージから読めると何が嬉しいの?

VisualSLAMの環境に依らず現在の相対位置を取得できるようになれば、VisualSLAMが何をしているかを気にすることなくロボットの移動に関する部分に注力できそう。

準備

catkinでビルドできるようにしたい
github.com
こんなプルリクエストがあったので反映してみた。

ディレクトリの配置

Example/ROSの中身をExample/ROS/srcに変更
ORB_SLAM2/Examples/ROS at master · EnsekiTT/ORB_SLAM2 · GitHub

配置変更に伴って、相対パスを変更する
https://github.com/EnsekiTT/ORB_SLAM2/blob/master/Examples/ROS/src/orb_slam2/CMakeLists.txt
については
src/*.ccの参照位置の変更(../を1つ追加)
OpenCVのバージョンを変更(3系に変更)

一旦ここで今まで出来ていたことがcatkin_makeで作成したパッケージでもできることを確認する。

$ cd ~/orb_slam2_ws/ORB_SLAM2/Example/ROS
catkin_make
source devel/setup.bash

配信者と購読者を作る

ここでは
ros_mono.ccをベースに配信機能を持つros_mono_pub.ccと
配信されたものを購読するros_mono_sub.ccを作る。

http://wiki.ros.org/ja/ROS/Tutorials
を元に配信に必要な機能を作りこんでいく。

オリジナルのmsgを作ることもできるみたいだけど、今回はとりあえず
float32Arrayとして同次行列の16パラメータをそのまま転送してみた。

で、出来上がったのがこの2つ

ORB_SLAM2/ros_mono_pub.cc at master · EnsekiTT/ORB_SLAM2 · GitHub
ORB_SLAM2/ros_mono_sub.cc at master · EnsekiTT/ORB_SLAM2 · GitHub

実行してみる

$ cd ~/orb_slam2_ws/ORB_SLAM2/Example/ROS
$ catkin_make
# Terminal 1
$ roscore

# Terminal 2
$ cd ~/orb_slam2_ws/ORB_SLAM2
$ source Example/ROS/devel/setup.bash
$ rosrun orb_slam2 mono_pub Vocabulary/ORBvoc.txt Examples/Monocular/c920r.yaml

# Terminal 3
$ cd ~/orb_slam2_ws/ORB_SLAM2
$ source Example/ROS/devel/setup.bash
$ rosrun orb_slam2 mono_sub

# Terminal 4
$ cd ~/orb_slam2_ws/ORB_SLAM2
$ roslaunch camera.launch

camera.launchは前回の
ensekitt.hatenablog.com
を使っています。

うごいたー!!!(絵面が地味なので動画などはなし)
これでORB_SLAM2の部分が何に変わっても抽象化する手立てがあるので心置きなく開発がすすめられる。

リポジトリ

今回実験に使ったリポジトリはこちら
github.com

7日間を振り返って

はじめてこんな連続企画をやってみたけど、続き物を作っている感じはとても楽しい!
散歩がてら動画を取りに行くのもなかなか楽しかった!いろいろ撮ったけど逆光でほぼボツになったは辛い。→とても良く出来たデータを選んで掲載しています。

サクセスクライテリア
  • ミニマムサクセス: バーチャルマシン上でVisualSLAMのサンプルを動かしてみる 達成
  • フルサクセス: Webカメラの動画を使ってリアルタイムにVisualSLAMによる位置姿勢表示を試してみる 達成
  • エクストラサクセス: 精度はどうあれ、お外を歩き回って位置・姿勢がログに残るようにする 部分的達成/お外が歩き回れなかった

反省点

  • リポジトリを初日から作っておくべきだった。(コミットログはまるで当てにならずブログ用に後日追加している)
  • 作業中の動画はちゃんと撮っておくべきだった
  • 夜はちゃんと寝るべきだった
  • ネットニュースを見ただけであーそんなのやればできますよ。みたいな態度は改めてやめようと思った

各日の雑感

7日前の僕「Visual-SLAMとかリポジトリ公開されてるんだし使うの余裕っしょwww」
4日前の僕「よゆうじゃない。たすけて」
2日前の僕「あ、動画編集するの楽しい…(逃避」
今日の僕「なんとかやりたいことはできた。軽はずみに余裕とか言ってすみませんでした。」

大まかな予定に対してどうったのか

Day1 最近のVisual SLAMを調べてみる→達成
Day2 VirtualBox上でVisualSLAMを動かしてサンプル動画を使ってみたい→達成
Day3 Ubuntu16.04上でVisualSLAMを動かしてサンプル動画を使ってみたい→方針変更のうえ達成
Day4 ROSからVisualSLAMを使ってみたい→順序がちがったけど達成
Day5 ROSにUSBカメラを繋いでキャリブレーションしてみたい→順序が違ったけど達成
Day6 USBカメラとVisualSLAMを繋いで机の周りをスキャンしてみたい→達成
Day7 持ち歩けるPCにUSBカメラとVisualSLAMを導入して近所を歩き回りたい→未達(かわりにiPhone動画を取り込む手段を設けた)

ensekitt.hatenablog.com
ensekitt.hatenablog.com
ensekitt.hatenablog.com
ensekitt.hatenablog.com
ensekitt.hatenablog.com
ensekitt.hatenablog.com
ensekitt.hatenablog.com

お礼

最後までありがとうございました。
【7Days自由研究】また機会があったらやりたいと思います。
よろしくお願いします。