こんにちは。ティアフォーの上野です。
先日から安全への取り組みについての連載が始まったところですが、今回はティアフォーからThe Autoware Foundation (AWF)に提案しているAutowareの新アーキテクチャを紹介したいと思います。
はじめに
2015年8月25日にAutowareが公開されてから、もうすぐ5年が経とうとしています。
Autoware公開当初は、アカデミックの研究成果をもとに自動運転システムのアーキテクチャを模索しながら開発が行われていました。
その後、世の中で自動運転の機能や研究が急速に発展していく中で、それらを統合するためのより良いアーキテクチャとはどのようなものなのか、日々議論が行われてきました。しかし、そのような議論を詳細まで詰めていくためには、実際に細部まで実装してみないと分からない部分も多くあります。
ティアフォーでは、これまで積み上げてきた実証実験の経験を活かし、プロトタイプ実装を繰り返しながらアーキテクチャの議論を進めてきました。そして今回、それらの議論がある程度成熟したと判断し、今後のOSSの自動運転開発に向けた詳細な新たなアーキテクチャ提案を、そのプロトタイプ実装とあわせて公開することにしました。
プロトタイプ実装のソースコードは下記リンク先で公開していますので、是非ダウンロードして試してみてください。
https://github.com/tier4/AutowareArchitectureProposal
アーキテクチャ紹介
下の図の通り、このアーキテクチャではAutowareは7つのモジュールで構成されています。
各モジュールの役割が明確化されてインターフェースがシンプルになり、OSSとしてより継続的に開発・改善しやすい構造になっています。
各モジュールは以下のような役割を担っています。
- Sensing:センサーから取得したデータのROSメッセージ化。他のモジュールにデータを渡す前の共通の前処理。
- Localization:センサーデータを統合し、自車両の自己位置と速度を推定。
- Perception:動物体の認識、および信号機の色認識。
- Planning:ゴール地点までのルート計算から実際の走行軌跡生成までの処理。
- Control:走行軌跡に沿って走るための、車両へのコマンドの生成。
- Map:地図データの読み込み、変換。
- Vehicle:Autoware内のデータ形式と車両固有の信号フォーマットの変換。
以下、各モジュールについてもう少し詳しく説明していきます。
Sensing
Sensingモジュールでは、LiDAR・カメラ・GNSS・IMUの4種類のセンサーをサポートしています。それぞれのセンサーに対してドライバーを用意し、ROSのメッセージ型にデータを変換します。
また、Preprocessorとして、他のモジュールへデータを渡す前の前処理(例:LiDARの点群データからの外れ値除去や、自車両の運動による歪みの補正など)を行います。
Localization
Localizationモジュールでは、センシングしたデータをもとに、自車両のPose(位置と姿勢)とTwist(並進速度と角速度)を求め、mapからbase_linkへのTFとTwistを出力します。
Pose estimatorではLiDAR・カメラ・GNSSの3種類のセンサーベースの自己位置推定手法をサポートしており、Twist estimatorではIMU・車両からのTwist情報を統合して扱うことができます。
このように複数のセンサーを併用することで、より高い精度、ロバスト性を持った自己位置推定を実現することが可能になります。
Perception
Perceptionモジュールは、①Object recognitionと②Traffic light recognitionの2つのパートに分かれています。
①では車両の周りを取り巻く物体の検出・追跡・予測を行っており、②では信号の検出および識別を行います。
”はじめに”の章でご案内したプロトタイプ実装のコードでは、信号機の色(赤・黄・青)が認識できるようになっていますが、カスタマイズすることで、他の信号(矢印、国・地域特有の信号)への対応も可能です。
Planning
Planningモジュールでは、今回はシナリオ形式を採用しました。
このシナリオ形式では、走行のシチュエーション(例:通常の道路走行、駐車場での駐車など)に応じた適切なシナリオを選ぶことにより、各シチュエーションにおける適切な挙動をするようPlannerを切り替えることが可能となります。
また、開発の観点からも、個々のシナリオの独立した(並行した)開発や、シナリオに応じたパラメータチューニングが可能というメリットがあります。
Control
Controlモジュールでは、Planningで計画した走行軌跡に沿って車両を走らせるための、車両へ送るコマンド(ハンドルの角度と各速度、車両の速度と加速度など)を生成します。
また、遠隔操作のコマンド等、Autoware外部からの入力も含めた複数の制御値のうち、どのコマンドを実際に車両に送るか切り替えるGatewayとしての役割も担っています。
Map
Mapモジュールでは、①Pointcloud mapと②Vector mapの2種類のマップをサポートしています(※)。
①は3Dの点群地図の情報、②は車線や信号の位置といった地物情報を含んでおり、それぞれのマップに対するLoaderを通して、Localization・Perception・Planningといった他のモジュールで利用可能な形にデータを変換しています。
※Vector mapはLanelet2のみのサポートとなっています
Vehicle
Vehicleモジュールは、Autoware内で扱われているデータ形式と車両固有の信号フォーマットの変換を行うため、車両によってモジュール内の構造が異なります(上の図に加えて、追加の変換コンポーネントが必要な場合があります)。
Autowareから車両へ(上の図の右向き矢印)と、車両からAutowareへ(左向き矢印)の双方向の変換が行われます。
デモ動画
新アーキテクチャのプロトタイプ実装を用いてデモを行った動画を、YouTubeで公開しています。どんなことができるようになっているのか、是非動画でご覧ください。
この他にも、別のデモ動画やシミュレーション動画も公開しています。”autoware architecture proposal”で検索していただくか、Tier IVチャンネルからご覧ください。
おわりに
新アーキテクチャの内容、いかがでしたでしょうか?
ブログタイトルや“はじめに”に書いてある通り、この新しいアーキテクチャはAWFに対して現在絶賛提案中です(2020年6月上旬時点)。今後Autowareがどのように変わっていくのか興味を持たれた方、自分も議論に参加したいという方は、ぜひAWFの活動に参加していただければと思います。
また、今回はアーキテクチャの紹介でしたが、今後それぞれのモジュールの実装の詳細についても紹介する記事を展開する予定ですので、そちらもどうぞご期待ください!