こんにちは、ティアフォーでAutowareのSimulator開発を担当している片岡と申します。弊社ではSimulationや実車評価を通して様々な側面からAutowareの性能評価と開発へのフィードバックを行っております。今回はその一環でIntelのRSS(Responsibility Sensitive Safety)という安全評価基準のライブラリを読み解きましたのでその中身について解説したいと思います。
Intel RSSはIntel(Mobileye)が提唱している自動運転車両の安全性を評価する基準です。評価基準の詳細な計算ロジックが記述されている論文「On a Formal Model of Safe and Scalable Self-driving Cars」はarXivにおいて公開されています。
RSSはHD Mapと周囲のオブジェクトの動きから、自動運転車が取ってよい動作コマンド(縦方向、横方向加速度)の範囲を計算します。
公道において自動運転車両が出会う状況を数式で表現することで自動運転車両が取った行動の危険度を数値化することが可能になります。この機能は「この危険な状況は道路上にいる誰のせいで発生したのか」を表現することができるため、公道走行ログから危険なシナリオを抽出したり、様々なパラメータで実行されたSimulation Testの結果を分析するのに使うことができます。
このロジックは本質的にはAutoware等の自動運転システムに含まれるプランナーと等価なものであり、後述するad-rss-libのサポート対象からは外れているものの、障害物回避等の動きを行うことも可能なようです。
下のCARLA 0.9.10のNew Feature紹介動画においては、実際にRSSに基づいて計算された制御入力を使ってUnstructuredな環境での障害物回避が行われています。
RSSは内部に状態機械を持っており、様々なシチュエーションに対して適切な評価関数を選択することで自動運転システムからの出力が適切かを評価することができます。
*1
*2
RSSは自動運転のサブシステムとして実装することを考慮して設計されており、認識結果からワールドモデルを構築して自動運転システムからの出力を制限するといった使い方が想定されています。
また、後述するad-rss-libは様々な外部ツールとインテグレーションされており、インテグレーションもやりやすい仕様になっていることが伺えます。
今回紹介するのは、この論文に有る内容をC++で実装したOSSです。
ライセンスはLGPL2.1となっていて、Ubuntu16.04、18.04、20.04で動作します。
CARLAやBaiduのApolloといった自動運転業界で有名なOSSでもこのライブラリはインテグレーションされており、その使いやすさと注目度の高さが伺えます。
現在のversion(4.4.0)においては以下の内容がサポートされています。
逆にサポート範囲外となっているのは以下の内容になります。
ad-rss-libはC++とCMakeで書かれており、PythonのC APIを使用してPython Bindingsも製作されています。
ad-rss-libのコアライブラリは以下の2つのディレクトリに格納されています。
ad_rssは以下のようなディレクトリ構造になっています。
ad_rss
├── CMakeLists.txt
├── doc
├── generated
├── gtest-cmake.txt.in
├── impl
│ ├── ad_rss.cmake
│ ├── include
│ ├── src
│ │ ├── core
│ │ ├── situation
│ │ ├── unstructured
│ │ └── world
│ └── test
└── python
CMakeLists.txtはCMakeの設定ファイルであり、ビルド手順が記述されています。
docディレクトリにはDoxygenの設定ファイルが入っており、こちらのドキュメントを生成するのに使われています。
generatedディレクトリには縦方向の反応時間といったRSSの計算で使われるデータ型を文字列等から作成するためのユーティリティが含まれています。
implディレクトリは更に4つのディレクトリに整理されており、それぞれ
に分割されています。
レーン座標系への変換等は特に加速度の連続性を維持するためにかなり工夫がなされているようです。このあたりの綺麗に実装するのが難しいロジックをオープンにしてくれるのは非常にありがたいですね!
*3
PythonディレクトリにはPythonのC APIを利用してPythonからad-rss-libのロジックをラップして使えるようにするための関数が入っています。
ad_rss_map_integrationは以下のようなディレクトリ構造になっています。
ad_rss_map_integration
├── CMakeLists.txt
├── doc
├── generated
├── impl
└── python
implディレクトリ以外はad_rssディレクトリと同様のコードが入っています。
implにはRSSの内部で使われているHD Mapに関連するコードが収録されています。
Apolloは自動運転車の行動計画部分にRSSのモジュールをインテグレーションしています。
バイドゥの自動運転プロジェクト「Apollo」、自律運転機能の強化でMobileyeと提携
具体的な実装箇所は以下のものになります。
このドキュメントによるとApolloのEMプランナー(Apolloのプランニングアルゴリズム)は3つのカテゴリーのタスクが交錯する反復的なアプローチをとっており、この中のタスクの一種としてRSSのタスクが実装されているようです。
*4
実装されている内容としては
というロジックになります。
CARLAにおいてはRSS SensorとRSS Restrictorの2種類のIntegrationがされています。
*5
RSS Sensorは自車両の制御コマンドがRSSの基準を満たしているかをチェックするセンサーです。
上記の動画に有るとおり、様々な状況下でRSSをメトリクスとして自車両の危険な行動をチェックできています。
CARLAのver 9.10.0からはUnstructuredな環境での実行もサポートされており、市街地環境における本格的なSimulationの実現に向けて着々と進んでいる様子が見て取れます。
RSS RestrictorはRSSのメトリクスを使い、NPC車両にその場面において危険な状況をうむ制御入力を入れないようにするためのモジュールです。
具体的な実装箇所はこちらです。
この関数はPythonから呼び出せるようになっており、CARLAのPython APIで呼び出すことによってNPCが適切に振る舞うことができるようになるようです。
今回は自動運転システムを支える評価基準の一種であるIntelのRSSとそのオープンソース実装について解説しました。今後はこのツールを活用しAutowareの性能評価をさらに加速させ、安全安心でオープンソースな自動運転システム開発を強力に押し進めていきたいと思います。
*1 https://intel.github.io/ad-rss-lib/images/ad-rss-map-situation_analysis.png
*2 https://intel.github.io/ad-rss-lib/images/ad-rss-lib-Integrate_Into_Sense-Plan-Act.png
*3 https://intel.github.io/ad-rss-lib/images/lanes_with_different_width.svg
*4 https://raw.githubusercontent.com/intel/ad-rss-lib/master/doc/images/apollo_integration.png
*5 https://carla.readthedocs.io/en/latest/img/rss_carla_integration_architecture.png
オープンソースのソフトウェアを一緒に開発していきませんか?
ティアフォーでは、「自動運転の民主化」というビジョンに共感を持ち、自らそれを実現する意欲に満ち溢れた新しい仲間を募集しています。
Media Contact
pr@tier4.jp
Share the post
LinkedIn | Twitter | Facebook | Instagram