Udacity自動運転エンジニアコースのTerm2を終えた感想


オンライン講座のUdacityが提供する自動運転エンジニアコースのTerm2を修了したので，そのざっくりとした内容と感想を書こうと思います．Term1の感想は[こちら](http://qiita.com/RyosukeHonda/items/822d11d2fb5c83e03786)にあります．



##Term2のプロジェクト
Term1ではDeep LearningとComputer Visionについて学び，使用言語はPythonでした．
Term2ではセンサーフュージョン，自己位置推定，制御について学び，使用言語は自動運転の開発に最も用いられているC++が用いられています．センサーフュージョンと自己位置推定の講義はメルセデスベンツにより提供されており，制御は[UBER Advanced Technology Group](https://www.uber.com/info/atg/)により提供されています．どちらも積極的に自動運転車の開発を行なっている会社であり，最先端の技術を学ぶことができます．課題は全部で5つで期間は3ヶ月となっています．


##センサーフュージョン
センサーフュージョンとは2つ以上のセンサー情報を統合し，1つのセンサー情報よりもより詳細な情報を得ることです．例えば，現在販売されているLIDARは位置を測定することができるが，速度を直接測定することはできません．一方，RADARは速度を測定することができます．このように複数のセンサーの長所を利用しながら，現在の位置や速度を計測，予測を繰り返します．


![スクリーンショット 2017-05-24 15.38.49.png](https://qiita-image-store.s3.amazonaws.com/0/163685/518b9770-d27f-75e7-6266-aca0b13e2d3b.png)
Cited from Udacity's lecture

###Project1: Extended Kalman Filter
LIDARによる計測データはデカルト座標系で測定が可能であり，カルマンフィルタをそのまま利用することができる．一方RADARによる測定は極座標系で表され，デカルト座標系に変換する際に，$\cos$や$\sin$等の非線形項が現れ，線形ではなくなる．カルマンフィルタは線形システムにおいてのみ使用可能であるため，非線形項が現れた際にも使用できるように拡張(Extend)しなければいけない．そのための手法がExtended Kalman Filterであり，具体的には非線形システムをヤコビアンを用いて線形化する．

![スクリーンショット 2017-05-24 16.44.01.png](https://qiita-image-store.s3.amazonaws.com/0/163685/16be1f89-3ee8-2d22-7c61-caa8d249d653.png)
Cited from Udacity's lecture


課題はノイズを含んだLIDARとRIDARのデータをExtended Kalman Filterを用いて，センサーフュージョンをし，歩行者の位置を特定するというものである．使用する言語はC++

###Project2: Unscented Kalman Filter
Extended Kalman Filterの弱点は，微分することのできない不連続な非線形性には対処することができない点である．（またヤコビアンを求める際の偏微分が面倒．．．）
Unscented Kalman Filterは線形化を行わないため，Extended Kalman Filterの問題点の一つを解消することができる．

![スクリーンショット 2017-05-24 16.43.10.png](https://qiita-image-store.s3.amazonaws.com/0/163685/0b4da5d8-d827-a6bb-7c29-3aa4b6f06c7b.png)
Cited from Udacity's lecture


課題はExtended Kalman Filterよりも詳細なモデル（CTRVモデル）を用いて，LIDARとRIDARのデータをUnscented Kalman Filterによりセンサーフュージョンを行い，歩行者の位置を特定するものとなっている．使用する言語はC++



##自己位置推定
GPSの精度(1=50m)では自動運転を実現するのに不十分であるため，より精度高い精度で（3~10cm）自動車の位置を推定する必要がある．そのための手法をこのセクションで学びます．

###Project3: Particle Filter
Particle Filter（粒子フィルタ）という手法を用いて，実際の地図情報，自動車の速度と，自動車とランドマークからの距離から自動車の位置を特定するという課題になっている．![スクリーンショット 2017-05-24 16.51.58.png](https://qiita-image-store.s3.amazonaws.com/0/163685/35350229-0957-97a2-eaf3-623160c864fb.png)
Cited from Udacity's lecture


##制御
Term1ではDeep Learningによる自動車の自動走行を行なったが，実際の自動運転には多くの制御理論が用いられている．ここでは，PID制御とModel Predictive Control（モデル予測制御）を学美ました．

###Project4: PID Control
古典制御のPID制御を自動車の制御に用いるという課題で，Term1で用いたシミュレータを用いて自動車の制御をおこなった．結果は[こちら](https://www.youtube.com/watch?v=Bg7_N8v0xHQ)から見れます．また簡単な[解説記事も書きました](http://qiita.com/RyosukeHonda/items/9e5ce2ebdadd90e3db00)ので参照してくださるとうれしいです．

[![スクリーンショット 2017-05-23 8.38.13.png](https://qiita-image-store.s3.amazonaws.com/0/163685/5e768b52-f090-bb3b-8a2c-73f45c701ce4.png)](https://www.youtube.com/watch?v=Bg7_N8v0xHQ)


###Project5: Model Predictive Control
PID制御は単純ではあるがうまく機能していることがわかった．これはPID制御により求まったシステムへの制御入力量を時間差なく入力することができているため，うまく作動している．しかし求まった入力量を実際に入力するまでに時間差があると，必ずしも制御できるとは限らない．その時間差に対処するためには最適制御問題を解くことにより，将来の制御入力を決定していく必要がある．その手法がモデル予測制御（Model Predictive Control）であり，このプロジェクトではモデル予測制御をC++で実装する．

先ほどとシミュレータを用いて100msの入力時間差（制御入力を予測してから実際に入力するまでの時間差）があっても自動車をうまく制御することがこのプロジェクトの目標である．
実際の結果は[こちら](https://www.youtube.com/watch?v=YElSbNqtxEw)から見れます．

[![mpc.png](https://qiita-image-store.s3.amazonaws.com/0/163685/58bf4d55-001c-c624-49b2-b095ff86cc7b.png)](https://www.youtube.com/watch?v=YElSbNqtxEw)


##感想
Term1ではDeep Learning（イメージベース）やComputer Visionを学び，人間の視覚に関するものが多かったのに対し，Term2では制御やロボット工学で用いられている手法が多く，数式が中心のタームとなっています．内容には大学院で学ぶものも含まれており，難易度は高い方だと思います．しかしながら講義が充実しており，受講者内でのSlackで議論が活発に行われているため，しっかり勉強をすればついていくことができると思います．


Term1では主にDeep LearningやComputer Visionを扱っており，課題をこなすのに時間がかかりました．Term2は理論が多く，理解するのに時間はかかりましたが，課題をこなすのにはTerm1ほどの時間はかかりませんでした．平均して1週間の学習時間は15時間程度だったと思います．時間を取ることができれば，サポートが手厚いため，課題をこなしついていくことが十分可能だと思います．（Term2では線形代数，微分積分，ベイズ統計学の知識が必要となりますが．）

使用する言語がPythonからC++に変わりましたが，C++の講義もあり，例題等も充実しているので，C++の初心者でもついていくことができると思います．実際，私も初心者でした．

##参考文献
最後にTerm2を進めていくにあたり，参考になった文献やURLを紹介します．
カルマンフィルタに関する文献は日本語では以下の本が具体例が多く，わかりやすかったです．
・<a target="_blank" href="https://www.amazon.co.jp/gp/product/4501328908/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4501328908&linkCode=as2&tag=ryo519-22&linkId=b33f635b3dbeafec40bd96a95ea3a055">カルマンフィルタの基礎</a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4501328908" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

動画では以下の資料がわかりやすいと思います．
・https://www.youtube.com/watch?v=CaCcOwJPytQ&list=PLX2gX-ftPVXU3oUFNATxGXY90AULiqnWT
・http://ais.informatik.uni-freiburg.de/teaching/ss16/robotics/

全体的にこのコースの授業はUdacity創業者のSebastian Thrunさんの本に則って進めているため，次の本も参考になります．
・<a target="_blank" href="https://www.amazon.co.jp/gp/product/4839952981/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4839952981&linkCode=as2&tag=ryo519-22&linkId=f33b85aeadd5ca7dd04258a4c7fa779b">確率ロボティクス (プレミアムブックス版)</a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4839952981" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

制御に関する本は上から順に進めていくと，理解がしやすいと思います．
古典制御に関する文献
・<a target="_blank" href="https://www.amazon.co.jp/gp/product/4062573962/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4062573962&linkCode=as2&tag=ryo519-22&linkId=598cc5e2ceac7744e902b4cbe39bbf9f">制御工学の考え方―産業革命は「制御」からはじまった (ブルーバックス)</a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4062573962" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
・<a target="_blank" href="https://www.amazon.co.jp/gp/product/4061557912/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4061557912&linkCode=as2&tag=ryo519-22&linkId=ea24b182a5a24c115044e95a5844a044">はじめての制御工学 (KS理工学専門書)</a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4061557912" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
・（<a target="_blank" href="https://www.amazon.co.jp/gp/product/4339033030/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4339033030&linkCode=as2&tag=ryo519-22&linkId=ba2bf939155066adb882f445b75caf3f">フィードバック制御入門 (システム制御工学シリーズ)</a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4339033030" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />）

現代制御に関する文献
・<a target="_blank" href="https://www.amazon.co.jp/gp/product/4061565087/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4061565087&linkCode=as2&tag=ryo519-22&linkId=4a9fef7f272726fc79ac0db4fd1e5014">はじめての現代制御理論 (KS理工学専門書)</a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4061565087" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
・（<a target="_blank" href="https://www.amazon.co.jp/gp/product/4501324600/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4501324600&linkCode=as2&tag=ryo519-22&linkId=fa0dfd2c9d11b027f56851c5a3489a41">モデル予測制御―制約のもとでの最適制御</a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4501324600" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />）





######おまけ
Term3ではPath Planningやハードウェア，そして発展的な内容について学べるそうです（6月中旬ごろに正式な発表があるそうです．最終的にはチームを組んで実際に自動車を自動運転できる噂があったり，なかったり．．．）