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/

ティアフォーにおける自動運転車両の運行管理サービスのご紹介

はじめまして、ティアフォーで自動運転のWebプラットフォーム開発を行っている森本です。
今回は、自動運転車に対して走行ルートの指示などを行う運行管理サービスであるFMS(Fleet Management System)についての概要をご紹介します。*1

運行管理サービスとは

まず、運行管理サービスとはどんなものなのかを簡単にご説明します。

実際に車両を運転する際は、どんな経路を通り途中で何をして最終的に目的地に到着するのか、といった経路に関する要素が存在します。

また、タクシーのようなサービスの場合、迎えに来てほしいというお客様に対してどの車両が向かうべきか、という最適配置の要素も存在します。

こうした要素に対し、例えば自動運転車両の向かいたい地点を指定された際、運行すべき経路をWeb側で生成して最も運行効率の良い車両を配車するということが考えられます。

このように、車両の運行に関する情報をWeb側で管理するサービスを運行管理サービスと呼びます。

運行管理において必要な情報

運行管理を行う上では車両の情報が欠かせません。車両の現在地や、運行中なのか停止中なのかといった情報だけでなく、場合によっては運行経路中の信号などのインフラ情報が必要になることもあり得ます。

一方で、例えばタクシーのように人を迎えに行ってから目的地に送り届ける、というモデルを考えると送迎などの情報も存在することになりますが、こういったサービスに関する情報はFMSとは別枠で考えるため、FMSではなくAutowareCallsという別サービスで管理を行なっています(今回は言及しません)。

ステートマシンの作成

FMSでは運行管理を行うためにステートマシンを作成して運行管理を行います。

例えばバスのようなモデルを考えると

・車両が決まったルートを運行しており、停車後一定時間待つと次の目的地に向かって走り出す

となり、これは以下のような状態遷移が考えられます。

f:id:junichi-morimoto:20190401115906p:plain

次にタクシーのようなモデルを考えると

・ユーザーが車両を呼び出し、車両が無人でその場に迎えに行き、ユーザーの乗車後に発進ボタンが押されることで目的地に向かって走り出す

となり、これは以下のような状態遷移が考えられます。

f:id:junichi-morimoto:20190401112335p:plain

このように、それぞれの運行モデル毎に適切なステートマシンの作成が必要となります。

また、実際にはもう少し細かく状態を管理する必要があり、異常系のケアなども必要になってきます。

 FMS構成概要

FMSはあくまで運行管理を行うためのWebサービスなので、実際の運用では自動運転OSSであるAutowareやユーザーアプリなどと組み合わせることで一つのサービスとして稼働します。

構成例としては、以下のようなものが考えられます。

 

f:id:junichi-morimoto:20190402162845p:plain

処理の流れは以下のようになります。

  1. AutowareのPublishするトピックメッセージを元に車両情報を随時更新
  2. ユーザーアプリからの配車依頼を受け、車両それぞれについての最適経路を探索し、経路を元に配車する車両を決定する。また、走行が完了するまでその車両に対する配車を不可とする
  3. 配車対象車両のAutowareに対して走行経路をPublishする
  4. Autowareが受け取った経路情報を元に走行し、走行の状態毎にノードの情報を更新
  5. 走行が完了すると配車が可能な状態に戻る

このような状態遷移のためにはAutowareのPublishするトピックメッセージに含まれているステートが必要となりますが、FMSではこのステートを抽象化した上でAWS IoT側にPublishすることで極力Autowareを意識する必要がないようにしています。

動作検証の流れ

上記のような構成で実際に車両に対して経路を送信し、それに従って車両を自動走行させることが可能となりますが、いきなり実機で走行テストを行うのは様々なリスクが考えられます。そこで、Autowareのwfsimというシミュレーション機能とFMSを組み合わせることで事前にシミュレーションを行い、実機での動作検証を安全に行うことができます。

wfsimを用いたシミュレーション

以下は、タクシーのモデルについてwfsimを使ってシミュレーションした際の映像です。

最初は経路が与えられていませんが、ユーザーに呼び出されたタイミングで車両の現在地からユーザーのいる地点までの経路を生成してAutowareに送信しています。

次に、Autowareが経路を受け取ったことを確認するとFMSから発信命令を送信して自動で動作を開始します。

ユーザーの待つ地点に到着すると、そこから目的地への経路を新たに生成してAutowareに送信します。一つ目の経路では車両が無人のためFMSから自動で動作命令を送信していましたが、今度はユーザーが乗っているため(動画では判断できませんが)人が発信ボタンを押すことで発信命令が送信され、車が動き出しています。

このように、wfsimを用いると実機なしでのシミュレーションができるというだけでなく、実機では難しい連続可動試験が実施できるといったメリットも存在します。

実機を用いた検証

最後に、実際に実機を使って動作確認を行います。

Autowareの性質上、wfsimでのシミュレーションと実機での動作はほぼ差分がありません。そのため、ここで動作がおかしくなった場合はwfsimでのパラメータと実機検証でのパラメータの差分を確認しつつ問題を整理していくことになります。

以下は実際に実機を用いて試乗を行なった際の動画で、タクシーモデルで人が乗り込んだ後に発信ボタンを押すことで車が発信し、自動運転が開始される様子が映っています。



まとめ

以上がティアフォーの自動運転においてWeb側が担当している役割の一つである運行管理サービスについての概要となります。

自動運転と聞くと車両側の制御のことを想像しがちですが、実際のサービスとして車両が走行する際は、こうしたWeb側の役割も欠かせません。

実際のサービスでは複数台車両をどのように最適に捌くか、予約はどうするか、割り込みはどうするか、といった複雑な問題が様々存在しており、Web側にも多くのチャレンジングな課題が存在しています。

ティアフォーではこのような課題を解決するWebエンジニアを随時募集しておりますので、少しでもご興味をお持ちいただけましたら是非ご連絡ください

*1:運行管理サービスは要件毎に内容が異なってくるため、全ての案件で同一構成になっているわけではありません。

Autowareにおける車両制御アルゴリズムの開発

はじめまして!

株式会社ティアフォーで自動運転システムの開発を行っている堀部です。

今回は自動運転における車両制御、特に経路追従と呼ばれる部分について説明していこうと思います。

f:id:taka_horibe:20190326143937p:plain

Autowareによる経路追従の様子

 

自動運転における車両制御

一般に自動運転において「車両制御」とは、経路追従制御およびステアリング・速度制御を合わせた領域を指します。

 

この2つの機能の目的は

  • 経路追従制御:車両を目標経路に沿わせるための目標ステア角・車速を計算する
  • ステアリング・速度制御:ステアリング角と車速を目標値に合わせる

となっており、ブロック図としては以下のように書かれます。

f:id:taka_horibe:20190319212336p:plain

control block diagram


ステアリング制御は、ステアリング角度を目標角度にサーボさせる、いわゆるモーター制御に近いイメージです。しかしステアリングの運動には摩擦による地面との相互作用が存在し、車速や重量、路面状況などによって特性が大きく変化します。

通常の制御では摩擦は外乱としてフィードバックで押さえ込むことが多いのですが、ステアの場合はこの外乱が非常に大きく、この非線形特性をうまく取り扱えるかが制御の肝になります。

速度制御も同様に、車両速度を目標速度に合わせることが目的ですが、ここでもエンジン特性のような非線形を考慮する必要があります。エンジンの特性は数式で記述することが難しいため、非線形性を吸収するマップを作成して対応したりします。速度の加減速は人が感じる乗り心地に直結するため、自動運転に置いても非常に重要な役割を持ちます。

今回説明する経路追従制御は、目標経路に沿って走行するためのステア目標値、速度目標値を計算し、上記2つの制御系に渡すような構造となっています。この系はステア・速度制御をフィードバックループの内部に持つような構造になっており(ブロック図参照)、車両全体の運動特性を考慮して設計する必要があります。

 

 

軌道追従制御の歴史

開発初期(PID制御)


車両の走行制御の開発は古くから行われており、日本でも1960年代には時速100kmでの自動走行に成功しています。*1

この時代は道路に埋め込んだ磁気マーカーを検出して自己位置を求める方法が主流であり、古典制御(いわゆるPID)によって追従制御が行われていました。

PID制御では以下の図のように、車両と目標経路との横方向偏差(Lateral error)、および姿勢偏差(heading error)にPIDゲインを掛けて、ステアリング指令値を計算します。

f:id:taka_horibe:20190319215815p:plain

PID control

この手法は古典制御理論を利用した解析やチューニングが容易な反面、経路形状を考慮できなかったり、偏差が生じた後にしか対応ができない(つまり必ず偏差が生じる)といった欠点があります。

 

DARPAグランドチャレンジ(pure-pursuit)

f:id:taka_horibe:20190320205547p:plain

DARPA Ground Challenge: Carnegie Mellon University

 

DARPAグランドチャレンジ*2とは2004年と2005年にアメリカの国防高等研究計画局(DARPA)主催のもと開催された自動運転のレースであり、スタンフォードカーネギーメロン、MITと言った名だたる大学のチームが参加しました。この大会で今の自動運転に必要な多くの技術が生まれたと言われています。

この大会で多くのチームが使用した経路追従アルゴリズムが、Autowareでも採用されているpure-pursuitと呼ばれる制御方法になります。*3

この制御は経路の一定距離(Lookahead distance)前方に目標点を設定し、その点に向かって円を描いて進むようにステア角を決定するアルゴリズムです。簡易な方法ではありますが、前方を見ることによって(曲率一定という仮定はあるものの)経路形状を考慮できており、設計パラメータが少なく直感的にわかりやすい、と言った利点を持ちます。

f:id:taka_horibe:20190319215804p:plain 

また、制御理論の観点から見るとpure-pursuitはPD制御とよく似た性質を持っていますが、アルゴリズムに数値微分を必要としないという特徴があります。

PID制御の"D"は微分を意味しますが、微分とは変化率を求める作業であり、D制御は「現在の変化率から将来を予測して制御する」という一面を持ちます。

一方で、pure-pursuitでは「経路の先を見て将来を予測する」という方法によってD制御の効果を実現しており、微分を必要としない、ノイズに強い制御方法となっています。

グランドチャレンジの頃からは、自己位置推定の方式が磁気センサーのように環境に手を加える方法ではなく、LiDARなどによるマップマッチングが主流となりつつありました。この方法は直接自己位置を観測できる磁気センサーと異なり、推定される自己位置に多くのノイズが生じるため、pure-pursuitのノイズ耐性は非常に有用なものであったと考えられます。

近年の開発(MPC)

近年では、より複雑な制御理論が自動運転開発に適用されるようになってきました。その一例としてMPCと呼ばれる制御方法をご紹介します。

MPCは機械分野では2000年頃から実用化され始めた制御方法であり、1950年代に完成した古典制御、60年代の現代制御と比較すると比較的新しい制御手法になります。

この手法は下図のように、目標軌道(Reference trajectory)上の複数の点に対して、それらの点に沿う最適な経路(Predicted trajectory)を毎制御周期ごとに計算します。MPCは内部に車両モデルを持っており、このモデルと実現可能な入力の組み合わせの中から最適経路を計算し、その経路を実現するステア角を目標ステア角として後段のステアリング制御系に渡します。

 

 

f:id:taka_horibe:20190319215751p:plain

MPCは経路上の複数の点を利用しているため、経路形状の情報を適切に考慮した制御を行うことができます。これによって「この先は急カーブだから、早めにハンドルを切ろう」といった、賢い制御が可能になりました。

さらにMPCでは経路の計算に凸最適化と呼ばれる手法を用いており、ステアリングの最大角度や横G制限といった制約条件を考慮することができます。MPC以前の制御理論では、このような制約条件を含んだ制御設計を行うことはできず「制約条件に掛からないように全体の応答性を下げる」といった施策が必要でした。一方でMPCは「制約を考慮した最適な制御」を計算することが可能となり、限界まで機体の性能を使い切ることがでるようになりました。

このようにMPCは非常に性能の高い制御方法ですが、ほかの制御を比べて圧倒的に計算コストが高いという欠点があります(これが最近までMPCが実用化されなかった最大の理由です)。

この欠点は最近の計算機性能の向上に伴って特別に問題視されることは少なくなりましたが、それでも性能と計算コストのチューニングにはいくらかの労力を要することになります。

 

ティアフォーでの開発 

現在Autowareで使用しているpure-pursuitはオリジナルから一部改変が加えられており、速度に応じてlookahead distanceが線形に増加するようになっています。

これは「速度 / lookahead distance の値に応じて安定性が変化する」というpure-pursuitの解析結果*4を反映しており、速度増加に伴って振動を生じさせないような施策となっています。

しかしpure-pursuitはアルゴリズムの特性上、高速走行時や複雑な経路において追従精度が低くなってしまうという問題があります。

 

この問題を解決するため、現在ティアフォーではより高性能な制御系開発に取り組んでいます。

しかし、例えばMPCは上で述べたように高性能な制御の代名詞的存在ですが、pure-pursuitのようにロバスト性が特別高いというわけでもなく、ノイズの強い自己位置や、粗い経路を与えると発振や追従性の低下を引き起こしてしまいます。

また、経路予測に用いる車両の数式モデルの作成や、大量のパラメータ調整など、設計コストも高くなるため、多くの検証が必要になります。

我々は現在、車両シミュレーターを使ってこれらの制御系の開発・検証を行っています。社内メンバーに限らず、海外のチームなどともやり取りをし、Autowareの開発を加速させています!

 

・LGSVL シミュレータ(MPC, pure-pursuit)

youtu.be

 

・Gazebo(MPC, pure-pursuit)

www.youtube.com

 

 

最後に

ティアフォーでは自動運転システムを一緒に開発してくれるメンバーを募集しています!!

*1:自動運転の発展の歴史 国際交通安全学会誌 Vol. 40 No. 2 

http://www.iatss.or.jp/common/pdf/publication/iatss-review/40-2-01.pdf

*2:DARPA The Grand Challenge 

https://www.darpa.mil/about-us/timeline/-grand-challenge-for-autonomous-vehicles

*3:A Survey of Motion Planning and Control Techniques for Self-driving Urban Vehicles 

https://arxiv.org/pdf/1604.07446.pdf

*4:Stability of Autonomous Vehicle Path Tracking with Pure Delays in the Control Loop 

https://pdfs.semanticscholar.org/41f7/12a51b1490937fe494e80debeb87f09d7abe.pdf

AutowareにおけるLGSVL Simulatorの活用事例の紹介

はじめまして。株式会社ティアフォーで自動運転システムおよびそのシミュレーションソフトウェア開発をしている片岡です。今回のエントリではAutoware対応自動運転シミュレータであるLGSVL Simulatorについて、その仕組みとティアフォーでそれをどう活用しているかについて解説していきたいと思います。

 LGSVL SimiulatorはAutowareと同様にオープンソースで提供されている自動運転向けマルチロボットシミュレータです。街一つをまるごとシミュレーションした巨大なマップに数百台のNPC車両を動かし、その環境の中で自分の自動運転アルゴリズムを検証することが可能です。

github.com

バイナリリリースもひと月に一度のペースで行われており、そのたびに多くの新要素が追加されています。

自動運転システム開発におけるシミュレータの役割

自動運転システム開発におけるシミュレータの最大の役割は、実験コストおよび事故リスクの低減にあります。自動運転システムの開発をすべて実車で行った場合、車両のセットアップだけで数時間は必要です。公道実験ともなると実施場所の許可申請等それ以外の準備も必要になってきます。そして何より、実験時に事故を起こしてしまった場合、人命に関わるような取り返しのつかない事態も招きかねません。

そこで、そうした実車では危険な実験(制御アルゴリズムの動作テスト、未完成のパーセプションモジュールの動作テスト等)を行う際に活用されるのがシミュレータです。

自動運転シミュレータとしてROSと接続して使用できるシミュレータには以下のようなものがあります。

f:id:masaya-kataoka:20190207152000p:plain

自動運転シミュレーションに使用可能なROS連携機能のあるシミュレータ一覧

ティアフォーではこの中からAutoware向けAPIが存在し、街一つをシミュレーション可能なLGSVL Simulatorを使用して自動運転システムの開発を行っています。

Unityをベースにしているため、ドキュメントが豊富で拡張性も高く、アセットストアのソフトウェア資産を活用することできわめて高速な開発が可能です。

ティアフォーではゼンリン様がUnity Asset StoreにてMITライセンスで公開中の秋葉原の3Dモデルを用いて数時間の作業で秋葉原での自動運転シミュレーションに成功しました。

www.zenrin.co.jp

www.youtube.com

www.youtube.com

LGシミュレータとAutowareの連携機能

f:id:masaya-kataoka:20190207142045p:plain

LGSVL Simulatorの仕組み

ティアフォーではLGSVL Simulator Launcherというシミュレータリモート起動ツールを開発し、シミュレーターを遠隔起動できるようにしています。

github.com

このツールはFlaskというPythonフレームワークを用いて開発されています。シミュレータマシンのポートにHTTPで以下のようなjsonをPOSTするとシミュレータに設定ファイルを引き渡し、起動してくれます。

{
  "bin_type" : "tier4-develop",
  "initial_configuration" : {
    "map" : "SanFrancisco",
    "time_of_day" : 12.0,
    "freeze_time_of_day" : true,
    "fog_intensity" : 0.0,
    "rain_intensity" : 0.0,
    "road_wetness" : 0.0,
    "enable_traffic" : true,
    "enable_pedestrian" : true,
    "traffic_density" : 300
  },
  "vehicles" : 
  [
    {
      "type" : "XE_Rigged-autoware",
      "address" : "$(autoware_machine_ip)",
      "port" : 9090,
      "command_type" : "twist",
      "enable_lidar" : true,
      "enable_gps" : true,
      "enable_main_camera" : true,
      "enable_high_quality_rendering" : true,
      "position" : {"n" : 4140310.4, "e" : 590681.5, "h" : 10},
      "orientation" : {"r" : 0.0, "p" : 0.0, "y" : 269.9}
    }
  ]
}

このLGSVL Simulator Launcherにより、ティアフォーでは自分の席からいつでもシミュレーション環境を使用可能です。

LGシミュレータは、Unity上で物理計算、NPCの挙動制御、センサーシミュレーションといった様々なモジュールがシミュレータ世界の情報を更新することで動作します。

UnityとROSの接続にはros-sharpが有名ですがLGSVL SimulatorではIROS Clientというrosbridgeに対応したROSクライアントを独自実装しています。

今後、ティアフォーではLGSVL SimulatorとAutowareの連携機能を強化することで、公道走行中にセンサを止めるといった実車では極めて危険な実験をシミュレーション上で行い、Autowareの安全性を高めたり、新規アルゴリズムの開発や性能評価、CIと統合したAutowareの動作テストに用いていきたいと考えています。

現在はAutowareにLGSVL Simulatorから出力されるGround Truthデータ(深度画像、セグメンテーション画像、物体領域、Lidar点群とそのラベル等)をKITTI Datasetのデータ形式に変換するツールを追加しようと鋭意開発中です。

f:id:masaya-kataoka:20190206125712p:plain

LGシミュレータからの正解データ

まとめ

ティアフォーではシミュレータを用いてAutowareやその周辺ツール開発の高速化、品質向上に努めています。

今後は

  • ラベルデータ自動収集機能の追加
  • CIと統合した自動テスト機能の実装
  • アルゴリズムの自動評価機能の追加

等の開発を進め、自動運転システム開発を強力に加速させていきたいと考えています。

 

自動運転システムを一緒に開発してくれるメンバーを募集しています!

ティアフォーにおける自動運転車両の遠隔監視・操縦システムのご紹介

はじめまして、ティアフォーで自動運転のWebプラットフォーム開発を行っている飯田です。

今回は、遠隔型レベル4自動運転を行う上で必須な遠隔監視・操縦システムについてご紹介します。

 


遠隔監視・操縦システム

 

 遠隔型自動運転とは

まず自動運転のレベルの枠組みから簡単にご紹介します。

国際的に自動運転のレベルは0~5の6段階に定義されています。

 

f:id:yuki-iida:20190118132117p:plain

自動運転のレベル

基本的には、レベル4から運転者の役割がなくなり皆様が思い描くような運転から開放された乗車体験が実現されます。

しかし、運転者の役割が無くなることに伴い、全て自動運転システムが状況を判断し、走行する必要があります。

ただ、現実問題として自動運転システムが対応出来ない場面も想定されます。

自動運転システムが対応できない場面において、個人所有の車であれば搭乗者に操縦を任せることが可能ですが、タクシーやバスなどサービスとしてお客様に提供している場合は運行管理者が対応する必要があります。

そこで、遠隔地から車両を見守り、何か有事の際は操縦し自動運転可能な状態まで復帰させるために遠隔監視・操縦システムが必要となってくるのです。

f:id:yuki-iida:20190118133847p:plain

遠隔型自動運転の位置付け

出典: *1

 

遠隔監視・操縦システムについて

本システムの機能要件として、下記の事柄が挙げられます。

  • 複数のカメラ映像を低遅延で配信できる (実際の運転席と同等の情報を遠隔から把握できる必要がある)
  • 車両(Autoware)の状態を監視できる
  • 遠隔から低遅延で操縦できる
  • 通信状況が悪い/切れた場合に、車両側で安全に停止できる
  • 複数台の車両の映像を複数人で監視できる (運行管理者や保険会社など複数のプレイヤーが出てくることを想定)
  • 映像を録画できる

大別すると、映像配信と制御情報(Autowareの状態情報も含む)の送受信の2つに分かれます。  

f:id:yuki-iida:20190118153634p:plain

利用シーン

 

映像配信の仕組み 

映像配信の仕組みとして、

  • HLS (HTTP Live Streaming)

  • RTMP (Real-Time Messaging Protocol)

  • WebRTC (Web Real-Time Communication)

などが挙げられますが、ティアフォーではWebRTCを採用しています。

主な選定理由としては、圧倒的に低遅延(200 ~ 300ms程度)、回線の太さに合わせてビットレートが可変であること、多くのプラットフォームで採用されており汎用性が高いことの3つが挙げられます。

f:id:yuki-iida:20190118150101p:plain

WebRTC

しかし、WebRTCでは基本的にP2Pで通信を行うため、N対Mの通信を行うに当たりデータ転送量の増加、各セッションの管理コストの増加、録画機能の追加が困難などいくつか問題があります。

そこで、本システムではWebRTCの中でもWebRTC SFUを採用しました。

SFUでは、センター集約型であるためN対Mの映像の送受信、録画機能が容易に実現でき、非常に使い勝手が良いというメリットがあります。

上記の図を見ると、MCUは通信量が削減されて良いように見えますが、各映像を結合する処理に大きなレイテンシが乗り、本システムには不向きなため、採用には至っていません。

 

制御情報通信の仕組み 

制御情報通信の仕組みとして、

  • HTTP (Hypertext Transfer Protocol)
  • Websocket

  • MQTT (Message Queuing Telemetry Transport) 

などが挙げられます。こちらに関しても映像配信同様にレイテンシの小ささと複数台の車両を扱えるスケーラビリティ、さらにはデータ量の小ささやQoSが管理できるといった理由でMQTTを利用しています。

 

全体の枠組み

f:id:yuki-iida:20190118173316p:plain

全体構成

本システムの全体構成は、上記のようになります。

WebRTC SFUのシステムは、時雨堂様のWebRTC SFU Soraを利用しています。

OSSJanusなどもありますが、ブラウザのアップデートへの対応や使い勝手の面でSoraの方が優れていたため、Soraを利用しています。

さらに、WebRTC Native Clinet Momo がリリースされ、ROS対応したのでブラウザを利用せずに映像配信が可能になりました。

これにより車両側の映像配信/制御情報通信共にROSプラットフォームへの共通化が実現できています。

また、遠隔監視者は、特に環境構築等を必要とせずに、ブラウザを利用すれば、自動運転の監視・操縦が可能となっております。 

 

f:id:yuki-iida:20190118161125p:plain

操縦シーン

 

まとめ

ティアフォーでは、WebRTC SFU及びMQTTを利用し遠隔監視・操縦システムを実現しています。

今後は、

  • 通信の安定化 (通信データ量削減及び映像配信ノードのFPGA対応など)
  • スケーラビリティの考慮 (数十、数百台の自動運転車を安全に見守れる仕組み)
  • 遠隔操縦のUI/UXの改善 (VR対応やより抽象度の高い操縦方法の考案など)

を行っていく予定です。

機会があれば上記新規機能の実装のお話や、得た知見なども順次ご紹介していきたいと思っております。

 

自動運転サービスを一緒に開発してくれるメンバーを募集しています!

 

*1:自動運転をめぐる最近の動向と警察庁の取組について(平成30年)    https://www.npa.go.jp/bureau/traffic/council/jidounten/2018dai1kaisiryou1.pdf

AutowareにおけるObject Trackingアルゴリズムの紹介

はじめまして、ティアフォーで自動運転のソフトウェア開発を行っている村上です。

今回のエントリでは自動運転技術のうち、周りの環境を認識する技術の一部を紹介していきます。

自動運転におけるPerceptionの役割

 安全で快適な自動運転を実現するためには、機械が人間と同じように周りの状況を認識し、それらの情報を元にして行動計画、そして車両制御をする必要があります。

 

https://cdn-ak.f.st-hatena.com/images/fotolife/k/kfunaoka/20181203/20181203163921.png

 

上の図におけるPerceptionにおいて、センサー情報から周囲の環境を認識するアルゴリズムが実装されています。

今回は周囲の障害物を認識するための要素に絞って進めていきます。
大きく分けて、Detection、Tracking、Predictionに分かれています。

  • Detection: センサー情報から障害物情報を検知
  • Tracking: Detectionの結果を時系列で処理することによって、障害物の状態を推定
  • Prediction: Tracking結果を元にして、将来の障害物の動きを予測


上記の動画はDetectionとTrackingを可視化したものになります。

障害物検知、それらのクラス分類をDetectorが担い、Trackingではそれらの速度や向きを推定して動画上で可視化しています。

そして、今回はTrackingのアルゴリズムの1つ IMM-UKF-PDA Tracker について紹介します。

IMM-UKF-PDA Tracker

IMMとUKF、PDAを組み合わせたアルゴリズムなので、このような名前になっており、
それぞれ何をしているかについてはこの後説明していきます。
参考文献*1 *2

各障害物の位置情報 (x, y) から速度、向き、動作モデルの推定を行います。

f:id:kosuke-murakami:20181225134810p:plain
UKF(Unscented Kalman Filter)

日本語では「無香料カルマンフィルタ」と呼ばれることもあります。

AutowareのObject TrackingではUKFを軸にして障害物の状態を推定します。

UKFでは具体的に各障害物の(x, y, velocity, yaw, \dot{yaw}) を推定しています。

 

問題となるのは、前提としている動作モデルが非線形モデルという点です。(動作モデルについてはIMMのパートで解説)

通常のカルマンフィルタでは非線形モデルを扱うことができません。なので非線形モデルを線形モデルに近似して扱う必要があります。

f:id:kosuke-murakami:20181225191450p:plain
この非線形モデルを線形化して扱うカルマンフィルタの手法の一つがUnscented Kalman Filterになります。

Unscented Transformと呼ばれる手法で点(シグマポイント)をサンプリングし、非線形モデルでそれらの点を伝播させます。そして伝播させた点から平均と分散を推定します。

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

このような処理をすることで、非線形モデルの動作モデルに対しても、線形モデルのように変換後の平均と分散を推定することができます。

 

IMM(Interacting Multiple Model) 

IMMは一つの障害物に対して、複数の動作モデルを仮定し、確からしい動作モデルに対して重み付けをしてObject Trackingをする手法になります。

前提となる動作モデルはCV(Constant Velocity), CTRV(Constant Turn Rate and Velocity), Random Motionの3つになります。
それぞれ、まっすぐ進む、曲がりながら進む、動かない動作モデルを表現しています。

それぞれの更新式は以下のようになります。

 

Constant Velocity
\[
{x_{k+1}} = \left(
\begin{array}{c}
x_{k} + \upsilon_{k}\Delta t\sin\bigl(\psi_{k}\bigr) \\
y_{k} + \upsilon_{k}\Delta t\cos\bigl(\psi_{k}\bigr) \\
 \upsilon_{k} \\
\psi_{k} \\
\ 0
\end{array}
\right)
\]

 

Constant Turn Rate Velocity

\[
{x_{k+1}} = \left(
\begin{array}{c}
x_{k} + \upsilon_{k}/\dot{\psi_{k}}\bigl(\sin\bigl(\psi_{k} + \dot{\psi_{k}} \Delta t\bigr)-\sin\bigl(\psi_{k}\bigr)\bigr) \\
y_{k} + \upsilon_{k}/\dot{\psi_{k}}\bigl(-\cos\bigl(\psi_{k} + \dot{\psi_{k}} \Delta t\bigr)+\cos\bigl(\psi_{k}\bigr)\bigr) \\
 \upsilon_{k} \\
\psi_{k} +\Delta t\dot{\psi_{k}}\\
\ \dot{\psi_{k}}
\end{array}
\right)
\]

 

Random Motion

\[
{x_{k+1}} = \left(
\begin{array}{c}
x_{k} \\
y_{k}  \\
\ 0 \\
\psi_{k} \\
\ 0
\end{array}
\right)
\]

 \upsilon_{k}はkフレームにおけるvelocity.

 \psi_{k}, \dot{\psi_{k}}, はそれぞれkフレームにおけるyaw, yaw rateを表しています。

 

このように、一つの障害物に対して複数の動作モデルを仮定することで、障害物が複雑な動きをした場合にも対応できるようにしています。

PDA(Probabilistic Data Association)

Data Associationは追跡物体と観測データを関連付けるアルゴリズムを指します。
f:id:kosuke-murakami:20181225185200p:plain

 

例えば上記のようなシナリオを考えた時に、"track 1"と"track 2"に対して適切な観測データ(図の"observations")を割り当てる必要があります。

 

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


Probabilistic Data Associationではカルマンフィルタによる予測値と観測データを比べて、確からしい観測データに対して重み付けをしてData Associationをしています。

参考文献*3


まとめ

Autowareでは論文を参考にして上記の要素技術を組み合わせたIMM-UKF-PDA Trackerを実装しています。


また最近はカルマンフィルタのパラメターをオートチューニングする*4やマップのレーン情報を使用してTrackingする*5なども追加で実装しています。機会があればこちらのアルゴリズムに関しても紹介していけたらと思います。

*1:Arya Senna Abdul Rachman. 2017. 3D-LIDAR Multi Object Tracking for Autonomous Driving. Master's thesis. Delft University of Technology, Delft, Netherlands

*2:M. Schreier. 2016. Bayesian environment representation, prediction, and criticality assessment for driver assistance systems. Ph.D. Dissertation. Technische Universität Darmstadt, Darmstadt, Germany.

*3:Robert Collins. 2012. Vision-Based Tracking. (November 2012). Retrieved November 7, 2012 from http://www.cse.psu.edu/~rtc12/CSE598C/datassocPart1.pdf

*4:Zheng B, Fu P, Li B, and Yuan X. 2018. A Robust Adaptive Unscented Kalman Filter for Nonlinear Estimation with Uncertain Noise Covariance. Sensors(Basel). DOI:10.3390/s18030808.

*5:D. Petrich, T. Dang, D. Kaspar, G. Breuel, and C. Stiller. 2013. Map-based Long Term Motion Prediction for Vehicles in Traffic Environments. International IEEE Conference on Intelligent Transportation Systems (ITSC). pp. 2166–2172.

はじめまして

はじめまして、1日目のエントリを書きました id:kfunaoka です。

ティアフォーは、2015年12月に設立されて3年目を迎える、自動運転システムや自動運転の運行管理を行うプラットフォームを開発している会社です。 まだ見ぬサービス実現に向けて、先端技術を駆使して技術的な課題を克服すべく、様々なチャレンジを行っています。

そんな取り組みを、これからこのブログを通してご紹介していければと考えています。

最初のエントリとなる今回は、弊社で力を入れている自動運転システム用オープンソースソフトウェア「Autoware」を紹介したいと思います。

続きを読む