【自動運転】Autoware.Autoを学ぶ – 1回目

はじめに

2021年3月5日(金)、Hondaは、「Honda SENSING Elite」を搭載した新型LEGENDを発売した。
そして、「Honda SENSING Elite」の機能の内の一つである「トラフィックジャムアシスト(渋滞運転機能)」は、世界で初めて自動運転レベル3(条件付自動運転車(限定領域))に適合した機能となっている。
そして、Toyotaは、4月8日(木)に新型 Lexus LS、4月12日(月)に燃料電池自動車MIRAIの新型を発売した。この2車両には、「Advanced Drive」が搭載されている。発売時点では、高度運転支援である自動運転レベル2であるが、今後のソフトウェアアップデートでレベル3相当に更新されると言われている。
自動運転の開発は、もちろん日本だけでなく世界で熾烈な開発競争が行われており、エンジニアとして学ぶことが多い分野ということでAutowareを題材にして、学んだことをまとめていきたいと思う。

Autoware

Autowareは、自動運転に必要なソフトウェアをオープンソースで開発を進めている。
Autowareは、元々、名古屋大学、長崎大学、産総研による共同で開発が進められ、その成果がオープソースとして公開された。そこから、名古屋大学発の自動運転スタートアップのティアフォー、グローバルなコミュニティにより開発が進められている。
ROS1をベースとしたAutoware.AIプロジェクトは収束し、2018年からAutoware.Autoプロジェクトの開発が進められている。

Autoware.AutoとAutoware.AIの違い

Autoware.AutoのドキュメントのIntroductionに大きな違いとは何かが記載されている。
・最新のソフトウェア開発のベストプラクティス(効率の良い手法、技法、ツール、プロセス)を取り入れている
・システムアーキテクチャ、モジュール間インターフェースの改善
・ライブラリから、ノード、システムレベルでの、再現性と決定性を重視

つまり、継続的に品質の高いソフトウェアをオープンソースで開発していくための転換を行なっているようだ。
また、こちらのQAが特徴と捉えており、わかりやすいように思う。
– Autoware.AIはPythonと相性が良く、研究開発に向いていて、Autoware.Autoは、90%以上がC++ベースで作られており、パフォーマンス、安定性が求められる製品開発向け。

Apex.AIから提供されているAutoware.Autoのコース

Apex.AIからAutoware.Autoを学ぶためのコースが提供されている。
2021年5月時点で、14レクチャーが公開されており、各レクチャーには、YouTube動画とドキュメントが用意されており、ハンズオンで、色々と学べるようになっている。
自動運転に関わる技術だけでなく、最新のソフトウェア開発のベストプラクティスが学べるところもとても魅力的だと思う。
以降では、各レッスンをざっとみて見て、どのようなこととが学べそうか、ターゲットを自分なりにまとめておきたいと思う。

レクチャー 1: 開発環境

・開発環境とObject Detectionのデモを走らせて、Autoware開発環境の概要をつかむ
・自動運転ソフトウェア開発の理論と実践の概要をつかむ
 - 特にOperational design domainを掘り下げて理解する

レクチャー 2、3: ROS2 (オープンソースのロボット用OS) 入門、ツール

・Autoware.AutoのベースとなっているオープンソースのRobot Operating System、ROS 2での開発を理解
 - Node, Service, Actionを理解して、それぞれ簡易的なプログラムを作成する
・ROS 2のコマンドを理解する

レクチャー 4: Platform(HW, RTOS, DDS)

・Autoware.Autoより下層にする、DDS(Data Distribution Service)、RTOS(real-time OS)、HW(ECU)について理解する。Autoware.Autoは、特定のDDS, RTOS, HWだけでなく、いろいろな環境で動作することを想定しているが、一つの例として理解する。

レクチャー 5: 自動運転スタック

スタックというのは、積み上げて置くという意味から来ており、製品・サービスを実現するために積み上げられている一連の構成要素を指す。
自動運転スタック(Autonomous Driving Stacks)は、自動運転を実現するためのハードウェアからソフトウェア、インフラなど一連の構成要素を含んでいる。
・Autoware.Autoが想定している自動運転スタックを理解する
・その他の自動運転スタックについて知る
・Autoware.AIでの実現例を知る
・その他のユースケース、実例を知る

レクチャー 6: Autoware入門

このレクチャーでは、Autowareの歴史と現状のステータスを振り返る。真新しい内容はそこまでなさそう。

レクチャー 7、8、9: LIDAR, Camera, Radar Object Perception(物体認識)

この3つのレクチャーでは、自動運転車両の知覚(Perception)を担う、
・LIDAR – Light Detection and Ranging、レーザー光による検出と測距
・Camera – カメラ画像による検出
・Radar – 電波による検出
について、それぞれの検出メカニズムの基礎からAutoware.Autoでどのように処理をしているのか理解する。

レクチャー 10: 自車状態・位置推定

自動運転において、自車がどこにいるかを正しく理解することが必要で、その精度は数10センチ以内である必要がある。また、車は移動するので、その位置の推定には、リアルタイム性も要求される。
・そこでAutoware.Autoでの自己位置推定をどのように実現しているかの理解

レクチャー 11: LGSVLシミュレーター

家電製品で聞いたことがあるLGがオープンソースで開発を行なっている自動運転向けのシミュレータが、LGSVLシミュレータ。レクチャー 12の動作プランニング・コントロールの挙動のシミュレーションが出来ると思う。
基本的な使用方法を理解して、以降のレクチャーや、自分で開発をするときにどのように使用させるのかを掴んでおきたい。

レクチャー 12: 動作プラニング・コントロール

自動運転の肝になってくる、動作のプランニングとコントロール。
ざっとドキュメントを見たところ、説明は概要レベルで、ソースコードレベルのハンズオンといったものは無さそうだった。まずは概要をしっかりと理解しておきたい。

レクチャー 13: データの記録と解析

開発で、問題が起きたときの、記録データを解析したり、記録データを使って動作を確認したりすること頻繁にある。
そのデータの追加削除などの扱い易さ、解析のし易さというのは開発効率に大きく影響する。
そういったデータの追加削除などの扱い、解析の仕方を理解する。

レクチャー 14: 高精度地図情報

高精度地図情報には、3Dポイントクラウド(点群データ)、レーンなど道路のエリア情報や信号機など構成物の情報を含んでおり、LIDARの検出情報と点群データを照合しての自己位置推定や、信号機の位置割り出して、その領域に対して画像処理を行なって信号の色などを判別することで、処理負荷を下げたり、誤検知のリスクを減らしたりすることが出来る。
これから開発が進む、自動運転レベル3(条件付自動運転)や自動運転レベル4(特定条件下における完全自動運転)においては必須となってくる情報になる。
自動運転レベル5(完全自動運転)では、高精度地図情報がないエリアでも自動運転が可能である必要があるので、高精度地図情報がない状況でも自動運転を可能にする仕組みが必要となってくるが、高精度地図情報がある状態での自動運転とない状態での自動運転には、自動運転のパフォーマンスに差が出ると思われる。(わかり易くは速度を制限するなど)
・高精度地図情報の標準フォーマットを理解する
・Autoware.Auto、自動運転スタックでの高精度地図情報の使い方を理解する

さいごに

次回以降、気長にレクチャーを読み進めていきたいと思う。
ざっとレクチャー内容を見てみて、自動運転スタックに含まれている技術は、その他の開発でも利用ができる、されている技術が多く、需要の高いものが多いと思うので、身に付けることができればエンジニアとして、とても良い引き出しになるだろう。

Top image is from pixabay.