ティアフォーにおけるシミュレーションを用いたCIの取り組み

こんにちは、ティアフォーでWebプラットフォーム開発を行っている徳永です。

今回は、自動運転システムの開発にWebの技術がどのように使われているかの一例として、現在弊社で開発しているシミュレーションを用いたContinuous Integration(CI)システムの概要を紹介したいと思います。

はじめに

警察庁の統計によると、2020年7月には24,951件の交通事故が発生しており、そのうち死亡事故が185件発生しています。

事故とまではいかなくとも、一歩間違えていれば事故になっていたヒヤリハットも発生しているでしょう。

自動運転車の走行においてはこういった事象が発生することは当然防がねばならず、人間が運転するよりもむしろ安全だという世界を作り出すことが一つのミッションであると言えます。

このミッションを達成するためには、事前に十分なテストを行い、 あらゆる状況に対応できるよう自動運転システムが進化していく必要があります。 

自動運転のテスト

自動運転においても、実車を用いたテストは重要です。実験場所に赴き、テストしたい状況を作り出し、自動運転車が意図通りに動作することを確認します。

しかしながら、雨や雪が降っている状況や、事故一歩手前のギリギリの状況など、全ての状況について実車を用いたテストを行うことは現実的ではありません。

一方、シミュレーションされた空間で車を走行させることができればこういった特殊なケースのテストも可能になりますし、もっとありきたりな状況であったとしても、実車を用いるより素早く多くの状況をテストすることが可能になります。

そのため、自動運転システムの開発ではシミュレータを用いたテストを行うことがとても重要となってきます。 

自動運転の仕組みとシミュレーションの分担

先日の記事でも紹介がありましたが、Autowareはいくつかのモジュールで構成されており、それぞれが役割・責務を負っています。

シミュレーションを用いてAutowareのテストを行う際、1種類のシミュレータで全ての機能をテストするよりも、それぞれのモジュールに対して最適なシミュレータを用いたテストを行うことで、より効率的にテストを実施することが可能です。

ティアフォーでは、以下のような分担でのシミュレーションの活用を考えています。

  • Log Simulator - Perceptionモジュールのテスト
    • 実際に計測したセンサやカメラなどのログデータを入力とし、それらの情報を基に周辺物体の検知・追跡・予測などを行うPerceptionモジュールに関するテストを行う。
  • Planning SimulatorPlanningモジュールのテスト
    • 物体検知などのPerceptionに関する情報は理想的な情報をダミーで与え、車両のPlanningに関するテストを行う。
  • E2E Simulator結合テスト 
    • Game Engineを用いた仮想的な3Dマップ内で仮想車両を走行させることで、現実を模した状況において、Sensing, Perception, Planningなど全てを対象としたテストを行う。また、ランダムな状況で長時間走行させることで、事前に想定することが難しいエッジケースの探索も行う。

これらのシミュレーションは、Autoware開発者がローカル開発環境での動作確認などで用いたり、あるいは各機能の実装時にProduct Ownerが受け入れ確認用として用いることなどが考えられます。

シミュレーションとContinuous Integration(CI)

自動運転ソフトウェアの開発で重要なことの一つに、日々の開発によって変化するソフトウェアの安全性をどう担保するかが挙げられます。ソフトウェアが日々変化していく際には、その過程で今まで対応できていたことに対応できなくなるなどのデグレードデグレ)が発生することも考えられます。

新しくリリースされたソフトウェアが実際の車両に適用されるまでにこれらを検知して着実に修正するためには、継続的にテストを実施し、常に既存のテストに合格している状態を保ちながら開発を行うことが必要となってきます。

こういった継続的なテストを一般的にContinuous Integration(CI)と呼びます。

CIによる安全性担保

Autowareは様々なノードから構成されているため、何かの拍子にデグレが入るという可能性もあります。もし、想定している機能が正しく動いていない状態で実車試験を行うと、想定外の挙動で事故に繋がることも考えられます。

こういったことをなくすため、ティアフォーではシミュレーションによるCIパイプラインを構築し、Autowareの開発を進めていく際に、前章のPlanning Simulatorによるリグレッションテストを回しています。

シミュレーションにおいて、他の車両の動きやAutowareによる自動運転車がどのような動きを行えばよいかを定義したものをシナリオと呼びます。シミュレーションによるAutowareの動作テストはこのシナリオを基に行っています。

テスト対象となるシナリオは、概ね以下のような流れにより登録されます。

  1. 自動運転車の走行環境(ODD)を定める
  2. ODDに準じたテスト要件を整理
  3. テスト要件から、使用する地図を定め、シミュレーションを行うシナリオを作成
  4. シナリオをシミュレータが読み込めるフォーマットで記述
  5. 作成したシナリオをシミュレータで実行し、シナリオが意図通り動作しているか確認
  6. CIとして登録し、以後リグレッションテストの対象シナリオとなる

現在、社内のCIシステムの中には、多くのシナリオが登録され、AutowareにPRが発行されたタイミングやリリースのタイミングで、自動的にリグレッションテストが回るようになっています。 Autoware開発者は自身がコードの変更を行った際にリグレッションテストの結果を参照し、自身のコードがデグレを発生させてないか確認することができます。

このように、CIを開発の軸に置くことによって、安全性を担保しつつもAutowareの開発スピードを落とさないような仕組みを日々試行錯誤しながら構築しています。

f:id:tkng-t4:20200901102418p:plain

CIのテスト結果を確認するWeb画面。 CIのWebシステムも日々更新されています。

シミュレーションの課題と技術的チャレンジ

シミュレーションを行うにあたり、解決すべき課題はたくさん存在します。

例えば、以下のような課題が存在します。

  • シナリオの記述そのものに時間がかかる
  • 特徴的なシナリオを事前に考えることに限界がある
  • GameEngineのシミュレーションを行う場合、3Dマップ生成に関するコストが高い

こうした課題を解決するために、Ontologyを用いたシナリオ自動生成(Ontology based Scene Creation for the Development of Automated Vehicles)や、HD Map(Paracosm: A Language and Tool for Testing Autonomous Driving Systems)またはログデータからシナリオ自動生成する手法などの活用により、シナリオをシステム的に網羅的かつ低コストに生成できないかを現在検討しています。また、3DマップについてもODDなどの要件から自動生成ができないかといったことを検討しています。

ティアフォーではCIとしてシミュレータを動作させるための基本的な部分の開発のみでなく、このような研究分野も調査し、より先進的で安全な自動運転の実現に向けた開発を日々行っています。

 

まとめ

ティアフォーでは、安全な自動運転社会の実現に向けて様々な取り組みを行なっています。本記事では幅広く紹介しましたが、それぞれの詳細な内容に関しては別の記事で紹介することができればと思います。

現在ティアフォーでは、自動運転システムはもちろん、それを支えるWebシステムを一緒に開発していく仲間も募集しています。もしご興味があれば是非エントリーをご検討ください!!

tier4.jp

 

プラットフォームOSの選び方

こんにちは、ティアフォーの伊藤です。

コロナで自粛中、テレワークに励んでいますが、つい時間を忘れて稼働時間が長くなってしまう今日この頃です。

私はAutowareのプラットフォーム開発を担当していまして、OSやROSといった低レイヤーの部分を中心に見ています。今回はそのOSの部分についてお話したいと思います。

さて、現在Autowareが公式にサポートしているOSはUbuntuになります。

Ubuntuはフリーで使用できる、とても有名なLinuxディストリビューションです。Autowareが研究段階の時から使用されています。

しかしながらAutowareを実用化するにあたり、今までなんとなく使ってきたUbuntuをこのまま使用し続けてよいのか、という議論がありました。

Linuxディストリビューションには3つの流派があります。

AutowareではDebian系のUbuntuを使っていますので、まずはDebian系の中でDebianUbuntuを比較してどちらを採用すべきなのかを検討していきました。 

Debian vs Ubuntu

検討では様々な側面について比較しましたが、その代表的なものを紹介したいと思います。

  1. ソフトウェアの安定性
    • Basic Foundation
      Debian Ubuntu
      • オリジナルのLinuxディストリビューション
      • unstableブランチから開発開始→ ReleaseCriticalバグなし → testingブランチに昇格 → フリーズ/チェック/細かいバグ修正 → stableとしてリリース。
      • ReleaseCriticalバグがなくなるまでリリースはされない。
      • ボランティアが活動の主体。
      • Debianをフォークしたもの(testingブランチをベースに開発)。
      • ユーザ指向、最新のハードウェアに対応、安定性に不安?
      • Ubuntu独自の修正もあり安定性に不安?
      • Canonical社が活動の主体(ボランティアも協業)。
      Ubuntuは安定性の面で不安視されていますが、別にテストされていないわけではありません。テストはCanonical社が行っていますので、この点については同等と言えるかもしれません。

    • Linux kernel
      Debian Ubuntu
      • 安定したkernelを導入する傾向。
      • ポイントリリースでkernelのバージョンを上げない。
      • 新しめのkernelを導入する傾向。
      • ポイントリリースでkernelのバージョンを上げてくる(メジャーバージョンを上げてくることもある)。
      Ubuntuはポイントリリースでkernelのバージョンを上げてきますが、その際にドライバも更新されてしまい、今まで動いていたものが動かなくなる可能性があります。もっとも自動更新をオフにしておけばよいですが、うっかり設定し忘れすることがあり、これは十分なリスクになり得ます。この点についてはDebianのほうが優勢と言えるでしょう。

      【補足資料:Software release timeline】
      各ソフトウェアのリリース日の関連性を以下にまとめました。
      UbuntuDebianに比べて新しいkernelを導入する傾向にあると思われます。

      f:id:ito--san:20200818113334p:plain


      【補足:CIPについて】
      なんとDebianには、CIP(Civil Infrastructure Platform)というDebianベースのSLTS(Super Long Term Support)があります。

      www.cip-project.org

      サポート期間が10年以上ありますが、対象はKernelとbusybox+αのみになります。そのため、このままでは対象が限定的ですので、他のパッケージもサポートを受ける場合、cybertrust社のEM Linux(有償)を導入する必要があります。または、自前でメンテナンスをしていく(セキュリティパッチをあてていく)ことになります。

      また10年以上も同じプラットフォームを使い続けるのか、という問題もありますが、工場等の設備には非常に適しているディストリビューションと言えるでしょう。

      なお、CIPとコラボレーションする予定のプロジェクトに、ELISA(Enabling Linux In Safety Application)というものがあり、こちらはセーフティ分野においてシステム構築や認証を支援するツールやプロセスを作成するオープンソースプロジェクトです。CIPを使うならばELISAに参画したり何らかの形でコラボレーションすると、機能安全に優れたアプリケーションを開発できるかもしれません。
      以上、少し話がそれてしまいました。

      elisa.tech

  2. プロダクト計画との親和性
    • Release cycle
      Debian Ubuntu
      • リリースはあらかじめ計画されておらず、プロダクトのリリース計画が立てづらい、と言われている。
      • 歴史的には2年おきのリリース。
      • ポイントリリースは不定期(ミスが判明してすぐ再リリースすることもある)。
      • リリースはあらかじめ計画されており、プロダクトのリリース計画が立てやすい。
      • ポイントリリースもあらかじめ計画されている。
      バグがなくなるまでなかなかリリースされないことが、かつてのDebianのデメリットでした。Ubuntuはそれを解消するために計画重視のリリースになっています。どちらかというと、ディストリビューションのリリース計画があらかじめ決まっていたほうが、プロダクトへの導入計画も立てやすいですね。

       

  3. サポートおよびサポート体制
    • Support period
      Debian Ubuntu
      • フルサポート3年。
      • 無償セキュリティアップデート2年。
      • 対応はボランティア次第のところもある。
      • 対応に関心のある企業がお金を出してサポートさせる場合もある。
      • プロプライエタリ系の対応は遅れる。
      • 無償セキュリティアップデート5年。
      • 追加で5年間の有償セキュリティアップデートを受けることが可能。
      • バックにCanonicalの強み。
      • プロプライエタリ系もCanonicalが手を回して対応させる場合もある。
      • NVIDIAのデフォルトOSがUbuntu
      • Tensor FlowもUbuntuをサポート。
      サポートの面からするとバックにCanonicalがいるUbuntuのほうがサポートが厚そうに見えますね。

  4. ROSとの親和性
    • Target platform
      Debian Ubuntu
      • ROSのサポート期間が2つのDebianサポート期間にまたがった場合は、最初のDebianのみをサポート。
      • ROS2の主要なプラットフォームはCanonicalUbuntuリリース。
      ROS2のプライマリプラットフォームは、Ubuntuと定められています。Autoware AutoはROS2を使用していますので、自然にそれに習うという感じになるでしょうか。

    • Buildfarm
      Debian Ubuntu
      • 自らCI環境を構築する必要性がある。
      • CIでエラーが発生した場合の対処とOSRFへの働きかけが必要。
      OSRF側でUbuntuを使用してCIを回しているので安心ですね。ただ、DebianでもCI環境を構築できますし、OSRF(Open Source Robotics Foundation)とCIに関するノウハウを共有できたりと、OSRFに貢献をしていきたい場合はDebianもよいかもしれません。

  5. OTAとの親和性
    • Snap
      Debian Ubuntu
      • Snapは使用可能だが、OTA用のシステムは自ら構築する必要がある。
      • 有償サポートでPrivate StoreやCIを使用可能。
      • Public Storeで問題なければ無料で使用可能。
      OTAでSnapを使用する場合、自前でソフトウェアのアップデートシステムを構築するパワーがあればDebianでもよいと思います。それに対し、Public Storeで一般公開しても問題がないとか、Private StoreやCIを手っ取り早く使いたい場合はUbuntuでもよいと思います。こちらは製品の開発方針に拠るところがありまして、優劣はつけ難いです。

  6. 使用しているユーザー数
  7. プラットフォーム移行にかかるコスト
    • コスト
      Debian Ubuntu
      • かかる。
      • 開発者全員に波及する問題。
      • ほぼゼロ。
      実はティアフォーの開発者は皆Ubuntuを使用しておりまして、Debianへ移行する場合は、大きなコスト(時間)がかかってしまいます。したがって、Ubuntuの場合は現状のまま使い続けていればよいのでコストはかかりませんね。

まとめ

以上、いろいろな側面からDebianUbuntuを比較していきましたが、オープンソースとしてまずAutowareを普及させたいことを重視して、

  • ROS2の主要なプラットフォームはUbuntuなので、まずはAutowareもUbuntu上で動作させるべき。
  • Ubuntuは利用者数が多くCommunityも大きいので、Autowareの普及をより最大化できる。
  • 途中でkernelが更新されるなどUbuntuにもデメリットはあるが、なんとか運用でカバーする。

という理由から現状はUbuntuを選択しています。

ただ、Ubuntuに替わるOSが台頭してくるようになれば、Autowareエコシステムの基盤になる可能性も十分にありますし、積極的に検討していきたいと考えています。今後とも様々なOSの動向を注視していきたいと思います。

最後に

ティアフォーではオープンソースの自動運転ソフトウェア「Autoware」だけではなく、Autowareを下支えするROSやプラットフォームOSの開発や性能改善等も行っております。今回はLinuxについて触れましたが、RTOSの研究や採用検討も進めております。

ティアフォーではAutowareを下支えすることができる優秀なプラットフォームエンジニアも募集していますので、もしご興味があれば是非エントリーをご検討ください。

tier4.jp


※本記事に記載されている会社名、製品名、サービス名は、当社または各社、各団体の商標もしくは登録商標です。

 

ドメイン駆動設計による運行管理システムのアーキテクチャの最適化

こんにちは。ティアフォーでWebサービス開発を担当している池谷です。

世の中はコロナで自粛モードが続いていますが、ティアフォーではリモートワークを活用し日々の業務に柔軟に取り組んでいます。

さて、私の所属するWebチームでは、オープンソースの自動運転OS「Autoware」を利用した多種多様なサービスを開発しています。その中でも代表的なサービスに「FMS」という運行管理サービスがあります。今回は、当サービスを開発してきた振り返りとして、主にドメイン駆動設計によるアーキテクチャの最適化に纏わるトピックについてお話したいと思います。

What's FMS?

tech.tier4.jp

過去にも一度ご紹介させていただきましたが、FMS(Fleet Management System)とは、業界的には「配車サービス」や「運行管理サービス」と呼ばれており、複数の車の走行予定・計画などを管理するサービスです。

例えば、海外ではUber社などが配車サービスを展開しています。国内にも配車サービスビジネスを展開しているプレイヤーは存在します。

ティアフォーのFMSの注目機能

弊社のFMSが運行管理サービスとして特殊な点は以下の通りです。

  • 管理する車が自動運転車である
  • ハイブリッドな運行モデルの走行管理が可能である

運行管理サービスというと、車両に一般的な自動車を用いる場合がありますが、弊社の場合はAutowareの自動運転技術とWeb技術をインテグレーションすることで、自動運転車を使った運行管理サービスを実現しています。

また、FMSは複数の運行モデルに対応しています。運行モデルというと聞き慣れない言葉かもしれませんが、モデルによって以下のような違いがあると認識していただければと思います。

オンデマンド配車モデル

f:id:hikeya:20200508130132p:plain

例えば、自分が今いる場所まで車で迎えに来てほしい人がいた時に、まずその人がいる地点に車を迎車させ、その後目的地まで送り届けるといった車両スケジュールを管理します。

旅客ビジネスや配車ビジネスの場面において求められる運行モデルです。

巡回走行モデル

f:id:hikeya:20200508130208p:plain

一方で、巡回走行モデルは決められた地点を延々と周回するような運行モデルです。

こちらは、工場などの物流ビジネスの場面で求められる運行モデルです。

ベストプラクティスを求めて

FMS開発における試行錯誤

自動運転やMaaSの分野は歴史が浅いこともあり、FMSを含めたWebサービスデザインパターンが確立されていないのが実情です。そのような中、開発にあたっては常に自分達にとってベストな形を模索してきました。

FMSはこれまでに2度に渡る変遷を遂げています。第1の転換期は、α版からβ版への変更で、機能面の拡充サービスとしてのスケーラビリティなどの非機能向上を目的にシステム再構築を実施した大イベントです。現在のFMSの礎はここで構築されました。

しかしその後、マイクロサービスとしての設計上の問題などが影響し、次第にバグが増加したりシステムの保守性が低下していきました。そこで、こういった課題を解決すべく実施したのがアーキテクチャの最適化です。これが第2の転換イベントです。今回はこのイベントにフィーチャーしたいと思います。

f:id:hikeya:20200424182553p:plain

浮上していた課題

具体的には、β版は次のような課題を抱えていました。

  • マイクロサービスにおけるコンポーネントのメッセージング・I/Fが密結合してしまっていた
    コンポーネントに閉じた修正のはずが他のコンポーネントに影響しデグレが発生
  • リファクタリングが不足し変更容易性が低下していた
    機能追加や機能変更時に必要以上に時間を消費
  • システムとして仕様の明記や用語の整理が不十分なために全体の理解容易性が低下していた
    新しい開発者がキャッチアップに躓いたり属人化の傾向が出ていた

これらの課題を解決するために、アーキテクチャを俯瞰的に見直し、各コンポーネントリファクタリングや再開発を実施しました。

開発手法のアプローチ

ドメイン駆動設計

アーキテクチャ全体の見直しにあたって、開発手法としてドメイン駆動設計を取り入れました。人気度が高く話題に上がることの多いDDDですが、DDDを採用した理由は、次の利点に惹かれたところが大きいです。

  • 変更容易性が高い
  • 顧客やチームメンバーと共通認識を持ちやすい

FMSではモビリティやAutowareに纏わる専門用語を多く扱います。

  • 例:Waypoint, Lane, LatLng, MGRS, ETA, Dispatch など

こうした専門用語のキャッチアップが、新しくジョインしたエンジニアが最初に躓くポイントになっていました。

DDDでは、ユビキタス言語というユーザーと開発者で互いに通じる用語に関する内容が登場しますが、これはユーザーのみならず、例えば他の開発メンバー達とも理解が促進されるものと思われます。これにより、上述の障壁を少しでも軽減したいと考えました。

また、FMSの開発チームでは、スクラム開発におけるフィーチャーチーム体制を導入しており、みんなで一緒に複数のコンポーネントをクロスファンクショナルに開発し合うスタイルを取っています。共通の認識を持てる言葉ができることでコミュニケーションが捗り、その結果チーム開発のアジリティ促進効果を期待できると考えました。

モデリングの実践

ではここで、車両のスケジュールを管理するSchedulerコンポーネントに対して実際に行ったモデリングについてご紹介します。

f:id:hikeya:20200501165836p:plain

f:id:hikeya:20200501165920p:plain

f:id:hikeya:20200501165947p:plain

これらは、Schedulerが管理する最も基本的なドメインモデルです。スケジュールは、ステータスや走行の予実などを管理しますが、その他に別のドメインモデルであるタスクも管理していますね。こういった複数のモデルやオブジェクトを一つのまとまりとして管理することを「集約」と言います。

このように整理することで「タスクの○○の部分を☓☓に変更しておいて」「ああ、タスクね」といったコミュニケーションが可能となります。

設計・実装面のアプローチ

クリーンアーキテクチャ

Schedulerですが、以前は一般的なレイヤードアーキテクチャでしたが、DDDを具現化するために、DDDと相性が良いと言われるクリーンアーキテクチャを取り入れて再開発を行いました。

Clean Architecture 達人に学ぶソフトウェアの構造と設計
 
採用根拠

DDDの実装手段としては、クリーンアーキテクチャ以外にも候補はありましたが、大きな動機としてはやはり変更容易性の高さが決め手となりました。

f:id:hikeya:20200501180845p:plain

f:id:hikeya:20200507183113p:plain

Schedulerは、機能開発のボリュームは実はそれほど多くはありません。ある程度機能面での補完が終わったら、その後はスケジューリングの最適化問題などに対する試行錯誤が想定されます。

例えば、オンデマンド配車のユースケースを想定すると配車依頼がかかった時に、最適な車両を配車させるニーズが生じます。本格的に対応するには、離散最適化などの高度なコンピューターサイエンスが要求されます。こうした変更開発の比重が大きくなりそうなシステムの開発においては、変更容易性の高さを享受できるクリーンアーキテクチャは合理的だと判断しました。

新しくなったFMS

アーキテクチャ

f:id:hikeya:20200507193111p:plain

こうして、開発手法および技術の刷新によって新しくなったFMSの姿がこちらです。それぞれのコンポーネントが独立し、それぞれの責務を果たすアーキテクチャへと変貌を遂げました。

序盤に挙げた以下3つの課題ですが、まだ完全に解決できた訳ではありませんが、着実に進歩したものと感じています。

  • バグの多発
  • コンポーネント変更容易性の低下
  • システム全体の理解容易性の低下

この他にもまだ課題はありますが、現在はこのアーキテクチャをベースに新機能の開発や非機能の拡充に励んでいます。

開発手法や技術の選定にあたってのご注意

今回採用したDDDやクリーンアーキテクチャですが、勿論良い面ばかりではありません。例えば、ある程度規模感のあるシステムでないと、旨味が少ない割に開発コストばかり高くついたり、変更が少なかったり寿命が短いシステムにおいて、変更容易性はあまり重要ではないという考え方もできます。

この辺りは、良い面と悪い面をしっかりと理解した上で、自分達のシステムとの相性を見極めてから採用されることをお勧めします。

最後に

今回は、マイクロサービスのアーキテクチャ最適化について、代表的なサービスをベースにご紹介させていただきました。こう見えてFMSはまだまだ開発途上なサービスです。また、FMS以外にもWebチームではバラエティに富んだサービスを鋭意開発中です。

ティアフォーでは、これらサービスの開発を加速していただける優秀なソフトウェアエンジニアを募集しています。

Careers | Tier Ⅳ, Inc.

AWFへ提案中のAutoware新アーキテクチャのご紹介

こんにちは。ティアフォーの上野です。

先日から安全への取り組みについての連載が始まったところですが、今回はティアフォーからThe Autoware Foundation (AWF)に提案しているAutowareの新アーキテクチャを紹介したいと思います。

 

はじめに

2015年8月25日にAutowareが公開されてから、もうすぐ5年が経とうとしています。

Autoware公開当初は、アカデミックの研究成果をもとに自動運転システムのアーキテクチャを模索しながら開発が行われていました。

その後、世の中で自動運転の機能や研究が急速に発展していく中で、それらを統合するためのより良いアーキテクチャとはどのようなものなのか、日々議論が行われてきました。しかし、そのような議論を詳細まで詰めていくためには、実際に細部まで実装してみないと分からない部分も多くあります。

ティアフォーでは、これまで積み上げてきた実証実験の経験を活かし、プロトタイプ実装を繰り返しながらアーキテクチャの議論を進めてきました。そして今回、それらの議論がある程度成熟したと判断し、今後のOSSの自動運転開発に向けた詳細な新たなアーキテクチャ提案を、そのプロトタイプ実装とあわせて公開することにしました。

プロトタイプ実装のソースコードは下記リンク先で公開していますので、是非ダウンロードして試してみてください。

https://github.com/tier4/AutowareArchitectureProposal

 

アーキテクチャ紹介

下の図の通り、このアーキテクチャではAutowareは7つのモジュールで構成されています。

f:id:hoge000:20200601173528p:plain

 

各モジュールの役割が明確化されてインターフェースがシンプルになり、OSSとしてより継続的に開発・改善しやすい構造になっています。

各モジュールは以下のような役割を担っています。

  • Sensing:センサーから取得したデータのROSメッセージ化。他のモジュールにデータを渡す前の共通の前処理。
  • Localization:センサーデータを統合し、自車両の自己位置と速度を推定。
  • Perception:動物体の認識、および信号機の色認識。
  • Planning:ゴール地点までのルート計算から実際の走行軌跡生成までの処理。
  • Control:走行軌跡に沿って走るための、車両へのコマンドの生成。
  • Map:地図データの読み込み、変換。
  • Vehicle:Autoware内のデータ形式と車両固有の信号フォーマットの変換。

以下、各モジュールについてもう少し詳しく説明していきます。

 

Sensing

f:id:hoge000:20200601173711p:plain

 

Sensingモジュールでは、LiDAR・カメラ・GNSS・IMUの4種類のセンサーをサポートしています。それぞれのセンサーに対してドライバーを用意し、ROSのメッセージ型にデータを変換します。

また、Preprocessorとして、他のモジュールへデータを渡す前の前処理(例:LiDARの点群データからの外れ値除去や、自車両の運動による歪みの補正など)を行います。

 

Localization

f:id:hoge000:20200601173811p:plain

 

Localizationモジュールでは、センシングしたデータをもとに、自車両のPose(位置と姿勢)とTwist(並進速度と角速度)を求め、mapからbase_linkへのTFとTwistを出力します。

Pose estimatorではLiDAR・カメラ・GNSSの3種類のセンサーベースの自己位置推定手法をサポートしており、Twist estimatorではIMU・車両からのTwist情報を統合して扱うことができます。

このように複数のセンサーを併用することで、より高い精度、ロバスト性を持った自己位置推定を実現することが可能になります。

 

Perception

f:id:hoge000:20200601175521p:plain

 

Perceptionモジュールは、①Object recognitionと②Traffic light recognitionの2つのパートに分かれています。

①では車両の周りを取り巻く物体の検出・追跡・予測を行っており、②では信号の検出および識別を行います。

”はじめに”の章でご案内したプロトタイプ実装のコードでは、信号機の色(赤・黄・青)が認識できるようになっていますが、カスタマイズすることで、他の信号(矢印、国・地域特有の信号)への対応も可能です。

 

Planning

f:id:hoge000:20200601175719p:plain

 

Planningモジュールでは、今回はシナリオ形式を採用しました。

このシナリオ形式では、走行のシチュエーション(例:通常の道路走行、駐車場での駐車など)に応じた適切なシナリオを選ぶことにより、各シチュエーションにおける適切な挙動をするようPlannerを切り替えることが可能となります。

また、開発の観点からも、個々のシナリオの独立した(並行した)開発や、シナリオに応じたパラメータチューニングが可能というメリットがあります。

 

Control

f:id:hoge000:20200601180524p:plain

 

Controlモジュールでは、Planningで計画した走行軌跡に沿って車両を走らせるための、車両へ送るコマンド(ハンドルの角度と各速度、車両の速度と加速度など)を生成します。

また、遠隔操作のコマンド等、Autoware外部からの入力も含めた複数の制御値のうち、どのコマンドを実際に車両に送るか切り替えるGatewayとしての役割も担っています。

 

Map

f:id:hoge000:20200601180616p:plain

 

Mapモジュールでは、①Pointcloud mapと②Vector mapの2種類のマップをサポートしています(※)。

①は3Dの点群地図の情報、②は車線や信号の位置といった地物情報を含んでおり、それぞれのマップに対するLoaderを通して、Localization・Perception・Planningといった他のモジュールで利用可能な形にデータを変換しています。

Vector mapはLanelet2のみのサポートとなっています

 

Vehicle

f:id:hoge000:20200601180709p:plain

 

Vehicleモジュールは、Autoware内で扱われているデータ形式と車両固有の信号フォーマットの変換を行うため、車両によってモジュール内の構造が異なります(上の図に加えて、追加の変換コンポーネントが必要な場合があります)。

Autowareから車両へ(上の図の右向き矢印)と、車両からAutowareへ(左向き矢印)の双方向の変換が行われます。

 

デモ動画

アーキテクチャのプロトタイプ実装を用いてデモを行った動画を、YouTubeで公開しています。どんなことができるようになっているのか、是非動画でご覧ください。

youtu.be

この他にも、別のデモ動画やシミュレーション動画も公開しています。”autoware architecture proposal”で検索していただくか、Tier IVチャンネルからご覧ください。

 

おわりに

アーキテクチャの内容、いかがでしたでしょうか?

ブログタイトルや“はじめに”に書いてある通り、この新しいアーキテクチャはAWFに対して現在絶賛提案中です(2020年6月上旬時点)。今後Autowareがどのように変わっていくのか興味を持たれた方、自分も議論に参加したいという方は、ぜひAWFの活動に参加していただければと思います。

また、今回はアーキテクチャの紹介でしたが、今後それぞれのモジュールの実装の詳細についても紹介する記事を展開する予定ですので、そちらもどうぞご期待ください!

安全への取り組み:①自動運転関連の法律・ガイドライン

はじめまして、ティアフォー Safety Engineerの須永です。

これから数回にわたって、ティアフォーの安全への取り組みを紹介していきたいと思います。

 

はじめに

今年4月1日、道路運送車両法の保安基準が改定され、自動運転レベル3(※)以上の車両に搭載された「自動運行装置」も国が定める保安基準の対象に規定されました。つまり、レベル3の自動運転車の公道走行がいよいよ法的に可能となります。

当たり前のことですが、安全を確保するにはまずはルールに従うことが重要です。もちろん、ルールを守っただけで安全が十分に確保されるわけではありませんが、守らないことには何も始まりません。そこで今回、自動運転関連で遵守すべきルールについて社内の勉強会資料を整理してみました。

(※)高速道路など、一定の条件下で自動運転が可能なレベル

 

1. 様々なルール

まず、一般的なルールを整理します。

守らないと罰則のあるもの、罰則はないけれど守るべきもの、業界で決められたルールなど、その種類は様々です。国内外の情勢も含め、簡単に説明していきます。

 

f:id:sunagaya:20200507170340p:plain

 

2. 自動運転関係の法規

自動運転車として車両が道路を走るため、①道路交通に関する国内法規に準拠する必要があります。また、道路上で事故を起こした場合には、②交通事故の法的責任に関する法規によって責任を負うことになります。

 

①道路交通に関する国内法規

主に関連する法規は、道路交通法、道路運送車両法、道路法、道路運送法の4つです。  

 

f:id:sunagaya:20200507170245p:plain

  • 道路交通法:主に、車両の運転者や歩行者が道路上において守るべきルールを定めています。自動運転では、自動運行装置が運転者としての行為を一部代替するため、関係してくる法規です。
  • 道路運送車両法:主に、車両の所有権、安全性・公害防止・環境の保全、車両の整備についての技術的なルールを定めています。車両に関する技術的な基準が記載されており、自動運転の実証実験に使用する車両も、公道を走る場合にはこれをクリアしないと違法になります。
  • 道路法:そのままですが、主に道路に関するルールを定めています。自動運転技術は、車両そのものだけでなく道路などのインフラに依拠する部分もあるため、道路の構造に関連するルールが定められている道路法も参照すべき法規となります。
  • 道路運送法:旅客自動車運送や有料道等の自動車道路事業についてルールが定められています。自動運転車としてサービスをする場合に関連してくる法規です。

 

これらの法規の内容に関しては、国際協調及び相互認証を目的とし、国連内の自動車基準調和世界フォーラム(通称「WP29」)と連携が取られています。また、WP29傘下の分科会における技術的・専門的な検討では、日本は様々な分野で主体的な役割を果たしています。このあたりの詳細については、また別の機会にご紹介できればと思います。

 

②交通事故の法的責任に関する法規 

自動車事故を起こした場合には、運転者は刑事・民事・行政上の法的責任を負うことになります。自動運行装置が運転者を代替する場合、代替している間は同様の法的責任が認められるため、これらの法規に関しても無視することはできません。

 

f:id:sunagaya:20200503214239p:plain

 

レベル3以上の自動運行装置を搭載する場合は、責任範囲の明確化のため、作動状態記録装置を設置することが義務付けられました。そのため、メーカーには製造物責任法に基づく責任、販売店には契約不履行責任が生じる可能性もありますが、このあたりは国際的にもまだ議論中のようです。国際動向としては、日本が批准しているジュネーブ道路交通条約やヨーロッパ諸国が加盟しているウィーン道路交通条約がありますが、この改正に関しても国連内の道路交通安全作業部会でまさに議論が進められています。

  

3. 自動運転関係のガイドライン

2015年11月、2020年までの自動走行の実用化に向けた制度整備等に関して安倍首相が発言したことにより、国内では法令整備の準備が本格的に始まりました。また、2018年4月には「自動運転に係る制度整備大綱」が発行され、現在これに沿って制度の整備が進められています。

自動運転システム搭載車は、ある日突然公道を走り始めるわけではありません。実証実験を通して徐々に社会受容性や技術レベルを上げていくことで、自動走行の実用化を進めています。そのように実証実験が日本各地で行われる中、これまでは安全を確保するためのルールが法令しかありませんでした。そのため、法令に当てはまらない事象については、どう対処すべきか正解を模索しながら実験を行う必要がありました。そこで、各省庁はいきなり法規化するのではなく、まずはガイドラインとして大枠のルールをいくつか定めました。

 

f:id:sunagaya:20200406132048p:plain

 

実証実験を行う場合、当然ですが公道の使用許可が必要になります。その際、ガイドラインに沿って許可を取得することになりますが、ガイドラインは法令ではないので、必ずしも全てのルールを遵守する必要はありません。そのため、対応が難しいものに関しては、各省庁や自治体と個別に相談しながら実証実験を検討・実施することになります。

現在、自動運転に係るガイドラインは各省庁から5つ出ています。ティアフォーも各ガイドラインの内容を十分理解・準拠し、また関係各所と事前相談をした上で、日本各地で実証実験を行っています。

 

4. 自動運転の安全に関する国際規格

自動運転車は、まず通常の自動車としてのシステムの安全が確保された上で、自動運転システムについても安全である必要があります。そのため、自動車のサプライヤーが準拠すべきマネジメントシステムから、システムの安全標準規格まで、業界標準レベルでの安全を確保することが必要になってきます。

 

自動車業界で対応している国際規格

  • ISO 9001QMS(Quality Management System)の標準規格。品質を継続的に改善していく仕組み。
  • IEC 61508:システムのリスクを軽減するために使用される電気・電子・プログラマブル電子により安全性を高めるための機能安全規格。
  •  ISO 26262:安全機能を設けることにより、自動車に特化した電子システムに故障が発生した場合でも、ドライバーや乗員・交通参加者等へ危害を及ぼす危険を許容可能なレベルに低減するという機能安全規格。
  • ISO/PAS 21448:Safety of the Intended Functionality。他車の動向や天候など自車で制御できない事象や、自車のシステム故障以外の誤使用や性能限界などを想定して安全性を高めるための規格。
  • ISO/SAE 21434:自動車のサイバーセキュリティに対する国際規格。ハッキングされた場合には自動車の安全にも影響が出るため、体系的に取り組む必要がある。
  • UL 4600:最近発行された、ULというアメリカの認証機関の規格。自動運転システムのベストプラクティス。 

f:id:sunagaya:20200507172643p:plain

 

その他、ISO 22737やISO 3691など、自動車以外に適用される自動運転の新しい標準規格についても、内容を確認し順次対応していくことを検討しています。

f:id:sunagaya:20200503214846p:plain

 

このように、自動運転に関連する標準規格はいくつもあり、ティアフォーのようなスタートアップがこれら全ての国際規格に準拠することはなかなか難しい部分もあります。とはいえ、これらの規格を無視することはもちろんできないため、まずはできる範囲での準拠を目指し、安全を最大限確保できるよう努めています。

 

5. 自動運転の安全に関するドキュメント

安全設計を行う上での業界調査のようなこともしています。

これも挙げればきりがないのですが、安全に近道なし、という信念を持っていろいろな先駆者のドキュメントも参照・分析しています。

f:id:sunagaya:20200407160608p:plain

  • SaFAD:Safety First for Automated Driving。自動車OEMやTier1が11社集まって作成した、安全な自動運転を可能にする乗用車の開発、ならびに検証および妥当性確認に向けたフレームワーク。
  • Safety Reports:世界各国の自動運転開発会社が安全に対してそれぞれどのように取り組んでいるのかをまとめた公開資料。センサー構成やアルゴリズム、安全性を高めるためにどのようなことを行っているかなど、ティアフォーの競合でもある各社のお知恵拝借ではないですが、内容を参考にしています。(e.g. WaymoNuroNAVYA)
  • NHTSA/ U.S.DOT:アメリカ運輸局内の自動車や運転者の安全を監視する部署が出している安全に関する様々なドキュメントも参考にしています。(e.g. USDOT Automated Vehicles Activities)
  • NCAP: 新車のアセスメントプログラム。特に予防安全としてのアクティブセーフティのプロトコルを参考にしています。(e.g. Euro NCAP 2025 Roadmap)

 

以上、自動運転の安全に関して参照しているものを列挙してみました。論文やその他ドキュメントもあわせて参照し、安全への取り組みに役立てています。

 

おわりに

冒頭にも書きましたが、ルールを守ることは安全を確保するための必要条件ではありますが、十分条件ではありません。そこで次回以降、安全を確保するためにティアフォーでは実際にどのようなことを行っているのか、もう少し具体的に紹介していきたいと思います。

 

ティアフォーで開発に用いる車両

ティアフォーでは自動運転ソフトウェアであるAutowareの開発を行っていますが、開発したソフトウェアの検証を行うために実在する車両が必要です。今回はティアフォーで開発に用いる車両の一部をご紹介します。

LEXUS RX450h

 

f:id:michinari_kawai:20190618192100j:plain

自動運転向けに改造したLEXUS RX450hです。車両上部に「AI Pilot」という機器を用いて4つのLiDAR・2つの認識用カメラをマウントしています。公道での自動運転向け開発技術の検証によく使用しています。AI Pilotに搭載してあるカメラとは別に車両の前後左右に、遠隔監視・操縦のために用いるカメラ4台を備えています。遠隔監視・操縦システムについては下記記事にて紹介しております。

tech.tier4.jp

ラゲッジスペースに産業用のコンピュータがあり、そこにAutowareがインストールされています。

Milee(マイリー)

f:id:michinari_kawai:20190710195005j:plain

f:id:michinari_kawai:20190710195036j:plain


ティアフォーを代表する4人乗りの小型車両です。頻繁にデモなどで使用しているので、何処かで見たことが有る方もいらっしゃるかもしれません。後に紹介するゴルフカートをベースとして、天頂と前後左右下部の合計5箇所にLiDARが、天頂LiDARの下に認識用カメラが取り付けられています。LEXUS同様遠隔監視・操縦用のカメラもついています。最大時速は19 [km/h]となっており、テーマパークや施設構内などのプライベートエリアを低速で走行するシーンによく使用します。前後にサイネージディスプレイ、天頂とフロントライト付近にフルカラーLED、前方と車内にスピーカー、車内前方にタブレットを備え、搭乗者に限らず周囲の方に車両の状態を知らせることが可能です。残念ながらナンバーが無いため公道では走行できません。名称であるMileeは「ラストワンマイル」から来ており、ワンマイルモビリティを象徴するコンセプトカーです。ステアリングハンドルやアクセル・ブレーキペダル等にアクセス出来ない状態にすることができるので、まさに自動運転向けの車両と言えます。

 

これらLEXUS、Mileeが活躍した番組がNHK BSプレミアムにて7月13日

www4.nhk.or.jp

ゴルフカート

f:id:michinari_kawai:20190710195914j:plain


先のMileeのベース車両にもなっているゴルフカートです。LEXUS同様AI Pilotを用いてセンサをマウントしています。ガソリン無しで走るEV車になっているので僻地や離島で力を発揮します。こちらはナンバーの交付を受けることが可能なので公道を走ることが出来ます。ティアフォー内で所有している台数が最も多く、新しいセンサの検証などマルチに活躍しています。ほぼ同等の車両が自動運転開発向け電動小型低速車両「アカデミックパックPRO」として販売されております。

news.yamaha-motor.co.jp

www.macnica.co.jp

LogieeS-TC(ロージーS-TC)

f:id:michinari_kawai:20190619125435j:plain

こちらは物を運ぶことを意識した超小型車両です。前後にLiDARを搭載しており、他の車両と違って左右のタイヤを独立して制御できるので、小回りの効いた動きをさせることが出来ます。屋内、屋外共に走行可能であることも大きな特徴の1つで、車両サイズに影響が無い開発項目の検証等にも役立っています。Logieeという名称はロジスティクスから来ており、見た目の通り上に物を載せて運ぶことが出来ます。なお、Sは小型化の経緯から、末尾のTCは「つくばチャレンジ」を指し、市街地で自律走行を行う技術チャレンジであるつくばチャレンジに2018年に出場し、完走した実績があります。

まとめ

これらの車両は全てAutowareを使用して自動運転可能で、開発内容に応じて適切な車両を選択し検証をおこなっています。Autowareの普及のためには複数の車種に適用可能で有ることが大事ですので、ティアフォー自ら複数台の車両を所有し、実際に車両を動かしながら開発を進めています。

 

Autowareにおける三次元物体認識アルゴリズム「PointPillars」の紹介


こんにちは。

ティアフォーで自動運転ソフトウェア開発を行っている村上です。
今回はDeep Learningを使った三次元物体認識の手法を紹介していきます。

f:id:kosuke-murakami:20190423142855p:plain

TL;DR: 12msで動作する三次元物体認識アルゴリズムの開発

自動運転におけるDeep Learning

自動運転では主に周りの環境を認識する際にDeep Learningを用いることが多いです。画像認識アルゴリズムであるSSD*1やYOLO*2が有名なものになります。

Deep Learningは認識以外の分野にも応用されています。例えば、自動運転における判断*3や車両制御*4に応用するような論文も出てきていたりします。 

点群を処理するためのDeep Learning

そんな中で今回はDeep Learningを点群処理に応用したアルゴリズムを紹介したいと思います。


そもそも、なぜ点群を処理するためにDeep Learningが必要なのでしょうか?
理由は高精度の物体認識と形状推定を実現するため、です。

 

ざっと従来手法

2011年にStanfordから発表された、DARPA Urban Challengeの研究成果を取りまとめた論文*5*6では以下のような点群による認識のパイプラインが提案されました。

下のグラフのように、点群に対して順番に様々な処理をしていくようなパイプラインになっています。

 

f:id:kosuke-murakami:20190425114059p:plain

従来のパイプライン



しかし、このパイプラインでは自動運転で求められるような高精度の認識が難しいという問題がありました。

従来手法での問題

いくつか問題がありましたが、一つ挙げるとすれば、「クラスタリング」において、二つの物体が隣り合っている場合、区別することが難しいという問題がありました。

 

f:id:kosuke-murakami:20190422181210p:plain
f:id:kosuke-murakami:20190422173729p:plain
Euclidean Cluster結果

右側の画像でクラスタリング手法の一つである、Euclidean Clusterの結果を表示しています。前方左にバイク、前方右に自動車があるような状況ですが、二つの物体を一つの物体として認識しており(同じピンクの色で認識)、それぞれの物体を区別することができていませんでした。

形状推定の必要性

また、自動運転におけるPerceptionの難しさの一つに隠れ(オクルージョン)の問題があります。従来のパイプラインでは一部の物体形状しか得られない状態において、物体全体の形状を推定することが困難でした。

 

f:id:kosuke-murakami:20190422190543p:plain
f:id:kosuke-murakami:20190422190955p:plain
f:id:kosuke-murakami:20190422190801p:plain
左から画像、同一視点からの点群、鳥瞰方向からの点群

上の画像は前方の車両を様々な角度から見たものです。一番右の鳥瞰方向の画像では、前方の車の形状が分かりにくいことを示しています。

 

実際の物体は下の画像のように存在します。
このように物体全体の形状を推定することは、TrackingやPlanningなどの自動運転における重要なプロセスの中で非常に役に立ちます。

f:id:kosuke-murakami:20190422193230p:plain

実際の形状を緑枠で表示

 

Deep Learningで可能なこと

従来の手法では点群を順番に処理していましたが、DeepLearningベースの手法ではEnd to Endで最適化されたクラス分類と形状推定をすることができます。

これは従来のパイプラインにおける「地面除去」、「クラスタリング」、「クラス分類」といった処理を暗に内包していると言えます。

 

また、物体の形状についても事前知識を利用することによって、従来手法では成し得なかった全体形状の高精度な推定が可能となりました。

 

f:id:kosuke-murakami:20190425110040p:plain

Deep Learningのパイプライン

 

三次元物体認識アルゴリズム「PointPillars」の紹介 

従来手法では達成できなかった「高精度の物体認識と形状推定」をするために、今回「PointPillars」*7を実装しました。

 

f:id:kosuke-murakami:20190425102210p:plain

今回のパイプライン

ざっと類似手法

2016年に発表されたMV3D*8では画像と点群を使用し、Faster R-CNN*9を模した構造で特徴量抽出した後にFusionをして三次元Bounding Boxを生成しました。


2017年にAppleの研究員が発表したVoxelNet*10では、PointNet*11をベースにしたPoint単位の特徴量抽出とVoxel単位での局所的な特徴量計算を合わせて行うことで、MV3Dを上回る性能を達成しました。


2018年に発表されたSECOND*12はVoxelNetの構造を参考にしながら、一部にSparse Convolutionを適用することでモデルの軽量化と性能向上を達成しました。

 

なぜ「PointPillars」

SECONDとほぼ同時期に発表されたのがPointPillarsでした。VoxelNetを踏襲しながら、Voxel単位の特徴量抽出ではなくPillar(柱)単位での特徴量抽出と2D-convolution使用による軽量化された構造が特徴です。

今回、なぜ数あるアルゴリズムの中からPointPillarsを選択したかというと、処理速度と予測精度のバランスが優れているからです。

 予測精度は他のアルゴリズムと比べてトップクラスであると同時に、処理速度は類似手法と比較し最も早く動作するアルゴリズムであり、16ms(約62Hz)で動作することが論文内で述べられています。



下の画像*13ではクラス別の比較項目の中で、PP(PointPillars)が他のアルゴリズムに比べて、予測精度と処理速度の二つの点から優れていることが分かります。

 

f:id:kosuke-murakami:20190423113349p:plain

PointPillarsと類似手法比較


 

ネットワーク構造はVoxelNetとくらべてPillar単位の特徴量抽出や2D-convolutionの使用により、軽量化されています。

f:id:kosuke-murakami:20190423121830p:plain

PointPillarsネットワーク構造の概略図

CUDAとTensorRTによる高速化

従来手法と比べた大幅な高速化は二つの要因から達成されました。
一つはネットワーク構造のスリム化。
そして、もう一つはTensorRTと呼ばれるDeep Learningの推論を高速化するLibraryの使用です。


TensorRTは便利ですが、対応しているレイヤーの種類が限られている、という欠点があります。

 

実際に、PointPillarsで使用したいと考えていた"Scatter"と呼ばれるレイヤーが存在しなく、自身で実装する必要がありました。


最初はCPU側でコードを書いていたのですが、メモリ転送の時間コストが高かったため、この部分をCUDAで実装しました。

また、点群の前処理と後処理においてもCUDAによる実装をすることで、計算効率化とメモリ転送コストの削減を達成しました。

 

f:id:kosuke-murakami:20190425102640p:plain

コード実装の概略図




Deep Learningによる点群処理手法の問題点のうちの一つが、その処理速度が遅いことでした。たとえば類似手法で紹介したVoxelNetでは225msかかっており、LIDARのセンサー周期が100msで動いていることを考慮すると、自動運転で扱うことが難しいアルゴリズムでした。

 

元論文では優れたネットワーク構造とTensorRTによって16msで動作することを発表しました。

 

さらに今回の実装では、前処理・後処理をCUDA化することによって全体処理時間を12msまで短縮しました*14 *15



下の動画では、Autowareに組み込まれているPointPillarsをKITTI Raw Dataset で評価した結果になります。


PointPillars tested with KITTI data

KITTI dataset*16 is published under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0.

 

最後に

最後になりますが、現在ティアフォーでパートタイマーとして勤務している、
東京大学、創造情報学専攻の村松さんにはPointPillarsのネットワーク実装においてアドバイスをいただきました。
ありがとうございました。

*1:W. Liu, D. Anguelov, D. Erhan, C. Szegedy, S. Reed, C.-Y. Fu, and A. C. Berg. SSD: Single shot multibox detector. In ECCV, 2016.

*2:J. Redmon and A. Farhadi. YOLO9000: Better, Faster, Stronger. In CVPR, 2017, pp. 6517–6525.

*3:S. Shalev-Shwartz, S. Shammah, and A. Shashua. Safe, multiagent, reinforcement learning for autonomous driving. In NIPS Workshop on Learning, Inference and Control of Multi-Agent Systems, 2016.

*4:G. Williams, N. Wagener, B. Goldfain, P. Drews, J. M. Rehg, B. Boots, and E. A. Theodorou. Information theoretic MPC for model-based reinforcement learning. In ICRA, 2017.

*5:A. Teichman, J. Levinson, and S. Thrun. Towards 3D object recognition via classification of arbitrary object tracks. In ICRA, 2011, pp. 4034–4041.

*6:J. Levinson, J. Askeland, J. Becker, J. Dolson, D. Held, S. Kammel, J. Kolter, D. Langer, O. Pink, V. Pratt, M. Sokolsky, G. Stanek, D. Stavens, A. Teichman, M. Werling, and S. Thrun. Towards fully autonomous driving: Systems and algorithms. In Proc. IEEE IV, Jun. 2011, pp. 163–168.

*7:A. H. Lang, S. Vora, H. Caesar, L. Zhou, J. Yang, and O. Beijbom. PointPillars: Fast encoders for object detection from point clouds. arXiv:1812.05784, 2018.

*8:X. Chen, H. Ma, J. Wan, B. Li, and T. Xia. Multi-view 3d object detection network for autonomous driving. In CVPR, 2017.

*9:S. Ren, K. He, R. Girshick, and J. Sun. Faster R-CNN: Towards real-time object detection with region proposal networks. In NIPS, 2015.

*10:Y. Zhou and O. Tuzel. Voxelnet: End-to-end learning for point cloud based 3d object detection. In CVPR, 2018.

*11:C. R. Qi, H. Su, K. Mo, and L. J. Guibas. Pointnet: Deep learning on point sets for 3d classification and segmentation. In CVPR, 2017.

*12:Y. Yan, Y. Mao, and B. Li. SECOND: Sparsely embedded convolutional detection. Sensors, 18(10), 2018.

*13:https://youtu.be/p5AtrKqQ3Fw?t=2203

*14:https://github.com/autowarefoundation/autoware/tree/master/ros/src/computing/perception/detection/lidar_detector/packages/lidar_point_pillars

*15:CPU:Core i7 8700K, GPU:GTX-1080ti, Tested with a rosbag in the office

*16:http://www.cvlibs.net/datasets/kitti/