Visual SLAM勉強日記

ミュンヘン工科大学に留学中です。Daniel Cremers教授の研究室が主宰するPractical Course (1セメ研究)を通して、Visual SLAM (LSD-SLAM)の勉強をしていました。そのまま研究室にインターンとして滞在しており、DSOをネタに研究しています。

自動運転とVisual SLAM

更新滞っててすみません。きちんとまとまった記事にしようとすると筆を取るのが億劫になるので、これからは思いつくままに書こうと思います。

今日は自動運転とVisual SLAMについて。実際にメーカーで働いている訳では無いので情報が不正確ですが、知ってる限りのことを書きます。

 

SLAMは自動運転で重要な役割を果たす。

自動運転に限らず自律ロボット全般において、自分が今どこにいるのかを知る技術(Localization)は非常に重要である。自動車のLocalizationには通常GPSが用いられているが、トンネル等GPSが使えない環境があったり、そもそも普通にしてても10m以内で定常的に誤差が発生してしまう為、これだけでは十分なLocalizationが行えない。その為最近出ているNissanとかTeslaの高速道路や自動車専用道路上でのみ使用可能な"自動運転"技術はGPSの情報に加えて道路上の白線を画像認識で検知して左右誤差を補正する事で自車の位置を特定している。

しかし、一般道や市街地では、前後で数m自己位置認識がずれると交差点に突入したり、そもそも白線が消えていたりする為、GPS+白線検出では不十分である。そこで必要となるのがSLAMである。 SLAMはセンサーで検知した範囲内で自己位置認識と3次元地図作成を行う。このSLAMで作成した3次元地図と、事前にデータベース上に用意された3次元地図を比較して位置合わせを行い自車の位置を推定する。

 

この様にSLAMは自動運転で非常に重要になる技術なのだが、用いられるセンサーによってLiDAR SLAMとVisual SLAMの大きく2つに大別される(屋内ではDepthカメラを用いるSLAMもある)。LiDARではレーザーを飛ばす事で対象の奥行きを直接観測し、それを元に高精度の地図が作成できるが現状センサーが非常に高額である。カメラを用いるVisual SLAMでは、安価だがたとえステレオカメラを用いたとしても奥行きの情報をLiDARほど高精度で取得できない。

両者一長一短であり、両方のSLAMアルゴリズムを用いてLocalizationが行われていると考えていたのだが、勉強を深めるにつれて感じるのは、現段階ではVisual SLAMは自動車のLocalizaitonに用いるのは難しく、自動運転という文脈で語られるSLAMはほぼ全てLiDARを用いたSLAMを指しているのではないかという事である。

 

Visual SLAMは使う画像情報の疎密(≒作成される地図の疎密)に応じてSparse(≒Feature Point Based), Semi-Dense, Denseの3種類に大別されるが、この中で車の移動速度で屋外環境の大規模なマップ作成が可能なのはSparseあるいはSemi-Denseになる。

 

Semi-Dense - LSD SLAM

youtu.be

 

Sparse (Feature Point Based) - ORB SLAM

youtu.be

 

先ほど述べた通り自動運転においてSLAMに求められるのは、自車周りのリアルタイムでの地図作成である。Semi-DenseのSLAM (LSD-SLAM, DSO)ではLiDARと同じ程度に密な3次元地図を作成できる。しかしSLAMの実行にあたり画像間のトラッキングにPhotometric Consistensy (明るさの一致) を想定している為、例えば反射物が多い環境や、トンネルを出て突然周りの環境が明るくなる様な場合などでは容易に地図が崩壊してしまう。

その一方でFeature Point Basedの方法では、明るさの変化やノイズにロバストな少数の特徴点のみを抽出し地図を作成するが、得られる地図が疎であり、データベース上の地図とのマッチングを行うのに十分なのか怪しいと私は思う。

 

以上の様な理由から、Visual SLAMを自動運転で用いるにはまだまだ研究が必要だろうと感じる。

 

・・・実際に働いてる方いらっしゃったらいろいろ教えてください。

 

※2017年5月3日追記

・どうやら画像間のTrackingにはFeature Basedを用いて、地図の作成には画像上の全点を用いる、という事が出来る様だ。Project Tangoの3次元復元も同様の手法を用いているらしい。

・HDマップとの位置合わせ以外にもSLAMの用途は存在するようだ(例:自動パーキング)。

・結局の所、Visual SLAMが自動運転のどの場面でどう使われるか、よくわからないなあ。勉強せねば。

 

SLAMの歴史①

robonchu様のブログに取り上げて頂きました!大変ありがとうございます。

robonchu.hatenablog.com

 

Good!の評に見合う様、中身のあるブログにしていきたいと思います。

本日のテーマはSLAMの歴史について。

一口にSLAMと言っても様々なアルゴリズムがあるのですが、何が何やらよく分からないというのが勉強し始めの私でした。勉強するうちにようやくSLAM研究の流れがおぼろげながら見えてきたので、記事にしたいと思います。とりあえずは何か発信する事が大事かなと思い書いているので、間違いがあれば教えてください。

 

SLAMの研究の歴史は大きくPTAM以前と以降で大きく二つに分かれる。

①PTAM以前

以前本ブログで紹介したAtsushiさんのブログの解説が非常に分かりやすい。

Simultaneous Localization And Mapping (SLAM)について - MyEnigma

PTAM以前の初期のSLAMでは、検出された特徴点(ランドマーク)の位置情報を全てカルマンフィルタの状態量に組み込み、ロボットへの制御入力と観測されたランドマークの位置、そしてIMU等の値を統合し自己位置の推定を行っている。しかし、これはランドマークを観測する度にカルマンフィルタの状態量が増え続ける事を意味し、移動を続ければ計算コストが次第に増大しリアルタイムでの実行が困難になるという問題点があった。 代表的なアルゴリズムにEKF SLAM (拡張カルマンフィルタを使用)、Fast SLAM (自己位置推定にパーティクルフィルタ、ランドマーク処理にEKFを用いる事で計算を工夫)などがある。ちなみにFast SLAMを生み出した元Stanford大のSebastian Thrun教授はDARPAグランドチャレンジに勝利した後にGoogleに引き抜かれ、現在Googleの自動運転開発を牽引している。Udacityの創設者でもある彼は、自動運転開発の歴史を紐解く上でのキーマンの一人である。

ランドマーク観測のセンサーとしてはざっくりカメラとLRFがあり、カメラ画像から特徴点を抽出し使用するものをVisual SLAMと呼ぶ。画像情報からは特徴点のマッチングが行いやすいがデプス推定の為の計算が別途必要であり、LRFでは特徴点のマッチングが難しい代わりにデプスを直接観測できる。

センサーとしてはカメラの方が安価で入手しやすい事から徐々にVisual SLAMの研究が増え、さらにはステレオカメラでなく小型で安価な単眼カメラを用いたSLAMが盛んに研究されるようになった。

初期のVisual SLAMの集大成として、Imperial College LondonのAndrew Davison教授が2003年に単眼カメラを用いたリアルタイムで実行可能なSLAMであるMono-SLAMを発表し、以降の単眼Visual SLAMの流れが生まれた。

②PTAM登場

この様に初期のSLAMにはランドマークの増加に伴う計算コストの問題があったが、PTAMの登場を境に流れが変わる。PTAMはPararell Tracking and Mappingの略であり、AR系のトップ会議ISMAR 2007でOxford大から発表された単眼Visual SLAMのアルゴリズムである。

www.slideshare.net

(Masayashi Kobayashiさんのスライド。)

 

PTAMでは、バンドル調整と呼ばれるStructure from Motion (SfM)で用いられるマップ作成手法を用いている。SfMとは、複数の画像から環境の3次元形状を復元する技術であり、端的に言えばリアルタイム性と引き換えに高精度に3次元復元するSLAMである。この時に行われているのがバンドル調整であり、複数枚の画像から特徴点をマッチングさせ、画像間のカメラの位置姿勢変化と特徴量の3次元位置を最適化計算によって求める。

バンドル調整は計算量が大きくこれまでSLAMでは用いられてこず、カルマンフィルタを用いて位置姿勢を推定していた。しかしPTAMでは画像上の位置追跡とマップ作成を2つのスレッドに分けて同時に処理するという工夫を行っている。片方のスレッドでは常にカメラ位置の追跡計算を行い、もう一方のスレッドでは特定のフレーム(キーフレームと呼ばれる)周りのみに対してバンドル調整を行いマップを計算する。すなわち、従来全フレームに対してカメラ位置の追跡とマップ作成を行っていた部分を工夫し、キーフレームでのみデプス推定を行い(マップ作成)、その他のフレームでは最新のキーフレーム画像とデプス情報を用いて比較を行うことでカメラ位置を推定している(追跡)。この様な工夫の結果、リアルタイムで精緻な3次元地図を作成する単眼SLAMを実現した。(色々とややこしかったので論文読んでください。) 

PTAMの登場により、それまでマーカーを必須としていたARに革命をもたらした。以後マーカーレスARの研究開発が進み、最近で言えばPokemon Goにも同様の技術は用いられている。

また、以降登場するVisual SLAMの大半はPTAMの影響を受けており、追跡とマップ作成を別スレッドに分け計算させるという手法を継承している。

 

次回はPTAM以降のSLAMについて、LSD-SLAMとORB-SLAM、そしてDSOについて知っている事を書きます。

セメスター終了

ご無沙汰しております。セメスターが終了しました。

週一くらいの更新を意気込んでブログを始めたのですが、結局全く更新できませんでした。

Lab Courseを通じて、LSD-SLAMの仕組みについて少しは人に説明出来るようになりましたので、また記事を更新していきます。

こんなものを作ってました。写真撮った位置にドローンを誘導しようぜ的なシステムです。

www.youtube.com

 

また、4月以降もComputer Vision Groupに残り研究に携わらせて頂く事になりました。就活が若干危ない気がしますが、せっかくの機会なので最大限に学ぼうと思います。

セメスター開始

今週から冬セメスターが始まった。

本命のPractical Courseは来週からスタートするのだが、それに先駆けてCremers教授の別の授業 Computer Vision 1: Variational Methodsが始まった。

Computer Vision Group - Winter Semester 2016/17 - Computer Vision I: Variational Methods

 

立ち見が出る程の盛況ぶりであった。

なお、授業の内容は全てYoutubeにアップロードされている。字幕も付いている。

Variational Methods for Computer Vision - Lecture 1 (Prof. Daniel Cremers) - YouTube

この教材コンテンツの充実具合は素直にありがたい。

授業は週3回あり、内2回はLectureで1回はExerciseである。ちょっと重いなあ。

 

内容としては、主に3D ReconstructionやImage segmentation等の機械学習を使わないComputer Visionがメインである。

今日は簡単なIntroductionで終わったが、印象としては何かにつけて最適化関連の話が多かった。教授自身が物理科出身である様に、相当数学が出来ないと辛いと授業の初めに脅された。

 

 

 

とりあえずSLAMを動かす

紙ベースで勉強ばかりしていても、精神衛生上あまり良くないのでとりあえずSLAMを走らせてみる事にした。

 

ミュンヘン工科大学のComputer Vision groupはLSD-SLAMのコードをGitHub上に公開している。丁寧なマニュアルも付いている。

github.com

 

最初は既に環境構築済みのUbuntu 16.04で走らせようとしたが、動かなかった。

おとなしくマニュアルに従いVirtualBoxの仮想環境上にUbuntu14.04を構築し、ROS indigoをインストールする。マニュアルの通りにSLAMを走らせてみた。

この動画を参考にしながら、コマンドを入力する 。

 

www.youtube.com

 

結果、サンプル動画については動いた。

 

次に、自分のオリジナルの動画を動かす事を考える。live mode と dataset modeがあるが、live modeだと自前でbagファイルを用意する必要があり、手順があまりよくわからず断念。

 

dataset modeに挑戦。

とりあえず自動運転に憧れてこの動画をSLAMしようと思ったが

www.youtube.com

 

ぐちゃぐちゃなマップが出てきてしまった。

f:id:muskie:20161012064806j:plain

 

友人に聞いた所、使用したカメラに応じてキャリブレーションのパラメータを調整する必要があった様だ。そりゃ当然か。

 

まだまだSLAMマスターへの道は遠い。

ネットで見つけたSLAM教材

そんな訳でSLAMを1から勉強しているのだが、勉強すべき項目が多い上にあまり日本語の資料がヒットしない為なかなか勉強がはかどらない。出てきた資料をここにメモする。

 

日本語の資料

①Atsushiさんのブログ。ロボティクスについて様々な記事を書かれていて、どれも非常に興味深い。また、リンクからAtsushiさんの学位論文を読む事が出来、アルゴリズムの詳細な解説も載っている。これくらい内容のある記事が書けるようになりたいなあ。

myenigma.hatenablog.com

 

②Slide Shareにあった熊本大学の藤本氏のスライド。SLAMというよりもLSD-SLAMの解説だが、日本語で書かれているので頭に入りやすい。

www.slideshare.net

 

英語の資料

①edX

ミュンヘン工科大のComputer Vision groupが配信しているVision based navigationに関する講義。登録無料で見ることが出来る。字幕、スライドpdfありの為復習しやすい。全8回の授業の内SLAMは最終回で出てるが、その前提となるVisual Odometryや確率ロボティクスの基本などを7回かけて丁寧に説明してくれるので、ゼロから勉強するにあたって重宝している。

www.edx.org

 

②Freiburg大学の授業。

Youtubeで配信されている。現在勉強中。edXと違ってSLAMに特化した授業のよう。一回あたり90分あってそれが20回近くあるので死ねる。

www.youtube.com

 

SLAMと一口に言っても様々な手法があるのだが、まだきちんと整理できていないのが正直な所。 勉強せねば。

SLAMとは?

Simultaneous Localization and Mapping の略。

訳は "自己位置推定と環境地図作成の同時実行" といった所か。

ロボットの自律走行において、正確な自己位置を知る事は重要であるが、その為の方法としてGPSが現在最も精度の良い自己位置推定法である。しかし幾つかの状況 (屋内、街中、トンネル内など) ではGPSの精度が低下する為推定誤差が大きくなる。

その様な状況下で、位置情報と環境地図作成を同時に行う手法であるSLAMが盛んに研究されている。特に、カメラの画像情報によるものをVisual SLAMと呼ぶ。

とりあえず実物を見てみよう。

www.youtube.com

 

アルゴリズムの詳細はまだきちんと追えていないが、自己位置推定→地図作成→自己位置推定→... の様に逐次フィードバックによる補正を行い、尤もらしい位置情報を得ている、のだと思う。

 

Visual SLAMは今話題の自動運転車や掃除ロボットのルンバを始め自律ロボット全般でキーとなる技術である。

北海道大学大学院工学研究院・工学院広報誌 えんじにあRing 2016年7月号 ◆自動運転を支えるロボット技術

 

Visual SLAMはAR (拡張現実) においても用いられる。RGB-Dカメラから得た情報から、SLAMにより3次元の地図を作成・認識し、画面越しにオブジェクトを配置する。

Google内にもProject TangoというAR部門が存在する。

www.youtube.com

 

 

※2017年5月追記

ミュンヘン工科大のLab Course でこんなのを作ってました。 写真撮った場所にドローンを移動させる的なシステムです。SLAM使うとこういう事も出来ます。

www.youtube.com