【プロジェクトの目的】
自動運転車を ROS を用いて制御する機能の開発を行いました。また、自動運転車の前方に取り付けられたカメラから取り込まれた画像から、交通信号機の検出を行い、進行と停止のそれぞれの信号に従って自動車を動かすこともできるようになっています。
データとして「辿る地点(waypoints)」が与えられ、その途上に信号機があり、waypoints を辿りながら信号機に従って自動車の進行、停止を行います。
言語は Python が主で、一部が C++ になっています。
リポジトリです。
https://github.com/vilion/CarND-Capstone
自動運転車を実際に動かした動画です。
https://youtu.be/tU8lzPHHYy8
こちらはシミュレーター上で動かした物です。
https://www.youtube.com/watch?v=aon8s0keVyk
赤で止まり、青で進むという動きになっております。
【モジュール構成について】
モジュールは大きく3つに分けることができます。それぞれに ROS の Node が属しており、topic によってデータをやりとりしています。
・信号機の判定機能
車載カメラの映像から信号機の有無、停止を判定する機能
・Waypoint に速度を付加したデータを作成する機能
すべての Waypoint のデータと「信号が停止している」Waypoint を受け取り、信号を加味してそれぞれの Waypoint に速度を付加したデータを作成して発信する機能
・車を制御(ステアリング、スロットル、ブレーキ)する機能
速度を付加された Waypoints と現在の位置から、今の速度と次の速度が算出される。
これらを受け取りスロットル、ブレーキと車の向きを算出する機能
これらが非同期にデータをやり取りをし、自動車を制御します。
【信号機判定 AI について】
モデルは tensorflow example の mobilenet を使用しています。軽量でありながら精度も十分に出ます。
こちらから graph をロードし、用意した画像データを学習させたモデルを使用します。
ただ、シミュレータに対しては Neuralnet は使用されておりません。シミュレータ自体の動作が重く、判定が間に合わないためです。深層学習ではなく、画素の色の数により判定しています。
【チームでの共同作業について】
5人で一つのチームとなって取り組む、という方式で進めました。
私の担当は車を制御する機能でした。
インド1名、カナダ1名、イギリス1名、アメリカ(アトランタ)1名、私というチームでした。
連絡は slack を用いて行いました。全員が時間帯もバラバラであり、このようにプロジェクトを進めるのは初めての経験でしたが、全員が話し合い、意見を交換し、無理無く進められるように気を配っていたこともあり、また AI チーム(リーダーのインドの方とアメリカの方)の尽力もあり、無事、Carla を走らせることができました。
【背景】
Udacity というオンラインラーニングスクールでの学習の一環で取り組んだ物です。
オンラインスクール「Udacity」のサイトです。
https://www.udacity.com/course/self-driving-car-engineer-nanodegree--nd013
なお、全てのコンテンツは英語での閲覧は可能ですが、日本語訳は提供されていません。
取得した全コースの修了証は以下です。
https://gyazo.com/10d20784acaa996da56da9df0c71c648