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

# はじめに
以前の投稿から随分と期間が開きましたが、Udacityの自動運転エンジニアコースのTerm3を修了し証書を頂いたので、今回はTerm3の内容と感想を書こうと思います。
Term1の感想は[こちら](http://qiita.com/RyosukeHonda/items/822d11d2fb5c83e03786)。Term2の感想は[こちら](https://qiita.com/RyosukeH/items/4853e9a403fc760c25ea)から見ることができます。



# Term3のプロジェクトについて
Term3は全部で4つのプロジェクトがあります。1つ目はPath Planning（経路計画）、2つ目はDeep learningの発展課題であるSemantic SegmentationかFunctional Safety（機能安全）の内から一つ、そして最後に最終課題である、自動運転車の走行である。
それぞれの課題について簡単にまとめていこうと思います。

## Path Planning(経路計画)
複数車線ある車道を走る車で、周りの車に衝突することなく、法定速度を守りつつ、急発進、急ハンドルをすることなく、車線を変更しながら4.32mileを移動することが課題となっています。
前後左右の車との車間距離と速度を考慮しながら、最適なルートを探索するアルゴリズムをC++で実装していきます。
以下の写真のようなものを課題では実装します。動画のリンクはこちらから(https://www.youtube.com/watch?v=O3o03hLESbA)
<img width="614" alt="pathplanning.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/163685/cd87aba2-f3e0-b1a5-92f0-90b7e1ee5fc3.jpeg">





## Semantic Segmentation
Deep Learningを用いて道路領域を検出する課題。Udacity自動運転コースにおいては、Deep Learningの発展課題としての位置づけである。
Fully Convolutional NetworkをTensor Flowを用いて実装する。

![semantic.png](https://qiita-image-store.s3.amazonaws.com/0/163685/da4ad737-5972-be93-4d6b-86a4be7e604c.png)





## Functional Safety
自動車向けの国際的な機能安全規格ISO26262についての課題であり、課題の内容は主にレックチャー内で説明され、その理解度を試す問題が出題される。
課題は自動運転車のレーンアシスタントシステムに関して、どのようにソフトウェアの安全設計を行い、どのようなシステムアーキテクチャを構築すればよいのか（例えば、自動車のある部品・機能が故障したとしてもシステムの安全性は担保できるような設計）ということについて答える問題が多く、コーディングの問題は含まれていない。

![graphic_asset_4.png](https://qiita-image-store.s3.amazonaws.com/0/163685/20fb3cf5-01ba-0053-4329-5a205ea59ee1.png)


## Capstone Project
本コースの最終課題。Udacityが所持する自動運転車Karlaを自動運転で走行させてみることが課題である。Udacityのテストコース内を急発進、急ハンドルを切ることなく、信号を正しく認識し、走行することができれば課題クリアとなる。


また、本課題では自動運転車を走行させる前に、シミュレーション上で自動運転が実装できているかどうかの課題も含まれている。シミュレーションの課題は信号が多数配置されたコース内で、決められた走行ルートから逸脱することなく、急加速、急ハンドルを切らずに走行する必要がある。また、信号機が多数設置されているので、信号を正しく認識し、赤信号であれば停止線の手前で停止できるように、徐々に減速し自動車を止める必要もある。


本課題で使う言語はPythonであり、シミュレーションと実車はROSのソフトウェアを用いることで操作を行っている。本課題で初めてROSを用いたが、ROSに関するレクチャーも充実していたため、ほとんど問題なく課題に取り組むことができた。ただ、問題点としては、ROSを動かすためにLinux PCが必要なこと、シミュレーションがメモリを多く食うのでメモリの大きなPCを準備する必要があった点である。


# 総評
自動運転エンジニアコースは全部で3つのTermから構成されており、それぞれ3ヵ月ずつの計9カ月で卒業できるコースである。価格はそれぞれ800ドル（現在は変更されて999ドル）となっており合計で2400ドルかかるコースとなっている。9カ月という時間と2400ドルという費用を投資する価値があったかというと、個人的には十分に価値がありました。自動運転に関する一通りの技術を学ぶことができ、さらに自動運転に関する仕事のオファーも複数社から頂くことができました。自動運転に関して全くの初心者で会った状態から、仕事のオファーを頂けるようにまで成長することができたという点から、十分な価値があったと個人的には思っています。

![cert_uda.png](https://qiita-image-store.s3.amazonaws.com/0/163685/6c568a96-b9a4-886e-a5f4-09b9365f445e.png)





### 参考文献：
Path PlanningではC++でコーディングするので、この機会にしっかりと復習をしました。

<a target="_blank"  href="https://www.amazon.co.jp/gp/product/4839926050/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4839926050&linkCode=as2&tag=ryo519-22&linkId=598de538d1e0002c08419329fae83e48"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=4839926050&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=ryo519-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4839926050" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

Semantic Segmentation：Udacityでは画像認識の課題が多くあったため、網羅的に理論を復習できるものとして利用しました。Udacityではコーディングと直感的な理解を重視しているため、理論的な理解をしっかりしようとすると本での学習が必須となります。

<a target="_blank"  href="https://www.amazon.co.jp/gp/product/4061529129/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4061529129&linkCode=as2&tag=ryo519-22&linkId=2ccf06279d8ead21065fd3dc24ea7203"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=4061529129&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=ryo519-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4061529129" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />


Capstone Project: ROSを使ったことがなかったのでUdacityのコンテンツ以外にも本を用いて学習。初めに入門書として以下のものを使用。

<a target="_blank"  href="https://www.amazon.co.jp/gp/product/4777519015/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4777519015&linkCode=as2&tag=ryo519-22&linkId=86074740c78f7e853698082140b3ceed"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=4777519015&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=ryo519-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4777519015" 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/4873118093/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4873118093&linkCode=as2&tag=ryo519-22&linkId=162a7fd3f133f0802cd3b4c321909820"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=4873118093&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=ryo519-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=ryo519-22&l=am2&o=9&a=4873118093" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />


Functional Safetyに関しては日本語の本であまり良さようなものが見つからなかったことと、Udacityのコンテンツが充実していたので特に文献を用いて学習はしておりません。