OpenCVでカメラ画像から自己位置認識 (Visual Odometry)

書籍ROSではじめる ロボットプログラミング」を一通り読み終わって、何となくロボットの自己位置認識の重要性を感じている。

オープンソースのロボットアプリケーションフレームワーク『ROS (Robot Operating System)』
ちょっと前からロボット関係で話題(?)になっていたROS(Robot Operating System)というものについて調べ始めた。名前からしてロボット用のOSなのかと思ったらそうじゃなくて、Linux(Ubuntu)上で動くミドルウェア...

ロボット自身の移動量を計測する手法全般を”Odometry“と言うらしい。
中でも1番簡単なやり方は、車輪などの駆動装置の回転数を加算して移動距離とみなす方法。これはWheel Odometryとか呼ばれるらしい。この手法は手軽だがもちろん欠点もあって、車輪が滑るなどして空転した分も加算されてしまう。なので、Wheel Odometryではロボットが遠くへ移動するほど、どんどん誤差が溜まってしまう。

これに対して、カメラ画像を使って自己位置認識を行うのがVisual Odometry(VO)という分野。ロボットの自己位置認識では、ステレオカメラやDepthカメラといった3Dカメラを用いたVisual Odometryの手法がたくさんあるようだ。

以前見たコレは単眼カメラで撮影した2Dの画像を用いて自己位置を認識するMonocular Visual Odometry手法の1つ↓
画像認識による位置情報取得 - Semi-Direct Monocular Visual Odometry (SVO)
今日たまたまTwitterのTLで見かけたやつ。 単眼のカメラ映像からリアルタイムに位置情報を取得している。 論文はこちら そして、GitHubにROSで動作するソースコードが公開されている。

この技術のすごさがやっとわかってきた。
このSVO(Semi-Direct Monocular Visual Odometry)はROSで試せるようですよ↓
2Dカメラの映像だけから自動飛行ロボットに位置認識させるSVO(Semi-Direct Monocular Visual Odometry)という仕組みが注目を集めているようです。既存の手法を組み合わせた高速で正確な位置認識が特徴になています。紹介動画がこちら。 SVO: Fast Semi-Direct Monocu...


スポンサーリンク



単眼カメラによるVisual Odometry技術に関するチュートリアル、およびOpenCVを使って実装したサンプルが公開されているのを知った。↓


ソースコードはこちら↓

mono-vo

これは、OpenCV 3.0をベースにMonocular Visual Odometry手法(単眼カメラによる自己位置認識)を実装したものです。

アルゴリズム

基本行列の推定にNisterの5点アルゴリズムを使用し、トラッキングにはFAST特徴量とKanade-Lucas-Tomasi Feature Tracker(Lucas–Kanade法)を使用しています。
詳細はこちらのレポートこちらのブログ記事をご覧ください。

注意事項:
このプロジェクトはまだ相対スケールの推定精度が低いです。そのため、スケール情報はKITTIデータセットのground truthファイルから取得しています。

見たところ、ソースコードはそれほど大規模じゃなさそうだけど、OpenCVを使うとそんなに簡単に書けちゃうものなのだろうか。
ここで出てくるKITTIデータセットというのは自動車ビジョン向けの大規模データセットらしいです。↓

自動車ビジョン向けの新しい大規模データセット「KITTI Vision Benchmark Suite」



このVisual Odometry技術でロボットの移動量を正確に認識して、さらにその情報から地図を作成するところまで発展するとSLAMなんですかね。(良く解ってない)

2通りの再構成方法

カメラで撮影した連続画像(動画)から移動量を測るための再構成方法には大きく2通りあるらしい。

  • indirect:画像から特徴点を抽出し、疎(sparse)な情報のマッチングで再構成する
  • direct:密(dense)な画素情報をそのまま使って再構成する

上記mono-voのコードは特徴点ベースだから、indirectな方法を実装しているということですね。

単眼カメラによるSLAMで有名なLSD-SLAMは、directな手法。↓

LSD-SLAM: Large-Scale Direct Monocular SLAM Contact: Jakob Engel, Dr. Jörg Stückler, Prof. Dr. Daniel Cremers Check out DSO, our new Direct & Sparse Visual Od...

LSD-SLAMのソースコードは公開されてはいるけど、まだ試せるほど知識がない。

追記:directな手法とindirectな手法を組み合わせたDirect Sparse Odometry(DSO)という手法があるらしい。
DSO: Direct Sparse Odometry Contact: Jakob Engel, Prof. Vladlen Koltun, Prof. Daniel Cremers DSO is a novel direct and sparse formulation for Visual Odome...


DSO is a novel direct and sparse formulation for Visual Odometry.
It combines a fully direct probabilistic model (minimizing a photometric error) with consistent, joint optimization of all model parameters, including geometry – represented as inverse depth in a reference frame – and camera motion. This is achieved in real time by omitting the smoothness prior used in other direct methods and instead sampling pixels evenly throughout the images.
DSO does not depend on keypoint detectors or descriptors, thus it can naturally sample pixels from across all image regions that have intensity gradient, including edges or smooth intensity variations on mostly white walls. The proposed model integrates a full photometric calibration, accounting for exposure time, lens vignetting, and non-linear response functions. We thoroughly evaluate our method on three different datasets comprising several hours of video.
The experiments show that the presented approach significantly outperforms state-of-the-art direct and indirect methods in a variety of real-world settings, both in terms of tracking accuracy and robustness.

ソースコードもある。


SLAMに関してはドローン用のライブラリ(?)もあるらしいけど、まったく知識が追いつかない。↓

OpenDroneMap

OpenDroneMap


スポンサーリンク

関連記事


Also published on Medium.

コメント

  1. […] monocular-visual-odometry-using-opencv [OpenCV][カメラ] […]