⾃動運転プラットフォームの実⽤化︓
ROS 2で⾼信頼ソフトウェアの実装

安積卓也

Geoffrey Biggs

⽬次
⾃動運転ソフトウェアAutoware（Autoware.AI）
⾃動運転レベル実証実験で使われている
ROS
⾃動運転プラットフォーム
⾃⼰位置推定２５分程度
環境認識
経路計画・経路追従

⾃動運転ソフトウェア︓ROS 2への移⾏理由
ROSの弱点
Geoffrey Biggs
ROS2
今あるAutowareとその問題
Autoware.AIとAutoware.Auto2

⽬次
⾃動運転ソフトウェアAutoware（Autoware.AI）
⾃動運転レベルROS⾃⼰位置推定
環境認識
経路計画・経路追従

後半︓残りの時間

⾃動運転ソフトウェア︓ROS 2への移⾏理由
ROSの弱点
Geoffrey Biggs
ROS2
今あるAutowareとその問題
Autoware.AIとAutoware.Auto
3

⾃⼰紹介

名前︓安積卓也（あづみたくや）• 出⾝研究室︓名古屋⼤学⼤学院 情報科学研究科
 2006ｰ2009︓博⼠後期課程 ⾼⽥研︓組込みリアルタイム
2006-2007︓未踏ソフトウェア（代表） 2008-2010︓学振 特別研究員 DC→PD• ⽴命館⼤学情報理⼯学部・情報システム学科・助教
 2010年4⽉〜2014年2⽉︓⻄尾研究室︓ユビキタス
 2011年9⽉〜2012年3⽉︓カリフォルニア⼤学アーバイン校︓客員研究員

帰国後︓⾃動運転向けシステムソフトウェアの研究開発開始• ⼤阪⼤学 ⼤学院基礎⼯学研究科 助教
 2014年3⽉〜︓潮研究室︓制御・⼈⼯知能 2016年9⽉〜︓株式会社エンブフォー︓最⾼技術責任者
 2017年10⽉〜︓JSTさきがけ研究員（兼任） 埼⽟⼤学⼤学院理⼯学研究科
 2018年4⽉〜︓准教授
4採⽤事例︓アイシンAW
Autowareを⽤いた公道実験・利⽤の例

5

⾃動運転のレベル

システム︓※１※１官⺠ITS構想RM⽤語対応表
操舵︓ハンドル （ステアリング）
加速︓アクセル
制動︓ブレーキ

レベル

ハンドル・アクセル・ブレーキ

ドライバー

レベル１

いずれか⼀つ主体

⾃動ブレーキ

レベル２

複数主体

クルーズコントロールレベル３

すべて（危険回避はドライバー）

あり

公道実験

レベル４

すべてなし

限定⾃動運転バス

レベル５

すべてなし

全て

⾃動運転
タクシー

完全⾃動運転場所※SAE J3016（2016）6

⾃動運転ソフトウェアの役⽬

ドライバー

連携
⾼精度3次元地図

アクセル,ブレーキペダルのストローク量,ステアリング⾓度
ハンドル、ブレーキ、アクセル

LiDAR

カメラ

GNSS (GPS等)
https://gitlab.com/autowarefoundation/autoware.ai

7Autowareの構成
システム
⾃動運転
アプリ
ケーション

センシング

⾃⼰位置
推定

環境認識

ミドル
ウェア

ROS

OS

Linux (Ubuntu16)

ハードウェアCPU(multi/many)GPU

Camera

GNSS
(GPS)

経路計画

LiDAR

https://gitlab.com/autowarefoundation/autoware.ai

8ROSとはROS (Robot Operating System): ロボット開発におけるライブラリやツールを提供
ハードウェアの抽象化、デバイスドライバ、ライブラリ、視覚化ツール、データ通信、パッケージ管理 ...etc特⻑
 世界で最も利⽤されているロボット
ミドルウェア 豊富な対応ロボット・センサ
 オープンソース
 サポート⾔語︓ C++, Python
 管理団体︓OSRF
 対応OS︓Linux
10

ROS の 特⻑
ROS (Robot Operating System): ロボット開発におけるライブラリやツールを提供
Publish / Subscribe モデル

分散システム ノードの集合としてシステムを構築
 トピックを介してデータをやり取り
例

トピック
ホスト

クライアント

視覚化・シミュレーション
歩⾏者検知
ノード 1

⾞検知

ノード 3ノード 2
11

Publish / Subscribe モデル
処理をノードとして分割・管理し、トピックを介してデータのやり取りを⾏う。
➡ 再利⽤性・⽣産性の向上, 分散環境への⾼い親和性, 障害分離
トピック

PublishSubscribe

Subscribeノード

歩⾏者検知
⾞検知ノードノード

12

Publish / Subscribe モデル
処理をノードとして分割・管理し、トピックを介してデータのやり取りを⾏う。
➡ 再利⽤性・⽣産性の向上, 分散環境への⾼い親和性, 障害分離
トピック

歩⾏者検知
ノード

⾞検知

ノード
ノード
13

Publish / Subscribe モデル
処理をノードとして分割・管理し、トピックを介してデータのやり取りを⾏う。
➡ 再利⽤性・⽣産性の向上, 分散環境への⾼い親和性, 障害分離NEW !

Subscribe

トピック

信号検知
ノード

PublishSubscribe

Subscribe
ノード

歩⾏者検知
⾞検知
ノード

ノード

14

ROS の 特⻑
分散システム

データの保存︓rosbag

抽象化
RViz：3D視覚化ツール
User Code
簡単にシステム状態を視覚化可能

実データ（トピック情報）を保存可能［再⽣データ］R O S
 記録したセンサデータ（rosbagファイル）
Hardware 指定した値のデータ

視覚化・シミュレーション

豊富なパッケージ(デバイスドライバやライブラリ)15

⾼精度３次元地図

pointcloud map＋ADAS (vector) map ポイントクラウド地図

 3次元座標(緯度・経度・標⾼)
 RGB値

pointcloud map

 ADAS地図 - 点群地図から地物を抽出
 信号、路⾯標⽰ etc.

ADAS (vector) map
17センシング︓LiDAR

20

LiDARによる⾃⼰位置推定
地図データとスキャンデータがきれいに重なる座標変換を計算し、地図内の位置・向きを算出
地図データ

スキャン
マッチング

スキャンデータ

３次元地図とスキャンデータの座標変換を計算
⾞両の位置・向き

代表的なスキャンマッチングのアルゴリズム

ICP (Iterative Closest Point) - P.J. Besl et al. (1992)
2D-NDT (Normal Distributions Transform) - P. Biber et al. (2003)
3D-NDT - E. Takeuchi et al. (2006) , M. Magnusson et al. (2007)22

ディープラーニング（YOLOv3）を⽤いた物体認識︓最新

https://www.youtube.com/watch?v=KFfD3Mkkz4Y

25

Autowareの信号認識

https://www.youtube.com/watch?v=KmOdBms9r2w

28

R Craig Coulter. "Implementation of the Pure Pursuit Path Tracking Algorithm".
Pure Pursuit ※Technical
Report CMU-RI-TR-92-01, Robotics Institute, Pittsburgh, PA, January 1992.

経路上の⽬標点と⾃⼰位置の情報を基に⾞両制御信号を計算

33

38

自動運転ソフトウェア：
への移行理由とはロボット用のソフトウェアプラットフォーム
ロボット分野で大成功
様々なロボットで利用されている研究分野で人気であるベンチャー会社でも大手メーカーでも利用されている購入可能な に基づいて開発された製品もある

はどこからきたかの創業したロボティクスベンチャーのロボット研究を支えるために共通なハードウェアプラットフォーム
共通なソフトウェアプラットフォーム

オープンソースが中心

はどこからきたかとあるユースケースのために開発
独立なロボット
最先端な搭載大量のメモリー搭載
リアルタイム制御はハードウェア側
研究用

はどこからきたか
現在はが中心からの数十人のソフトウェア
エンジニア等（マスター）（ノード）
通信プロトコル、プロセス
ノード（トピック）

プロセス
ノード
プロセス
ノード
アプリケーション、

の特徴
ミドルウェアだけでなく、オープンプラットホーム他社の手を無料で借りる
独自で開発すると他が届かない機能がもらえる開発をサポートする機能機能
デバッグツール
ソース再利用サポート
共通データ型…

ツールは豊かロボット開発にいいツールは必須
ツールの例：デバッグツール

デバッグ：

デバッグ：ロボット
0.47047596160651484, 0.012463983269873857, 0.13185027912023128, 0.5380365386000314, 0.403864612045705,
0.06069930337048779, 0.3691795213234019, 0.8515692765843788, 0.0736967442312384, 0.2843486311730886,
0.8538529785225724, 0.3129984654314725, 0.3584207454827225, 0.4537846637411378, 0.7561766125048414,
0.8508870244042188, 0.0520696074562399, 0.8765451038148542, 0.15299405008975697, 0.5867355890849806,
0.9669883187750915, 0.41628598565655384, 0.34816285093525845, 0.9728408650406579, 0.41829494089973274,
0.579997374892018, 0.5531830445281459, 0.24530608285472844, 0.38526280587020356, 0.2210817119943037,
0.07975484090387797, 0.6433789010590776, 0.14258622222962336, 0.47068371292023214, 0.021146762861280366,
0.7809218654795851, 0.059743545404254084, 0.7174453572838055, 0.11796690651681152, 0.45170824264501075,
0.3463075513634315, 0.12329222545582419, 0.9238715097652316, 0.20246585186042165, 0.07287853589316085,
0.8857115222065027, 0.2607754782454512, 0.7871998842710477, 0.3123418728541889, 0.24793655686384475,
0.03936840867259228, 0.15830275932784887, 0.0588537758302089, 0.6905061474343309, 0.45187144905773735,
0.3137586806320821, 0.3928776902569401, 0.18194845109045765, 0.7772116865207355, 0.10878199902185848,
0.6046192473442614, 0.3783574047058046, 0.9335545367770111, 0.5931631033298297, 0.8227864249862641,
0.37984882478112314, 0.35863612685228197, 0.712004279109606, 0.3414544916392299, 0.4118358463966818,
0.709283617996954, 0.14020958524673632, 0.03867697529807812, 0.5240273928062406, 0.631862692442692,
0.9698634206694162, 0.6034612197461879, 0.3218208000413312, 0.6832981693054933, 0.6050553280734954,
0.6604449894889293, 0.3442873321468821, 0.18196942376936986, 0.4199897381622488, 0.8804476148633672,
0.1922718532155836, 0.963177730081603, 0.21728977473403277, 0.20754416331944092, 0.30192492471822563,
0.19063402733809054, 0.9498797020928332, 0.6673141005665001, 0.45745969941649967, 0.4351040209987119,
0.5928193275952122, 0.6823498640502099, 0.7442921879931558, 0.00932650033833149, 0.11983479696483657,
0.0519672566623508, 0.36971891569137594, 0.190717653457389, 0.7492902839065593, 0.5602249232567452,
0.6585780171293569, 0.08658888622314564, 0.6945120787132953, 0.5580665700278967, 0.48146812759625746,
0.4540375145339196, 0.8059387960368088, 0.8555468352647819, 0.5737110434503095, 0.35666621246462693,
0.06659849272034857, 0.21051537392984276, 0.731280246174109, 0.9151365268872526, 0.37390717986528854,
0.32541148512546336, 0.5594068298257496, 0.08044184535792642, 0.5591207304751257, 0.20915450867051832,
0.02534903593989679, 0.19416932780283314, 0.34906251623185813, 0.8432152857763088, 0.8664024388302471,
0.2840496778118137, 0.2781658794647851, 0.2465128654531562, 0.9988375836561965, 0.887499520253597,
0.027578461404808352, 0.29371750902319593, 0.8873891214375212, 0.914573150995103, 0.000652243172693745,
0.06772123956909537, 0.9597290829459296, 0.7714181981544204, 0.32507290632274355, 0.11058804894490903,
0.9998152138773576, 0.622944943150389, 0.3816913626678231, 0.7083424647825276, 0.11404328136373076,
0.21818485912970653, 0.08168144717155512, 0.6732894753601069, 0.5991484405675498, 0.026001431290659682,
0.7854449857322512, 0.2454220869235253, 0.9264245146883056, 0.9350749518287534, 0.9652777708676377,
0.8655942624669641, 0.27395894599419734, 0.0785308404808881, 0.3250820262765106, 0.5039220523760805,
0.4985074812618765, 0.01020455824663058, 0.5881052368037296, 0.01781120958533622, 0.27810744561068323,

デバッグ
ロボット開発で特に難しいところ
データが大量世界は停止できない
世界をロボットのように見えると問題の原因が明確にライブまたは再生で見たい
１フレームづつで見ると終わらないデバッグ：データの可視化

の弱点

単一障害点

起動順番がランダム
品質ってなに？
独立派ノードバンザイ！

リアルタイムなんてない

スーパーコンピュータが好き
安全性？認証？
それはなんでしょうか？
％自家製
壊れやすい通信

の弱点

単一障害点

起動順番がランダム
品質ってなに？

バンザイ！

すべて自動運転
独立派ノードリアルタイムなんてない
スーパーコンピュータが好き
システムの敵％自家製

安全性？認証？
それはなんでしょうか？

壊れやすい通信はだめならどうすればいい？に移行する！
（色々がよくなっているから）サポートされるは少ない

型 だけではないと使いにくい
組み込み での利用は不可能○×様々ながサポートされるのサポートプラットフォーム

サポート級制度がサポートする別の会社がサポートする
動くはず

組込み
準備中などのサポートが、

はあとでいい時代のオープンソースソ
フトウェア
開発プロセスはほとんど
定義なし
は基本のみ

中心
•Kanbanでチケットの登録
チケット作成 •Backlogに入る

開発プロセスの定義
アジャイルで管理がマスト
サポートプラットフォーム
は全部あり

開発

•スプリントの始まりでチケットがBacklogからReadyに移動•順番にReadyからIn Progressに移動•チケット専用ブランチでテスト•Continuous Integration•LinuxとWindowsとOSXでテストの自動実行

レビュー•チケットがIn Reviewに移動、Pull request作成•他の貢献者がレビュー•ソース、設計等がすべてレビュー

マージ•Masterクランチにチケットブランチをマージ•チケットブランチ削除•チケットを閉じる設計議論がオープン

リリース•リリースビルドは自動生成で

中心

中心

中心

自家製通信プロトコルが必須
パラメータサーバ等もメタデータ通信はデータ通信は自家製
プロトコル「」
ノードは別々のプロセスで実
行

プロセス
ノード

プロセス
ノード
プロセス
ノード
アプリケーション、

標準化されたプロトコルの導入、を排除、を導入
メタデータ
アプリケーションデータ

プロセス
ノード

プロセス
ノード
ノード
アプリケーション（レーザーセンサー）

レーザーデータ「」チャネル

レーザーデータ

ノード

レーの標準規格
複数の実装
オープンソースのも有料のも安全認証版あり
組み込み向け版あり
超分散向けあり

ザー

デー

タ

ノード

実装間の互換性
アプリケーション
ライブラリ
通信

サポートありアプリケーション
ライブラリ
通信

ベンダー

ライセンス

他のベンダーもあるの設定

チューニングができない

細かいチューニング可能…

の他の設定設定は様々

ユースケースようのディフォルトポリシーセット
センサーデータポリシーセット
パラメータポリシーセット

が単一障害点が必須
ノードの電話帳
パラメータサーバ…

が落ちるとアプリケーションはほぼ終わりを再起動したら起動中のデータがない

プロセス
ノード

プロセス
ノード
プロセスノード
アプリケーション

がない
メタデータはで通信
電話帳ではなくて「」あるノードが途中に落ちても復活は可能
パラメータはノードごとに保存

プロセス
ノード

プロセス
ノード
ノード
アプリケーション

すべてのノードがプロセス
一つのノード＝一つのプロセス
プロセス間でリソースは共有不可能「が」という仕組みもある
別 （実装時間で選択）
壊れやすい
共有ポインター通信のみ
なし

プロセス
ノード

プロセス
ノード
プロセス
ノード
アプリケーションノードはプロセスに統合可能
全部のノードを一つのプロセスに複数のプロセスを利用（ノード数＞プロセス数）

コンパイルまたはランタイムで決める可能プロセスに統合するとゼロコピー通信が可能
実行順番が指定可能
平行または連続実行

プロセス
ノード

プロセス
ノード
ノード
アプリケーション

上のまたは共有メモリ上のゼロコピ通信

実行管理不可能
ノード

すべてのノードは関数を持つ
起動順番は管理しにくい
起動中の実行順番は管理できない
決定的な実行は不可能

ノード
データ

デー

タ

ノード

振舞いと実行の分離
ノード

ノードは振る舞いを定義
は実行を管理ノード
データ

いつ何をはカスタムも可能

ノードはデーに搭載で実行起動順番依存しないようにエラー管理のために

タ

実行
実行
実行

ノード

ノードライフサイクル

ノードライフサイクル
システム管理（セットアップ、エラー状態等）用のステート

このステートのみで本機能を実行する

ノードライフサイクル
もしろん、メーン関数でノードの実装はまだ可能（プロトタイピングに必須だから）

リアルタイムサポートがない
リアルタイムは下のレイヤーの役割
ソフトウェアは制御ループなどを気にしない
通信プロトコルは
非リアルタイム
リアルタイムネットワークがあっても無意味
同一マイコンでもリアルタイム不可能

全スタックがリアルタイム可能
クライントライブラリがリアルタイム可能（作業中）

ミドルウェアがリアルタイム可能
ハードウェア制御は純粋ノードで可能ノードライフサイクル
リソース獲得などの非リアルタイム
コード

リアルタイム可能
決定的な動作組み込みは不可能のユースケースは最高のと大量のメモリーの依存する
ソフトウェアは大量
特に依存ソフトウェア以外のリソース利用が大きすぎ（近年可能になったけど理想ではない）組み込み
組み込みマイコンはメイン
ユースケースの一つ
ローパワー
ローメモリ

プロトコル
サポート
（開発中のところはある）
興味がある方：認証可能なへ開発プロセスが追跡できたから認証可能
アーキテクチャーは認証を支援
必要な部分のみ利用し、それを認証するに合致を目的に静的システム作成可能
完全静的は開発中（）セキュリティは基礎からサポートあり規格に合致

との差

新しい通信プロトコル
通信プロトコルの実装は入れ替え可能が管理可能
ライブラリアーキテクチャの更新
全スタックがリアルタイム可能
ノード構造の更新
サポートの拡大開発プロセスの記録
安全認証取得可能とインタラクション

１
トピックのシステムが通信可

トピック
タータ

デー

ノード

データのシステムとデブリッジにより
能

ブリッジ

データ

ノード

今ある

とその問題

研究世界から来た
品質に改善の余地がある
テストを強化すべきドキュメントの整備はこれからを利用
非リアルタイム、セキュリティに懸念、安全性は十分には担保されていないでプロトタイピング： 🙂 → 😀 → 😃 → 😄 →🥳
で製品販売： 🙁もしくは🤕もしくはもしくは🚓⚖
基本的にと同じ立場

必要なテストされた品質が高いソフトウェア
認証向き
開発プロセスを管理する安全標準（、等）に可能な限り従うデザインを検証する（形式手法等）
上記を果たしながら、オープンコミュニティを潰さない

基本的にと同じ立場

と現在のの改善
様々なベストプラクティスの導入で開発プロセスの改良
テストの追加ドキュメント作成、
ベースゼロから再開発
認証向き開発プロセス
デザイン作成、検証
テストファスト開発（）
開発記録作成ベース
で上記の改善点が利用したいプロジェクトの合流
現在

途中

将来
はの別名
は認証向けでは無い

実装自由さ

認証向け実装に無いフィーチャーがから利用
はスタンドアローンで利用可能

お互いにフィーチャーを利用https://roscon.jp