Virtual RobotX Chellengeへ向けたオープン
ソース自律航行システムの開発

OUXT POLARIS
片岡大哉 / 増岡伸哉 / 和田翠星 / 田中良道

コンテンツ
1. 大会，チーム紹介
2. OUXT Polarisの開発方針
3. 開発過程で生まれた各種成果物の紹介
4. 今後の開発計画

2

大会，チーム紹介3

Maritime RobotX Challenge● 完全自律走行船の国際コンテスト● 世界中から全12チーム参加● 日本からはOUXT Polarisのみ参加● 水上/水中タスク+広報+論文により採点● 船体はWAM-Vを使用● 隔年12月，ハワイで開催(次回は2020年)

4Virtual RobotX Challenge● Gazebo上で行われるMaritime RobotX Challenge● Docker ImageをPushすると自動的に採点が実行される● 全てのタスクは全自動で行い，人の介入は禁止● 指定座標に向かう、光るブイの点滅パターンの報告等のタスクを実施

5

OUXT Polaris
2014年@Singapore6位 入賞
競技会経験者
約20名＋日本唯一の出場
社会人数名
2018年
@Hawaii•••••••

大阪府立大学
大阪大学
東京大学
筑波大学
神戸大学
富山高専
九州工業大学● 現在の拠点は大阪府立大学● 2018年度大会ではタスクを1つクリア● 開発費はスポンサー様からいただいた資金で運営
6

OUXT Polarisの開発方針

7

OUXT Polarisの開発方針● 成果物を全てOSSとしてROSコミュニティに還元する○ 非常に高い本大会の参加ハードルを少しでも下げる○ ライセンスは全てApache 2.0で統一し、わかりやすく● 可能な限りパッケージとしてリリースする○ 極力標準仕様に準拠し，他のROSパッケージとも連携を容易に○ すでに7個のリリース手続きを完了，今後もリリース対応パッケージを増やしていく予定○ 自律航行以外でも使用可能なROSパッケージ群を目指す

上記の方針を踏まえ，前回大会からパッケージ構成を見直し，アーキテクチャ再設計を実施
8

前回大会時のパッケージ構成● 2つだけのパッケージ分割○ 実機で動作するプログラムをまとめたrobotx_core○ 周辺ツールをまとめたrobotx_packages● 問題点○ プログラムの単位が巨大で船体のコンピュータではビルド時間が長い○ リリースするのにパッケージの抽出が必要になる

9

今大会からのパッケージ構成● vrx_packagesの中には一つ.rosinstallファイルが入っている○○○

この.rosinstallファイルを用いてワークスペースの構成を管理
各種プランナーや数学計算ライブラリはパッケージごとに分離され，テスト/CI/リ
リースが簡単に
実機デプロイの際にはシミュレーション用のパッケージを取り除いたrosinstallファ
イルを用意し，デプロイを高速化

10

vrx_packagesのアーキテクチャ
Planning
Control

Localization
NMEA toGeoposeGeoposeConverter

Pose toTwist

PF
Localizer

CarrotPlannnerimu
to twist
Perception

DWA
Plannner

Behavior

KCF
Tracker

MissionState
MachineTiny
Yolov3Cluster
Image
FusionCluster
Detection

ModelFitting

RobotxControl
Waypoint
Servernavigation
statemachine

ClusterTracker

開発済

Hardware
Interface

ObjectMapping

開発中

開発予定

11

自律ナビゲーションの様子

12開発過程で生まれた各種成果物の紹介

13

Simulatorに対する成果物● nmea_gps_plugin○ nmea_msgs/Sentence形式で現在の姿勢をpublishする
gazeboプラグイン○ hectorのGPSプラグインはsensor_msgs/NavSatFixでそこから自機の方位が取れなかったため開発

14

Localizationでの成果物1● data_buffer○ タイムスタンプ付きデータの内挿・外挿関数を書くと指定のタイムスタンプの時の値が取ってこれるバッファ
リクエスト

リクエスト
時系列データ● odom_frame_publisher○ twistをデッドレコニングした結果とposeを比較しmap->odom,odom->base_linkフレームをpublish○ 自作Localizerを簡単にREP105準拠可能
Pose in Map Frame
Dead Reckoning Pose
base_linkframe

odomframemapframe

15

Localizationでの成果物2● PF Localization○ 粒子フィルタによるLocalizer○ Pose + Twistを三次元でフュージョン

16

Perceptionでの成果物1● vision_msgsに対するコミット○ tracking_idのフィールドを追加，トラッキング込みの運用が可能になった○ vision_info_serverを開発、物体認識データベースのバリ
デーション＋データベースのパースを自動化○ visualizer_nodeを開発，認識結果の可視化に貢献

17Perceptionでの成果物2● 学習データセット作成の自動化○ jsk_packageのクラスタリング結果からROIを生成○ クラスごとにフォルダを作って切り抜かれた画像をクラスごとのフォルダに仕分けたあとPythonスクリプトを実行するとデータセットができる○ 現在はdarknetのみ対応

18

Perceptionでの成果物3● crop_hull_filter○○

convex_hull内部の点群を削除したり、内部の点群だけ残すことが可能
海岸線の点群を削除するため開発

19

Behaviorでの成果物● rostate_machine○ ROS用state_machineパッケージ○ 専用クライアントライブラリを使用することで，状態定義のハードコードを防止し，ビヘイビアの肥大化を防ぐ○ xmlフォーマットで状態機械を記述○ rvizからリアルタイムで現在の状態を確認可能

20

パッケージをリリースするメリット● apt・rosdepでパッケージがインストールできるのでビルド時間が短縮できる● 設計時から徹底的に再利用性を意識したコーディングをすることになるので技術的負債が少なくなる● 過去に作ったノードを再利用したいときにすぐ再利用できるようになる
ROSパッケージは非常に簡単にリリースできます！
ぜひ積極的にリリースを検討されてはいかがでしょうか？
詳細はこちらをご参照ください21今後の開発計画

22

Maritime RobotX Challenge2020への開発● クラウドベースのサポートツール群開発○ AWS RobomakerのFleet management + Code Buildによるデプロイパイプライン設計中○ Kinesis Video Streams + Sagemakerによりラベリングと機械学習を半自動化、現地での貴重な時間をラベリングに割くことを防止

23

Maritime RobotX Challenge2020への開発● mbed用ミドルウェア(ros_mbed_bridge)の開発○ 船体制御システムとROSをつなぎ込むためのライブラリ○ マイコン間でUDPを使って文字列をやりとり● 実機へのシステム適用○ 実機はJetson TX2でクラスタを組んで運用しているため、処理を高速化して実機で動作可能にする
LPC1768

モータドライバ

遠隔制御系

表示系

ROS
PWM等

LPC176824

今後の開発計画
開発項目

2019/92020/32020/92020/12

トラッキングSLAM

Webツール群

実機対応

25

まとめ
● Virtual RobotX Challenge/Maritime RobotX Challenge2020に向けたOSS自律航行システムのアーキテクチャを発表● 抽象化を徹底，複数のパッケージリリースを行い，ROSでできることの幅を広げた● 今後はトラッキング、マッピングを導入し、より安定した自律航行を目指す● 来年以降はWebツール群、実機適用を行いMaritime RobotX
Challenge 2020での自律航行の実現を目指す26

スポンサーのお願い
OUXT Polarisの開発はスポンサー様からのご支援により成り立っております。ご支援頂いたスポンサー様にはHP、船体へのロゴ掲載等を行っております。
前回大会時のスポンサー様

27

今後のVirtual RobotX Chellengeへの開発● トラッキング，マッピングの導入○ トラッカーを導入し，一度認識したオブジェクトを追跡○ ランドマークベースのマッピングを導入し，物体の位置関係に基づいてナビゲーション
Waypoint
修正Green Buoy

Unknown
Object

Red BuoyUnknown
Object28