読者です 読者をやめる 読者になる 読者になる

Visual SLAM勉強日記

ミュンヘン工科大学に留学中です。Daniel Cremers教授の研究室が主宰するPractical Course (1セメ研究)を通して、Visual SLAM (LSD-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の流れが生まれた。ちなみにDavison教授はその昔産総研でポスドクをしていた。

 

②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

 

自己紹介

こんにちは。この4月からミュンヘン工科大学に交換留学しているmuskieと申します。

日本では機械系の修士学生でした。

 

この10月からDaniel Cremers教授の研究室が開講するPractical Course(ドイツ特有の授業形態。1セメスターだけラボで研究)を受ける事ができるので、がっつりLSD-SLAMについて勉強したいと思います。学んだ事のメモも兼ねて発信していきたいと思います。

 

元々はガチの制御理論(ロバスト制御とか)を専門としていたのですが、こちらに来て入ったロボコンサークルで偶然にSLAMの実装を担当する事になり、コンピュータービジョン・ロボットビジョンの面白さに感動し、その勢いで締め切り間際のPractical Courseに応募し、なんとか当選したという形です。特にミュンヘン工科大学のComputer Vision groupはVisual SLAMの研究がかなりすごい様なので、期待大ですね。

 

予習課題として配布された論文を読んでいる所なのですが、分からない単語を日本語で検索をかけてもなかなかヒットしない事も多く、Visual SLAMの情報が日本ではまだあまり出回っていないのだなと感じました。自分が勉強しながら少しでも多くのロボット・CVに関わる方に情報を共有できれば (そして色々教えてもらえれば) と思い、ブログ開設に至りました。

 

表現や理解に誤りもあるかと思いますが、見つけた際には是非教えて下さい!