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

Intelのad-rss-libを大解剖!RSSのライブラリのアーキテクチャと中身を解説

作成者: TIER IV|Mar 17, 2021 1:00:00 AM

こんにちは、ティアフォーでAutowareのSimulator開発を担当している片岡と申します。弊社ではSimulationや実車評価を通して様々な側面からAutowareの性能評価と開発へのフィードバックを行っております。今回はその一環でIntelのRSS(Responsibility Sensitive Safety)という安全評価基準のライブラリを読み解きましたのでその中身について解説したいと思います。


Intel RSSとは?

 

Intel RSSはIntel(Mobileye)が提唱している自動運転車両の安全性を評価する基準です。評価基準の詳細な計算ロジックが記述されている論文「On a Formal Model of Safe and Scalable Self-driving Cars」はarXivにおいて公開されています。


RSSの概要

RSSはHD Mapと周囲のオブジェクトの動きから、自動運転車が取ってよい動作コマンド(縦方向、横方向加速度)の範囲を計算します。


公道において自動運転車両が出会う状況を数式で表現することで自動運転車両が取った行動の危険度を数値化することが可能になります。この機能は「この危険な状況は道路上にいる誰のせいで発生したのか」を表現することができるため、公道走行ログから危険なシナリオを抽出したり、様々なパラメータで実行されたSimulation Testの結果を分析するのに使うことができます。


このロジックは本質的にはAutoware等の自動運転システムに含まれるプランナーと等価なものであり、後述するad-rss-libのサポート対象からは外れているものの、障害物回避等の動きを行うことも可能なようです。


下のCARLA 0.9.10のNew Feature紹介動画においては、実際にRSSに基づいて計算された制御入力を使ってUnstructuredな環境での障害物回避が行われています。

 


RSSは内部に状態機械を持っており、様々なシチュエーションに対して適切な評価関数を選択することで自動運転システムからの出力が適切かを評価することができます。


*1


RSSと自動運転システムのIntegration

*2

 

RSSは自動運転のサブシステムとして実装することを考慮して設計されており、認識結果からワールドモデルを構築して自動運転システムからの出力を制限するといった使い方が想定されています。


また、後述するad-rss-libは様々な外部ツールとインテグレーションされており、インテグレーションもやりやすい仕様になっていることが伺えます。


ad-rss-lib

今回紹介するのは、この論文に有る内容をC++で実装したOSSです。


ライセンスはLGPL2.1となっていて、Ubuntu16.04、18.04、20.04で動作します。


GitHub - intel/ad-rss-lib: Library implementing the Responsibility Sensitive Safety model (RSS) for Autonomous Vehicles


CARLAやBaiduのApolloといった自動運転業界で有名なOSSでもこのライブラリはインテグレーションされており、その使いやすさと注目度の高さが伺えます。


現在のversion(4.4.0)においては以下の内容がサポートされています。


  • 複数のマップバージョンをサポート(Map Integration)
  • 構造化されていない道路や歩道も扱える
  • 複数車線の道路、すなわち縦方向および横方向の安全距離と適切な対応の決定
  • 交差点、つまり、異なるジオメトリの2つ以上のルート、ルートの交差点のルール、優先権/通行権、および縦方向と横方向の適切な応答の決定

逆にサポート範囲外となっているのは以下の内容になります。


  • オクルージョンの考慮
  • 回避動作を生成するロジック
  • 横方向の衝突がない交差点の対応

ad-rss-libのパッケージ構成

ad-rss-libはC++とCMakeで書かれており、PythonのC APIを使用してPython Bindingsも製作されています。


ad-rss-libのコアライブラリは以下の2つのディレクトリに格納されています。



ad_rssの中身

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の設定ファイルが入っており、こちらのドキュメントを生成するのに使われています。


ad_rss: Main Page


generatedディレクトリには縦方向の反応時間といったRSSの計算で使われるデータ型を文字列等から作成するためのユーティリティが含まれています。


implディレクトリは更に4つのディレクトリに整理されており、それぞれ


  • core:下に記したディレクトリ群の中の関数を使うための関数群を収録
  • situation:各situationにおいて実行されるロジックを収録
  • unstructured:構造化されていないシーンでのロジックを収録
  • world:レーン座標系への変換や現在のsituationの認識等のロジックを収録

に分割されています。


レーン座標系への変換等は特に加速度の連続性を維持するためにかなり工夫がなされているようです。このあたりの綺麗に実装するのが難しいロジックをオープンにしてくれるのは非常にありがたいですね!


*3

PythonディレクトリにはPythonのC APIを利用してPythonからad-rss-libのロジックをラップして使えるようにするための関数が入っています。


ad_rss_map_integrationの中身

ad_rss_map_integrationは以下のようなディレクトリ構造になっています。

 

ad_rss_map_integration

├── CMakeLists.txt
├── doc
├── generated
├── impl
└── python

 

implディレクトリ以外はad_rssディレクトリと同様のコードが入っています。


implにはRSSの内部で使われているHD Mapに関連するコードが収録されています。


ad-rss-libの使い方

ApolloにおけるRSSのIntegration

Apolloは自動運転車の行動計画部分にRSSのモジュールをインテグレーションしています。


バイドゥの自動運転プロジェクト「Apollo」、自律運転機能の強化でMobileyeと提携


具体的な実装箇所は以下のものになります。


apollo/modules/planning/tasks/deciders/rss_decider at a29a563e95944b603ab9be338cce46e6486a89be · ApolloAuto/apollo


このドキュメントによるとApolloのEMプランナー(Apolloのプランニングアルゴリズム)は3つのカテゴリーのタスクが交錯する反復的なアプローチをとっており、この中のタスクの一種としてRSSのタスクが実装されているようです。


*4


実装されている内容としては



というロジックになります。


CARLAにおけるRSSのIntegration

CARLAにおいてはRSS SensorとRSS Restrictorの2種類のIntegrationがされています。


*5


RSS - CARLA Simulator


RSS Sensor

RSS Sensorは自車両の制御コマンドがRSSの基準を満たしているかをチェックするセンサーです。


 

 

上記の動画に有るとおり、様々な状況下でRSSをメトリクスとして自車両の危険な行動をチェックできています。


CARLAのver 9.10.0からはUnstructuredな環境での実行もサポートされており、市街地環境における本格的なSimulationの実現に向けて着々と進んでいる様子が見て取れます。

 

 

RSS Restrictor

RSS RestrictorはRSSのメトリクスを使い、NPC車両にその場面において危険な状況をうむ制御入力を入れないようにするためのモジュールです。


具体的な実装箇所はこちらです。


carla/LibCarla/source/carla/rss/RssRestrictor.cpp at 5bd3dab1013df554c0198662e0ceb50b7857feba · carla-simulator/carla


この関数は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


More
Autoware—Github | The Autoware Foundation