最新情報|株式会社ティアフォー

AutowareのチュートリアルとComponentのハイレベルな設計

作成者: TIER IV|Nov 14, 2022 1:00:00 AM

1. はじめに

こんにちは、ティアフォーでオープンソースの自動運転システム「Autoware」の開発をしている斉藤です。現在は主にAutowareのアーキテクチャ・設計を担当しています。


ブログ「スケーラブルな自動運転システム開発プラットフォームのためのリポジトリ構成」で、スケーラブルな自動運転システム開発プラットフォームのためのリポジトリ構成について説明がありました。


Autowareではスケーラブルなプラットフォームを目指しているため以下のような様々な要求があり、これらの要求に答えられる設計を目指して日々改善を重ねています。


  • 様々なセンサー構成に対応したい
  • 様々な車種に対応したい
  • コンピュータースペックに応じて使える機能や性能を選択できるようにしたい
  • 最新の研究から古典的な手法まですぐに取り込めるようにしたい など

今回は、Autowareを実際に動かすための手順と設計や考え方についてお話します。


現在、すべての要求を満たせる自動運転アーキテクチャの決定版はなく、技術レベルやトレードオフを考慮して今後も変わっていく可能性がある点にご留意ください。


2. Autowareのインストール方法

まずは、Autowareをインストールして動かしてみることが理解につながる近道だと思うので紹介していきます。Autowareのインストール方法に関してはこちらのドキュメントにて管理されています。


現在サポートされている動作環境は以下のとおりです。


  • Ubuntu : 20.04, 22.04
  • ROS 2 : Galactic, Humble

Sourceビルドから利用する方法とDockerを利用する方法の2パターン有りますが、今回Sourceからビルドする方法を動画(0:00~4:40)にしてたので、ぜひこちらを参考にしてみてください。

 


2.1. スペックに関する注意点

現在のAutowareでは使う機能にもよりますが、フルの機能を使う場合は、最低でも以下のスペックが必要になります。


  • CPU : 8 cores
  • Memory : 16GB RAM
  • [Optional] NVIDIA GPU (4GB RAM)

Autowareの起動構成として処理負荷の重い(主に機械学習ベースの認識系の技術)を使わない場合、より低スペックで動作すると思います。


私の感覚になりますが、Autowareを動作させるに支障がないスペックとしては以下のようになります。


  • CPU : 8 cores and 16 threads
  • Memory : 32GB RAM
  • NVIDIA GPU (6GB RAM)
    • 目安:GTX 2060 以上
    • 利用する機能 : Rvizのスムーズな描画, Perceptionにてニューラルネットワークを利用した推論

2.2. ビルドに関する注意点

良くあるビルド時のつまりポイントを紹介します。


最新のトラブルシューティングのドキュメントはこちらを参照してください。


2.2.1 ビルド時にメモリが足りない

ビルド時にいくつかのパッケージのメモリ消費が大きく、メモリが足りないことが有ります(CPUコアによるビルド並列度にも依存)。もしメモリが足りない場合は、swap領域を増やすか、ビルドの並列度を下げる必要が有ります。ビルドの並列度を制限したコマンドのサンプルを示しておきます。


MAKEFLAGS=-j1 colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release --parallel-workers 1 # MAKEFLAGSはパッケージ内の並列数、parallel-workersはパッケージの並列数

 

2.2.2 パッケージの依存のエラーが出る

Autowareを開発しているとパッケージの依存のエラーが出ることが有ります。原因は様々ですが、大きくは2つです。


1つ目は、ブログ「スケーラブルな自動運転システム開発プラットフォームのためのリポジトリ構成」でも説明があったとおり、リポジトリが分割されているためリポジトリ間のバージョン・更新がズレていることが有ります。


2つ目は、新たな外部パッケージへの依存が発生し、インストールされていないことです。


いずれもこちらのHow to update a workspaceを参考にしていただければ解決すると思われます。


3. Autowareのチュートリアル

チュートリアルのドキュメントはこちらになります。


Autowareのチュートリアルには以下の2種類がありますが、Ad hoc simulationから利用することをおすすめします。Scenario simulationは予め定義されたパターンをテストするものであり主にCI等で使われています。


  • Ad hoc simulation
  • Scenario simulation

Ad hoc simulationの中にはRosbag replay simulation、Planning simulation、Digital Twin simulationの3種類があります。詳しくは次の「Autowareの各コンポーネントの説明」の章で説明をしますが、Autowareの機能は大きく以下の5つに分かれており、テストの目的や範囲に応じてよって使い分けます。


  • Sensing
  • Localization
  • Perception
  • Planning
  • Control



3.1 Rosbag replay simulation

Rosbag replay simulationでは実機を使って走行した際に、取得したセンサー・車両データを再生してテストします。


センサー・車両データを一方的に流すテストになっているため、PlanningやControlを含んだClosed Loopなテストはできません。


ただし、実データを使った検証ができるため、実験中に起きた問題を解析・修正する場合に重宝します。


ドキュメント


How to 動画(10:00~)

 

 

3.2 Planning simulation

Planning simulationでは主にPlanningのテストにフォーカスしPlanningに必要なinputを模擬して動作させます。模擬するものとしてはPerception、Localization、Vehicle Interfaceになります。


ノートパソコン程度のスペックで動作させることができ、Planningの挙動を確かめるときに頻繁に利用します。


障害物を召喚させたり日々いろいろな機能が拡張されています。


ドキュメント


How to 動画(4:48~)

 

 

3.3 Digital twin simulation

Digital Twin simulationは現実に近い仮想環境の中でシミュレーションを行います。Rosbag replay simulationやPlanning simulationでは不可能だった「全体を結合したテスト」や「実機のコンピューティングリソースに関する解析」が可能になります。


Digital twin simulationの実装例としてはAWSIMががあり、Unityをベースとしています。


AWSIMはROSCon2022でOSS化されたばかりなので、これからドキュメントの更新が入る可能性が高く、最新の情報を見てもらう方が良いと思います。


利用しやすいようにバイナリファイルでの提供も行っているので特別な環境構築は不要です。


ドキュメント


紹介動画

 

3.4 動作させる上での注意点

会社で使う場合はネットワークのドメインの設定をしないと、ドメインが被ってしまいトピックやサービスが同一ネットワーク内で衝突してしまいます。


こちらを参照しながら必要に応じて環境を設定してください。


4. Autowareの各コンポーネントの説明

AutowareにはSensing、Map、Localization、Perception、Planning、Control、Vehicle Interfaceといった計7つのコンポーネントから構成されています。


Architecture overview - Autoware Documentation


自前のコンポーネントを利用したいというときに、一部のコンポーネントを差し替えができるように、各コンポーネントのインターフェース *1 が定義されています。これらのインターフェース定義はAutowareのGitHub Discussionsで話し合われています。


各コンポーネントの役割と自動運転走行に必要なインターフェース *2 について解説していきます。



4.1. Sensing

役割

  • 各センサーのデータを抽象化しベンダーごとの差を吸収する
  • 各コンポーネントにおける共通のセンサーデータ処理を行う
    • 例 : 自車両に当たる点群を除去, 虫などのノイズ点群を除去、点群の歪みを補正

対応しているセンサー


Input/Output


4.2. Map

役割

Autowareで利用する点群地図とVector地図(Lanelet2 *3)を管理し、地図の配信機能や共通処理を行う


Input/Output


4.3. Localization

役割

センサーデータ・マップ情報・車両情報を統合してマップ上の位置や現在の車速といった自車両の情報を推定する


Input/Output


4.4. Perception

役割

Sensingされたデータをもとに周囲の環境を認識する


  • 動物体の認識
  • 静止障害物も含む障害物の検出
  • 信号認識

Input/Output


4.5. Planning

役割

与えられた目的地もしくはルートに対して自車が走るべき軌跡を生成


Input/Output


4.6. Control

役割

Planningの結果の軌跡に対して誤差を極力小さくするように操作量を決める


Input/Output


4.7. Vehicle Interface

役割

車両の個体差および制御インターフェースの差を吸収し、車両に対して操作指示をする


Input/Output


5. おわりに

本記事では、Autowareを実際に動かすための手順と設計や考え方について紹介しました。


今後は各コンポーネントの説明についても解説をしていこうと考えています。

 

*1 今後、技術動向によってもインターフェースの変更が入る可能性があります。
*2 現在外部サービスと連携するためのAPIの策定が行われており、外部サービス用・安全診断・故障判断系のインターフェースについては載せていません。
*3 ティアフォーテックブログ:Lanelet2に関する過去ブログ :自動運転の地図、ベクターマップについて
*4 こちらで検討中。
*5 こちらで位置情報、速度情報、加速度情報に関しては結合・分離について検討中。
*6 Outputが満たされればよく、Input情報を全て必要としているわけではありません。

オープンソースのソフトウェアを一緒に開発していきませんか?


ティアフォーでは、「自動運転の民主化」というビジョンに共感を持ち、自らそれを実現する意欲に満ち溢れた新しい仲間を募集しています。


キャリアページ

 

Media Contact
pr@tier4.jp


Share the post
LinkedIn | X | Facebook | Instagram


More
Autoware—Github | The Autoware Foundation