2019年6⽉5⽇(⽔)
ROBOMECH2019 チュートリアル
RTミドルウェア講習会、RSNP講習会合同セッション

第１部（その1）︓OpenRTM-aistおよびRTコンポーネントプログラミングの概要

国⽴研究開発法⼈産業技術総合研究所
ロボットイノベーション研究センター
ロボットソフトウェアプラットフォーム研究チーム⻑

安藤 慶昭

1本⽇のプログラム
内容

ン

時間

合同セッショ
RTM/RSNP

第1部(その1)︓OpenRTM-aistおよびRTコンポーネントプログラミング
10:00 の概要
10:50
担当︓安藤慶昭 ⽒ (産業技術総合研究所)
第1部(その2)︓インターネットを利⽤したロボットサービスとRSiの取り
11:00 組み2019
11:50
担当︓成⽥雅彦 先⽣（産業技術⼤学院⼤学）
11:50 質疑応答・意⾒交換
12:00
12:00 昼⾷
13:00

14:30 - 第3部︓RTシステム構築実習
15:30 担当︓宮本信彦 ⽒ (産業技術総合研究所) 他

講習会
RTM

13:00 - 第2部: RTコンポーネントの作成⼊⾨
14:30 担当︓宮本信彦 ⽒ (産業技術総合研究所) 他

15:30 - 第4部︓RTミドルウェア応⽤実習
17:00 担当︓宮本信彦 ⽒ (産業技術総合研究所) 他

https://openrtm.org/openrtm/ja/tutorial/robomech2019 にて資料を公開
2

はじめに

• RTミドルウエアの概要– 基本概念• OpenRTM-aist-1.2の新機能と開発ロード
マップ• ROSとの⽐較、動向• プラットフォームロボットプロジェクト• RTMコミュニティー活動
• まとめ

3

RTミドルウェアとは︖

4

RTとは?

• RT = Robot Technology

cf. IT– ≠Real-time– 単体のロボットだけでなく、さまざまなロボット技術に基づく機能要素をも含む (センサ、アクチュエータ, 制御スキーム、アルゴリズム、etc….)
産総研版RTミドルウエア

OpenRTM-aist+++++

RT-Middleware• RT-Middleware （RTM)– RT要素のインテグレーションのためのミドルウエア• RT-Component （RTC)– RT-Middlewareにおけるソフトウエアの基本単位5

ロボットミドルウエアについて• ロボットシステム構築を効率化するための共通機能を提供する基盤ソフトウエア– 「ロボットOS」と呼ばれることもある– インターフェース・プロトコルの共通化、標準化– 例として• モジュール化・コンポーネント化フレームワークを提供• モジュール間の通信をサポート• パラメータの設定、配置、起動、モジュールの複合化（結合）機能を提供• 抽象化により、OSや⾔語間連携・相互運⽤を実現• 2000年ごろから開発が活発化– 世界各国で様々なミドルウエアが開発・公開されている
6

従来のシステムでは…

ロボットを制御するプログラム
Controller
softwareController
Robot Arm
Control software

互換性のあるインターフェース同⼠は接続可能

制御対象のロボット
Robot Arm1
7

従来のシステムでは…
Humanoidʼs Arm
Control software

制御対象のロボット
Robot Arm2

ロボットを制御するプログラム
Controller
softwareController

ロボットによって、インターフェースは⾊々互換性が無ければつながらない

Robot Arm
Control software

制御対象のロボット
Robot Arm2
8

RTミドルウエアでは…
RTミドルウエアは別々に作られたソフトウエアモジュール同⼠を繋ぐための共通インターフェースを提供

Arm A
Control software

compatible
arm interfaces

ロボットを制御するプログラム

制御対象のロボット
Robot Arm2

Controller
softwareController

ソフトウエアの再利⽤性の向上
RTシステム構築が容易になる

Arm B
Control software

制御対象のロボット
Robot Arm1
9

ロボットソフトウェア開発の⽅向
従来型開発

コンポーネント指向開発

カメラ
カメラ

マイク

マイク

頭・腕駆動

⾳声合成

⾳声合成
⾳声認識

ミドルウェア対話

顔認識
ステレオビジョン

頭・腕駆動
ステレオビジョン 様々な機能を融合的に設計
 実⾏時の効率は⾼いが、柔軟性に⽋ける システムが複雑化してくると開発が困難に

顔認識

⾳声認識

対話

 ⼤規模複雑な機能の分割・統合
 開発・保守効率化（機能の再利⽤等）
 システムの柔軟性向上

10

モジュール化のメリット• 再利⽤性の向上– 同じコンポーネントをいろいろなシステムに使いまわせる• 選択肢の多様化– 同じ機能を持つ複数のモジュールを試すことができる• 柔軟性の向上– モジュール接続構成かえるだけで様々なシステムを構築できる• 信頼性の向上– モジュール単位でテスト可能なため信頼性が向上する• 堅牢性の向上– システムがモジュールで分割されているので、⼀つの問題が全体に波及しにくい

11

RTコンポーネント化のメリット
モジュール化のメリットに加えて• ソフトウエアパターンを提供– ロボットに特有のソフトウエアパターンを提供することで、体系的なシステム構築が可能• フレームワークの提供– フレームワークが提供されているので、コアのロジックに集中できる• 分散ミドルウエア– ロボット体内LANやネットワークロボットなど、分散システムを容易に構築可能

12

RTコンポーネントの主な機能
データポートアクティビティ・実⾏コンテキスト
複合実⾏
共通の状態遷移InactiveActive•••

センサRTC

位置-

アクチュエータRTC
エンコーダ
コンポーネント

ライフサイクルの管理・コアロジックの実⾏••

ステレオビジョンの例
サービスポート

ステレオビジョン
インターフェース
・モード設定関数
・座標系設定関数・キャリブレーション
・etc…

画像データ+Kp

トルク

TDs

アクチュエータ
コンポーネント

制御器
コンポーネント

コンフィギュレーション

定義可能なインターフェースを持つ内部の詳細な機能にアクセス
パラメータ取得・設定
モード切替
etc…

位置

1
TI s

データ指向通信機能

サービスポート
–––

サーボの例

⽬標値

制御RTC

Error

データ指向ポート
連続的なデータの送受信
動的な接続・切断

3Dデプス
データステレオビジョン
コンポーネント

データポート•••パラメータを保持する仕組み
いくつかのセットを保持可能
実⾏時に動的に変更可能
セット名

名前

セット名

名前

複数のセットを動作時に切り替えて使⽤可能

値

値

サービス指向相互作⽤機能
13

ミドルウェアを利⽤した開発の利点
Point Cloud

3Dカメラピッキングロボットの構築例※図は実際の構成ではありません。

θ1

θ2

ℓ2

ℓ1 ( x , y )把持戦略

プランニング

ロボットアーム制御

既存のものが再利⽤可能

ライブラリなどを利⽤して⾃作

逆運動学計算グリッパ制御ミドルウェアを利⽤すると、既存のモジュールが利⽤できる開発するときに新規に作らなければならない部分は少なくて済む

新規開発が必要14

RTミドルウエアによる分散システム
RTMにより、ネットワーク上に分散するRTCをOS・⾔語の壁を越えて接続することができる。
ネットワーク

ロボットB

RTC

RTC

RTC

(C++)

(C++)

ロボットC

RTC

(C++)

RTC

(C++)

(C++)

VxWorks

QNX

Real-time Linux

RTM

RTM

RTM

アプリケーション

RTC(Python)

RTM

uITRON

RTC

(C++)

RTM

Windows(Python)

RTC

RTM

Linux
RTC
(Java)

ロボットA

RTC
(C++)

RTC
(Java)

操作デバイス

RTC
(C++)

RTC
(C++)

RTC同⼠の接続は、プログラム実⾏中に動的に⾏うことが出来る。

センサ
15

RTミドルウエアの⽬的

モジュール化による問題解決•••

仕様の明確化コストの問題最新技術を容易に利⽤可能
誰でもロボットが作れる

A社製移動ベース

B社製アーム技術の問題

ニーズの問題
多様なユーザ最新の理論・アルゴリズム

C社製センサ・・・仕様︕

︕

RTコンポーネント化

モジュール化・再利⽤ロボットの低コスト化︕

︕

システム開発者

最新技術を利⽤可能

カスタマイズが容易に多様なニーズに対応

ロボットシステムインテグレーションによるイノベーション
16実⽤例・製品化例

HRPシリーズ: 川⽥⼯業、AIST

S-ONE︓SCHAFTDAQ-Middleware: KEK/J-PARC

KEK: High Energy Accelerator Research Organization
J-PARC: Japan Proton Accelerator Research Complex

災害対応ロボット操縦シミュレータ︓
NEDO/千葉⼯⼤

HIRO, NEXTAGE open: Kawada Robotics

ビュートローバーRTC/RTC-BT(VSTONE)

OROCHI（アールティ）

RAPUDA︓Life Robotics

新⽇本電⼯他: Mobile SEM

17

RTミドルウェアは国際標準
OMG国際標準

標準化組織で⼿続きに沿って策定→ 1組織では勝⼿に改変できない安⼼感→ 多くの互換実装ができつつある→ 競争と相互運⽤性が促進される

RTミドルウエア互換実装は10種類以上

標準化履歴•名称ベンダ特徴

互換性

OpenRTM-aist

産総研

NEDO PJで開発。参照実装。

---HRTMホンダ

アシモはHRTMへ移⾏中◎

OpenRTM.NETセック.NET(C#,VB,C++/CLI, F#, etc..)◎

RTM onAndroid

セック

Android版RTミドルウエア◎

RTC-Lite

産総研

PIC, dsPIC上の実装〇

Mini/MicorRTCSEC

NEDOオープンイノベーションPJで開発〇

RTMSafety

SEC/AISTNEDO知能化PJで開発・機能安全認
証取得〇

RTC CANOpen

SIT, CiACAN業界RTM標準

〇

PALRO

富⼠ソフト

⼩型ヒューマノイドのためのC++
PSM 実装×•2005年9⽉
Request for Proposal 発⾏(標準化開始)
2006年9⽉•2008年4⽉•2012年9⽉

OPRoS

ETRI

韓国国家プロジェクトでの実装

×•2015年9⽉

GostaiRTCGOSTAI,
THALES

ロボット⾔語上で動作するC++ PSM
実装

×

OMGで承認、事実上の国際標準獲得

OMG RTC標準仕様 ver.1.0公式リリース
ver. 1.1改定
FSM4RTC(FSM型RTCとデータポート標準) 採択

特定のベンダが撤退してもユーザは使い続けることが可能
18

ROSとの⽐較、動向

19

ロボットOS︓現状と課題

ロボットOS勢⼒図

韓国
OPRoS

YARP
RT
ミドルウエア（RTM）

欧州発ミドルウエア
OROCOS

⽶国ベンチャー Willow Garage発
2007年から開発
ロボットを配布するプログラム等により⼀気にユーザを獲得
現在はOSRF財団が管理

⽇本発ロボットOS（NEDO・産総研）
2002年からNEDO PJで開発
OMG国際標準を獲得し10以上の実装が様々なベンダからリリース

課題〇ROSはデファクト標準であり，OSRFにより仕様を変えられてしまう恐れあり。
⇒ バージョンが上がるごとに，ユーザが振り回される⇒ ROSは技術的に古く，次期バージョンアップで⼤幅に変わる可能性あり。→ROS2へ〇国内ユーザと海外ユーザの利⽤OSの差（国内︓Windows, ITRON, 海外︓Linux）⇒ Linuxのみ対応するROSと，様々なOSに対応するRTMの利⽤⽐率は半々程度〇国内でのソフトウエアの再利⽤が進んでいない。
⇒ オープンソース⽂化の⽋如。
⇒ NEDO知能化PJで蓄積したソフトウエア資産も再利⽤が進んでいない。
20

ROSとRTM
ROSの特⻑

• UNIX⽂化に根差した設計思想

OpenRTMの特⻑•

対応OS・⾔語の種類が多い•

⽇本国内がメイン•

GUIツールがあるので初⼼者向き•仕様が標準化されている• ユーザ数が多い• メーリングリストなどの議論がオープンで活発•

コンポーネントモデルが明確• 英語のドキュメントが豊富•

IEC61508機能安全認証取得– Windows等Linux以外は原則サポートしない– ROS2ではLinux以外もサポート• 独⾃のパッケージ管理システ
ムを持つ• ノード（コンポーネント）の質、量ともに豊富– OSRFが直接品質を管理しているノードが多数– コアライブラリの仕様が固定しにくい– Windows、UNIX、uITRON、TKernel、VxWorks、QNX– Windowsでネイティブ動作する– ⽇本語ドキュメント・ML・講習会– ユーザ数が少ない– コマンドラインツールの種類は少ない– rtshell– OMGに参加すればだれでも変更可– サードパーティー実装が作りやすい– すでに10程度の実装あり– オブジェクト指向、UML・SysMLとの相性が良い– モデルベース開発– RTMSafety

21

ROS1→ROS2へ• NASAの仕事を請け負った時に、独⾃形式のROS
messageはNASAでは使えないから、プロトタイプをROSで実装後にすべて作り直した• NASAでは何らかの標準に準拠したものでないと使えない。その時は結局DDSを使⽤した。
• それ以外にもROS1では、1ノード1プロセス、コンポーネントモデルがないので、モデルベース開発にならない、ROS masterがSPOFになっているなど不都合な点が多々ある• それ故、ROS2ではこれらの問題点を克服するため全く新しい実装にする予定。

22ROS2• 最新版︓2016年12⽉ Beta版リリース• 標準ミドルウェアの利⽤– ⾃前主義からの脱却（NASAや商⽤システムでは何らかの標準準拠が求められるため）– 通信部分はOMG標準のDDS（Data Distribution Service、OMG規格）を採⽤• コンポーネントモデルを導⼊することにした– RTMのように組み込み、性能を意識したアーキテクチャへ• 対応OSの拡⼤– これまでは、ある特定のLinux（Ubuntu Linux）のみ– ROS2では、Windows、Macにも対応– ただし、リアルタイムOS（VxWorks、QNX等）への対応はな
し

OMGによる通信規格DDSを採⽤
航空・軍事・医療・鉄道などで実績のある通信ミドルウエア標準

http://design.ros2.org/articles/ros_middleware_interface.html
23

OpenRTM-aist-1.2の新機能と今後の開発ロードマップ

24OpenRTM-aist-1.2• 2019年3⽉15⽇リリース– OpenRTM-aist (C++, Python, Java)• ミドルウェアライブラリ– OpenRTP-aist (RTSystemEditor, RTCBuilder)• RTC開発ツール、RTシステム開発ツール• 新機能等– マネージャ機能の充実– データポートのパフォーマンス向上– CORBA呼び出し時のパフォーマンス向上（omniidl shortcut)– RTCの命名・指定⽅法の拡張– ログ収集機構の拡張– コード品質の向上（MISRA C++相当）– 雑多なバグフィックス

25ポート性能向上（Direct接続）
Direct接続
プロセス境界
OutPortRTC

write()

マーシャリング

InPort

通常の“corba_cdr”
転送時の経路

RTC

アンマーシャリング

データポート変数

read()
データポート変数

マーシャリング無し
リングバッファアンマーシャリング無し
リングバッファ“direct”転送時の経路

同一アドレス空間

バッファ、マーシャリングをバイパスして直接変数領域でデータを受け渡し（変数間コピーなので⾼速）
パフォーマンスを気にせずモジュール分割可能
26

ポート性能向上（共有メモリ接続）
共有メモリ接続
プロセス境界プロセス境界
OutPortRTC

write()

マーシャリング

データポート変数

InPort

通常の“corba_cdr”
転送時の経路

RTC

アンマーシャリング

CORBA通信による転送通知

リングバッファread()
データポート変数

リングバッファアンマーシャリング

マーシャリング

共有メモリ転送時の経路
共有メモリ領域

プロセス境界をまたいで共有メモリでデータを転送
⾔語が異なるRTC同⼠でも⾼速通信可能
27

トピック接続
トピック接続

ネームサーバ

topic_name
RTC A
port_out
RTC B
port_in③ ポートを接続① トピック登録② トピック登録(トピック名+RTC名+ポート名)(トピック名+RTC名+ポート名)

RTC A

RTC B
④ 接続確立相⼿のポートを特定せずに、同⼀のトピック（ラベル）を持つポート間で⾃動接続を⾏う機能。
※ROS等のpub/sub通信と同等の⽅式。
28

マネージャ(rtcd)機能の拡張
ポート番号固定:2810番

RTC問い合わせRTC起動依頼

Master manager

Slave manager登録
RTC登録Slave manager起動
RTC起動依頼
RTC検索

ポート番号任意

ポート番号任意

Slave manager
RTC

RTC

ポート番号任意

Slave manager

Slave manager

RTC

RTC

RTC

コンポーネントの起動~終了（ライフサイクル）をリモートからすべて制御可能に。多数のノードを統⼀的に管理可能となり、運⽤時の効率向上が図れる。
別のノード（PC）上のRTCをリモート起動し、システム全体を⼀括⽴ち上げ可能。
29

RTSystemEditorの拡張
ネームサービスビュー••

これまでの、「ネームサービス起動→システム構築」の⼿順をRTSystemEditor内で完結可能

マネージャ起動ボタン
ネームサーバ起動ボタン

実⾏コンテキスト連携タブ

EC連携線表⽰

Participant ECタブ

Owned ECタブ••

RTC間の実⾏コンテキストの連携が可能に
複合コンポーネント化しなくても同期実⾏可能

これまで︓実⾏コンテキ
スト(EC)は起動時に設定するのみ
今回の拡張︓起動後もECの操作（他のRTCをア
タッチ、EC毎にActivate/Deactivate等設定が可能にRTCロジックの実⾏⽅法を柔軟に選択可能に
30

その他の変更• Windows– VS2017対応 (1.2.1ではVS2019対応）– VCバージョンチェンジャーツール提供– Rtshell 2.4.0を同梱– 32bit、64bit同時インストール可能– 同梱OpenCV 3.4へ変更– 同梱JRE OpenJDK 1.8へ変更– CMakeによるmsiパッケージ作成可能• Linux– OpenRTM-aist-Java, OpenRTPパッケージ提供– インストールスクリプト1本化（C++,Python, Java, ツール）
– CMakeによる deb/rpmパッケージ作成が可能– Ubuntu (14.04, 16.04, 18.04, 18.10)– Debian (近々配布予定)– Fedora (近々配布予定)– Raspbian/ARM64(JETSON) (近々配布予定)
31

2.0に向けて• 新標準FSM4RTCの正式サポート– 状態遷移型RTCの枠組み導⼊• ROSやその他のミドルウェアとの連携機能– 要望多数– データポート相互接続

Version 2.0
2019年度末• ROS1/ROS2実装済み→github– 運⽤時互換性等• コンポーネント起動⽅向等• 開発効率向上のための機能– パッケージ化– ⾃動ビルド・CI

Version 2.1
2020年度中• 運⽤効率向上ための機能– ロギング機能、構成管理機能– RTC合成、組み込み機能• サードパーティーRTC・ツール取り込み• ROSノードの取り込み
32

RTミドルウェアとコミュニティー

33

プロジェクトページ• ユーザが⾃分の作品を登録• 他のユーザの作ったRTCを探すことができる
タイプ

登録数

RTコンポーネント群

287

RTミドルウエア

14

ツール

19

仕様・文書

4

ハードウエア

28
34

••
•
•
•

サマーキャンプ

毎年夏に1週間開催
今年︓7⽉29⽇〜8⽉2⽇
募集⼈数︓20名
場所︓産総研つくばセンター
座学と実習を1週間⾏い、最後にそれぞれが成果を発表• 産総研内のさくら館に宿泊しながら夜通し︖コーディングを⾏う︕

35

RTミドルウエアコンテスト• SICE SI （計測⾃動制御学会 システムインテグレーション部⾨講演会 ）のセッションとして開催
–
––
–
–
–

各種奨励賞・審査基準開⽰:6⽉頃
エントリー〆切︓8⽉9⽇(SI2019締切）
講演原稿〆切︓9⽉24⽇(SI予稿締切）
ソフトウエア登録︓10⽉中旬
オンライン審査︓11⽉下旬〜
発表・授賞式︓12⽉ごろ• 2018年度実績– 応募数︓10件– 計測⾃動制御学会学会RTミドルウエア賞（副賞10万円）– 奨励賞（賞品協賛）︓2件– 奨励賞（団体協賛）︓9件– 奨励賞（個⼈協賛）︓8件• 詳細はWebページ︓ openrtm.org– コミュニティー→イベント をご覧ください36

提⾔• ⾃前主義はやめよう︕︕– 書きたてのコードより、いろいろな⼈に何万回も実⾏されたコードのほうが動くコードである︕︕– ⾃分にとって本質的でない部分は任せて、本当にやりたい部分・やるべき部分のコードを書こう︕︕– 誰かがリリースしたプログラムは⼀度は動いたことがあるプログラムである︕︕– ⼈のコードを読むのが⾯倒だからと捨ててしまうのはもったいない︕︕• オープンソースにコミットしよう︕︕– 臆せずMLやフォーラムで質問しよう︕︕– どんなに初歩的な質問でも他の⼈にとっては価値ある情報である。
– 要望を積極的にあげよう︕︕– できればデバッグしてパッチを送ろう︕
37

まとめ• RTミドルウエアの概要– 基本概念• ROSとの⽐較、動向• OpenRTM-aist-1.2の新機能• 2.0以降の開発ロードマップ• RTMコミュニティー活動38本⽇の実習の流れ

RTM講習会はこの部屋のままで

13:00 -14:30
RTコンポーネント作成

14:30 -15:30
RTシステム構築

15:30 -17:00
RTM応⽤実習

RasPiマウス制御RTC開発実習

14:45 -17:00
プログラミング実習

14:45-17:00
LibreOfficeを利⽤したロボット制御
プログラミング実習39