Kp - OpenRTM-aist

情報処理学会連続セミナー2009
「進化する組込みシステム技術」
2nd 組込みソフトウエアプラットフォーム
RTミドルウエア
-TOPPERSによる組込み機器への展開-
安藤慶昭
独立行政法人産業技術総合研究所
知能システム研究部門
産総研
• 独立行政法人産業技術総合研究所
– 「ライフサイエンス」「情報・通信」「環境・エネルギー」「ナノテク・材料・製造」
「地質・海洋」「標準・計測」の6分野
– 研究者: 約2000名
• 知能システム研究部門
– 「統合知能」 「タスク・ビジョン」 「ヒューマノイド」「インタラクティブモデリング」「ディペン
ダブルシステム」「サービスロボティクス」「フィールドロボティクス」の7グループ、「ソフト
ウエアプラットフォーム研究班」、「AIST-CNRSロボット工学連携研究体」
– 研究者: 約60名(全体約150名)
2
アナリシスからシンセシスへ
scientific
principals
robot
human being
animal
insect
RT based system
analysis
nature
synthesis
integration
artifact
3
RTとは?
• RT = Robot Technology
cf. IT
– ≠Real-time
– 単体のロボットだけでなく、さまざまなロボット技術に基づく機能要素
をも含む (センサ、アクチュエータ, 制御スキーム、アルゴリズム、
etc….)
産総研版RTミドルウエア
+
+
+
+
OpenRTM-aist
+
RT-Middleware
• RT-Middleware (RTM)
– RT要素のインテグレーションのためのミドルウエア
• RT-Component (RTC)
– RT-Middlewareにおけるソフトウエアの基本単位
4
体系的システム開発
開発者の経験やノウハウに依存したロボットシステム開発
体系的システムデザイン: 分析、設計、実装の一連の流れ
5
RTミドルウエアプロジェクト
NEDO 21世紀ロボットチャレンジプログラム(2002-2004年度)
「ロボット機能発現のために必要な要素技術開発」
• RT分野のアプリケーション全体に広く共通的に使わ
れる機能およびRT要素の部品化(モジュール化)の
研究開発
• 分散オブジェクト指向システムのミドルウェアである
CORBAをベースとして行う。
• RT要素の分類を行い、モジュール化の形態、必要
な機能、課題、インタフェース仕様などを明確にする。
14年度成果報告書より
6
RTミドルウエアの目的
モジュール化による問題解決
•
•
•
仕様の明確化
コストの問題
最新技術を容易に利用可能
誰でもロボットが作れる
A社製移動ベース
B社製アーム
技術の問題
ニーズの問題
多様なユーザ
最新の理論・
アルゴリズム
C社製センサ・・・
仕様
!
!
RTコンポーネント化
モジュール化・再利用
ロボットの低コスト化
!
!
システム開発者
最新技術を利用可能
カスタマイズが容易に
多様なニーズに対応
ロボットシステムインテグレーションによるイノベーション
7
概要
•
•
•
•
•
•
RTとは?
RTミドルウエア:OpenRTM-aist
次世代ロボット知能化技術開発プロジェクト
RTミドルウエアと組込みシステム
標準化
終わりに
8
RT-Middleware
OpenRTM-aist
9
従来のシステムでは…
Joystick
software
Joystick
Robot Arm
Control software
互換性のあるインターフェース同士は接続可能
Robot Arm
10
従来のシステムでは…
Humanoid’s Arm
Control software
Humanoid’s Arm
Joystick
software
Joystick
ロボットによって、インターフェースは色々
互換性が無ければつながらない
Robot Arm
Control software
Robot Arm
11
RTミドルウエアでは…
RTミドルウエアは別々に作られた
ソフトウエアモジュール同士を繋ぐ
ための共通インターフェース
を提供する
Arm A
Control software
compatible
arm interfaces
Humanoid’s Arm
Joystick
software
Joystick
ソフトウエアの再利用性の向上
RTシステム構築が容易になる
Arm B
Control software
Robot Arm
12
RTM、RTCとは?
ソフトウエアアーキテクチャの違い
RTC・アプリ
アプリケーション
アプリケーション
ライブラリ
ライブラリ
RTC
RTC
オブジェクト オブジェクト
RTM
ミドルウエア(CORBA)
ミドルウエア(CORBA)
OS
OS
OS
従来ソフトウエアから分散オブジェクトへ
分散オブジェクトからRTCへ
•
•
•
オブジェクト指向開発
言語・OSの壁を越えて利用できる
– インターフェースをIDLで定義
– 各言語へ自動変換
– OS、アーキテクチャの違いを吸収
•
–
–
–
•
ネットワーク透過に利用できる
– 分散システムを容易に構築可能
インターフェースがきちんと決まっている
コンポーネントのメタ情報を取得すること
ができる
–
•
IDLで定義された標準インターフェース
呼び出しに対する振る舞いが決まってい
る(OMG RTC 標準仕様)
同じ部品として扱える
動的な接続や構成の変更ができる
ロボットシステムに特有な機能を提供
–
後述
13
ミドルウエア、コンポーネント、etc…
• ミドルウエア
– OSとアプリケーション層の中間に位置し、特定の用途に対して利便性、抽象
化向上のために種々の機能を提供するソフトウエア
– 例:RDBMS、ORB等。定義は結構曖昧
• 分散オブジェクト(ミドルウエア)
– 分散環境において、リモートのオブジェクトに対して透過的アクセスを提供す
る仕組み
– 例:CORBA、Java RMI、DCOM等
• コンポーネント
– 再利用可能なソフトウエアの断片(例えばモジュール)であり、内部の詳細機
能にアクセスするための(シンタクス・セマンティクスともにきちんと定義され
た)インターフェースセットをもち、外部に対してはそのインターフェースを介し
てある種の機能を提供するモジュール。
• CBSD(Component Based Software Development)
– ソフトウエア・システムを構築する際の基本構成要素をコンポーネントとして
構成するソフトウエア開発手法
14
分散オブジェクトとは?
• システムの機能分割と分散配置
• ネットワーク透過なオブジェクト
• コンポーネント化と再利用
プロキシ
オブジェクト
オブジェクト指向
+
ネットワーク 分散オブジェクト
•
アプリA
アプリB
アプリC
ミドルウエア
代表例
–
–
–
–
–
CORBA (Common Object Request Broker
Architecture)
CCM (CORBA Component Model)
JavaRMI (Java Remote Method Invocation)
EJB (Enterprise Java Beans)
DCOM, HORB etc…
計算機A 計算機B 計算機C 計算機D
OS A
OS B
OS C
OS D
15
CORBAの例
<<IDL 定義>>
interface MobileRobot {
void gotoPos(in position pos);
}
<<クライアント>>
MobileRobot_var robot;
本題にたどり着くまでが面倒
robot = {何らかの方法でオブジェクト参
<<サーバ実装>>
class MobileRobot_Impl
: public virtual POA_MobileRobot,
public virtual
PortableServer::RefCountServant
Base
{
void gotoPos(position pos) {
MobileRobot::gotoPos の実装
}
}
照を取得}
// robot = プロキシオブジェクト
robot->gotoPos(pos);
サーバスケルトン
IDL
サーバ
RTミドルウエアが
全部面倒みます!!メソッド
object
gotoPos()
呼び出し
クライアントスタブ
クライアント
proxy
object
call
16
RTミドルウエアとRTコンポーネント
ロジック
・デバイス制御
・制御アルゴリズム
・アプリケーション
etc…
RT
コンポーネント
フレームワーク
RT
コンポーネント
ロジックを箱(フレームワーク)に入れたもの=RTコンポーネント(RTC)
RTC
RTC
RTC
RTC
RTC
RTC
RTC
RTC
RTミドルウエア
RTCの実行環境(OSのようなもの)=RTミドルウエア(RTM)
※RTCはネットワーク上に分散可能
17
RTコンポーネントアーキテクチャ
•
メタ情報取得
– プロファイル
– どんなコンポーネントか?
SDO Interfaces
RTC Interfaces
RTCEx Interfaces
RTComponent Service
RTCS Consumer
RTComponent
Consumer
Service
Proxy
provide
Consumer
Proxy
Activity
Service
provide
use
Architecture
of RT component
State Machine
OutPort0
InPort 0
Buffer
InPort n
put
Buffer
get
Buffer
OutPort n
Buffer
reply
InPort
put
get, subscribe
reply
push
OutPort
メタ情報取得
•
パラメータ
メタ情報
– コンポーネントのモデル≒仕様
•
RTCのことはRTCに聞けばわかる
(イントロスペクション機能)
–
–
–
–
–
–
•
コンポーネントの名前・タイプ
ポートの数・種類
ポートのインターフェース情報
ポート毎のプロパティ
パラメータ情報
実行コンテキスト情報
システムの動的構成に不可欠
A
B
C
名前
値
port0
port4
port1
port5
port2
D
E
port6
Periodic実行
port3
port7
実行コンテキスト
コンポーネントメタ情報の例
コンポーネント名
MyManipulator0
タイプ名
Periodic実行型
port0
Provide: A, Required: B
port1
Provide: C
Port2
DataPort: InPort, velocity, float x6
Port3
DataPort: InPort, position, float x6
Port4
Provide: D
Port5
Required: E
Port6
DataPort: OutPort, status int x1
Port7
DataPort: OutPort, velocity, float x6
実行コンテキスト
周期: 10ms
パラメータ
gain0(float x6), flag(int x1), dev_file(string)
RTコンポーネントアーキテクチャ
•
メタ情報取得
– プロファイル
– どんなコンポーネントか?
•
アクティビティ
– ユーザ定義ロジックの実行
SDO Interfaces
RTC Interfaces
RTCEx Interfaces
RTComponent Service
RTCS Consumer
RTComponent
Consumer
Service
Proxy
provide
Consumer
Proxy
Activity
Service
provide
use
Architecture
of RT component
State Machine
OutPort0
InPort 0
Buffer
InPort n
put
Buffer
get
Buffer
OutPort n
Buffer
reply
InPort
put
get, subscribe
reply
push
OutPort
アクティビティ
• ロジックを実行する部分
• 共通の状態遷移を持つ
–
–
–
–
初期化
非アクティブ(OFF状態)
アクティブ状態(ON状態)
エラー(エラー状態)
アームコンポーネントの例
デバイス
初期化処理
アーム
停止
Init
Inactive
センサRTC
(センサからデータを読む)
Active
アーム
サーボON
Error
アーム
緊急停止
制御RTC
(制御出力計算)
アクチュエータRTC
(アクチュエータを駆動)
実行コンテキスト
別々に作成された複数のコンポーネントを
シーケンシャルにリアルタイム実行し
制御等を行うことも可能
→複合コンポーネント
RTコンポーネントアーキテクチャ
•
メタ情報取得
– プロファイル
– どんなコンポーネントか?
•
アクティビティ
– ユーザ定義ロジックの実行
•
データポート
SDO Interfaces
– Data Centric な相互作用
RTC Interfaces
RTCEx Interfaces
RTComponent Service
RTCS Consumer
RTComponent
Consumer
Service
Proxy
provide
Consumer
Proxy
Activity
Service
provide
use
Architecture
of RT component
State Machine
OutPort0
InPort 0
Buffer
InPort n
put
データポート
get
Buffer
OutPort n
Buffer
reply
InPort
put
Buffer
get, subscribe
reply
push
OutPort
データポート
•
•
データ指向ポート
連続的なデータの送受信
サーボの例
データポート
データの流れ
– 位置制御サーボ
目標値
• 位置・電圧値
位置
電圧
– 画像処理
-
• 画像データ
• 処理結果
•
•
•
アクティビティ
+
Kp
T Ds
主にロボットの下位レベル処理に利用
同じデータ型のポート同士接続可能
動的に接続・切断可能
コンポーネントA
1
TI s
エンコーダ
コンポーネント
位置
制御器
コ ンポーネント
画像処理の例
画像
データ
コンポーネントB
処理画像
データ
アクティビティ
データ生成
データ取得
処理
データ変数
処理
画像処理
コンポーネント
カメラ
コ ンポーネント
カメラ
コ ンポーネント
データが自動的に伝送される
位置データ
3Dデプスデータ
データ変数
データポート
アクチュエータ
コンポーネント
画像
データ
ステレオビジョン
コンポーネント
RTコンポーネントアーキテクチャ
•
メタ情報取得
– プロファイル
– どんなコンポーネントか?
•
アクティビティ
– ユーザ定義ロジックの実行
•
データポート
SDO Interfaces
– Data Centric な相互作用
•
サービスポート
RTC Interfaces
RTCEx Interfaces
RTComponent Service
RTCS Consumer
– request/response型相互作用
RTComponent
Service
Activity
サービスポート
Service
Consumer
Proxy
provide
Consumer
Proxy
provide
use
Architecture
of RT component
State Machine
OutPort0
InPort 0
Buffer
InPort n
put
データポート
get
Buffer
OutPort n
Buffer
reply
InPort
put
Buffer
get, subscribe
reply
push
OutPort
サービスポート
•
任意に定義可能なインターフェースを
持つポート
– コマンド・関数を自由に追加
– 他のコンポーネントからアクセス可能
– (本当は標準化したい)
•
内部の詳細な機能にアクセス
–
–
–
–
パラメータ取得・設定
モード切替
処理の依頼と結果取得
etc…
コンポーネントB
コンポーネントA
アクティビティ
サービス
プロキシ
関数呼び出し
サービスポート
アームインターフェース
サービス
インターフェース
の実体
実際の処理は
ここで行われる
サービスポート
・モード設定関数
・座標系設定関数
・制御パラメータ設定関数
・ヤコビ取得関数
・ステータス取得関数
・etc…
他のコンポーネント・
上位アプリケーションから利用
サービス提供者
(プロバイダ)
サービス利用者
(コンシューマ)
アームの例
手先位置・
速度データ
アーム
コンポーネント
データポート
ステレオビジョンの例
ステレオビジョン
インターフェース
・モード設定関数
・座標系設定関数
・キャリブレーション
- カメラパラメータ設定関数
- 実行関数
- パラメータ取得関数
・etc…
サービスポート
3Dデプス
データ
他のコンポーネント・
上位アプリケーションから利用
画像
データ
ステレオビジョン
コンポーネント
データポート
RTコンポーネントアーキテクチャ
•
メタ情報取得
– プロファイル
– どんなコンポーネントか?
•
アクティビティ
– ユーザ定義ロジックの実行
•
データポート
SDO Interfaces
– Data Centric な相互作用
•
サービスポート
RTC Interfaces
RTCEx Interfaces
RTComponent Service
RTCS Consumer
– request/response型相互作用
•
RTComponent
Service
Activity
サービスポート
Service
Consumer
コンフィギュレーション
Proxy
– ユーザ定義の設定
provide
Consumer
Proxy
provide
use
Architecture
of RT component
State Machine
OutPort0
InPort 0
Buffer
InPort n
put
データポート
get
Buffer
OutPort n
Buffer
reply
InPort
put
Buffer
get, subscribe
reply
push
OutPort
コンフィギュレーション
• コンフィギュレーション
PIDコントローラの例
– パラメータを管理
– コンフィギュレーションセット
Kp
リミッタ
• セット名、名前:値のリスト
• 複数のセットを保持
• セットを切替可能
-
Ki
s
+
Kds
PID制御コンポーネント
複数のセットを
動作時に
切り替えて
使用可能
セット名
名前
値
セット名
名前
値
modeA
名前
値
Kp
0.6
Ki
0.01
Kd
0.4
Inmax
5.0
Inmin
-5.0
modeB
名前
値
Kp
0.8
Ki
0.0
Kd
0.01
Inmax
10.0
Inmin
-10.0
modeC
名前
値
Kp
0.3
Ki
0.1
Kd
0.31
Inmax
1.0
Inmin
-1.0
制御対象やモードに応じて複数のPIDゲインおよび
入力リミッタ値を切り替えて使用することができる。
動作中の切り替えも可能。
RTCの分割と連携
ロボット体内のコンポーネントによる構成例
画像データ
顔位置
問 合せ
カメラ
コ ンポーネント
画像データ
データ・コマンドの流れ
顔認識
コ ンポーネント
人物データ
表情データ
ステレオビジョン
コ ンポーネント
カメラ
コ ンポーネント
ポート
ジェスチャ
軌 道データ
カメラコントロール
音声データ
音声認識
コ ンポーネント
対話
コ ンポーネント
文字データ
頭・腕駆動
コ ンポーネント
音声合成
コ ンポーネント
文字データ
マイク
コ ンポーネント
(モジュール)情報の隠蔽と公開のルールが重要
RTミドルウエアによる分散システム
RTMにより、
ネットワーク上に
分散するRTCを
OS・言語の壁を
越えて接続する
ことができる。
ネットワーク
ロボットA
ロボットB
RTC RTC
RTM
VxWorks
RTC RTC
RTM
FreeBSD
Linux
RTM
RTC RTC
Windows
RTM
RTC RTC
uITRON
RTM
RTC RTC
アプリケーション
操作デバイス
センサ
ロボットC
RTC RTC RTC
RTM
ARTLinux
RTC同士の接続
は、プログラム
実行中に動的に
行うことが出来る。
OpenRTM-aist
• コンポーネントフレームワーク + ミドルウエアライブラリ
• コンポーネントインターフェース:
– OMG Robotic Technology Component Specification 準拠
• OS
– 公式:FreeBSD, Linux (Fedora, Debian, Ubuntu, Vine, Scientific), Windows
– 非公式:Mac OS X, uITRON, T-Kernel, VxWorks
• 言語:
– C++, Python, Java
– .NET (implemented by SEC)
• CPU アーキテクチャ (動作実績):
– i386, ARM9, PPC, SH4
– PIC, dsPIC, H8 (RTC-Lite)
• ツール (Eclipse プラグイン)
– テンプレートソースジェネレータ: rtc-template、RTCBUilder
– システムインテグレーションツール: RtcLink、RTSystemEditor
– その他
• Pattern weaver for RT-Middleware (株式会社テクノロジックアートより発売中)
30
ツールチェーン
RTCBuilder
RTコンポーネント設計・コード生成
RTSystemEditor
RTCを組み合わせてシステムを設計
RTシステムを簡単に設計・操作可能
RTC・RTM統合開発環境の整備
オンライン編集機能
コンポーネント設計をすばやく簡単に
C++、Java、Python、C#のコードを自動生成
RTC設計・実装・デバッグ、RTMによるインテグレーション・デバッグまでを
オフライン編集機能
一貫して行うことができる統合開発環境をEclipse上に構築
31
• プロジェクト
RTMを取り巻く状況
– NEDO:オープンイノベーションプロジェクト (2008-2011)
– 経産省・NEDO:次世代ロボット知能化技術開発プロジェクト (20072011)
– 産総研:産総研イニシアチブ (2006-2008)
– 文科省:分散コンポーネント型ロボットシミュレータ (2005-2007)
– NEDO:次世代ロボット共通基盤開発プロジェクト (2005-2007)
– 科研費:ロボットシステムモデリングと分散ミドルウエア・アーキテクチャに
関する研究 (2005-2006)
– NEDO:21世紀ロボットチャレンジプログラム(2002-2004)
– 等
• 国際標準
– OMG Robotic Technology Component Specification
• 受賞
– 今年のロボット大賞2007・部品ソフトウエア部門優秀賞
– 2007年度計測自動制御学会・システムインテグレーション部門賞・技術業
績賞
– 第20回日本ロボット学会研究奨励賞
32
RTミドルウエアの広がり
OpenRTM-aist
0.2.0 リリース
OMG RTC仕様
初期草案提出
OMG RTC
標準仕様採択
OpenRTM-aist
0.4.0リリース
OMG RTC Spec.
公式リリース
年度
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
NEDO RTミドルウエア
2010年
OpenRTM-aist
1.0リリース
科研費 若手(B)
科振費 分散コンポーネントシミュレータ
NEDO 次世代ロボット共通基盤開発
今年のロボット大賞2007
優秀賞受賞
工業標準部 標準基盤研究
科振費 環境と作業構造のユニバーサルデザイン
産総研イニシアチブ UCROA
NEDO 戦略的先端ロボット要素技術開発
さまざまなプロジェクトで
標準ソフトウエアプラットフォーム
として採用されている
経産省・NEDO次世代ロボット知能化技術開発プロジェクト
NEDOオープンイノベーション促進プロジェクト
NEDO生活支援ロボット実用化プロジェクト?
RTミドルウエア開発体制
NEDO知能化PJ
NEDOオープンイノベーションPJ
OpenRTM-aist
ビジネス推進協議会
ML
講習会
コンテスト
C++
Python
Java
利用
産総研重点化予算
Web
派生
組込みRTM
ツール
RTミドルウエア
RTCBuilder
RTSystemEditor
準拠
利用
標準化
仕様記述方式
RTCProfile
RTSProfile
RTC-Lite
uITRON版
関連
RTC標準化
D&C標準化
産総研標準基盤研究
34
次世代ロボット知能化技術
開発プロジェクト
35
次世代ロボット知能化技術
開発プロジェクト
• 平成19年度(12月)~平成23年度 (5年間)
• 平成19年度予算:19億
– 5年間総額で70億程度になる見込み?
• PL:東大 佐藤知正教授
• 研究テーマ
– プラットフォーム、作業知能、移動知能、コミュニ
ケーション知能 7つのテーマ
• 研究グループ
– 15グループ
36
プロジェクト参加組織
• ①ソフトウエアプラットフォーム
– 「ロボット知能ソフトウェアプラット
フォームの研究開発」
• 産総研
• NEC
• セック
• マエカワ
• ゼネラルロボティックス
• 東大
• (社)日本ロボット工業会
• ②作業知能(生産分野)の開発
– 「世界標準を目指したロボットセル生産用
知能ハンドモジュール群とマニュアル作業
激減知能モジュール群の開発と検証」
•
IDEC株式会社
– 「作業知能(生産分野)の開発(物理的接
触を伴う作業のための作業知能モジュー
ル群の研究開発)」
• 東北大学
• ③作業知能(社会・生活分野)の開発
– 「施設内生活支援ロボット知能の研究開
発」
• 安川電機、九大、九工大、産総研
– 「ロバストに作業を実行するための作業知
能モジュール群の開発」
• 東芝、首都大、東大
37
プロジェクト参加組織
•
④移動知能(サービス産業分野)の開発
•
– 「移動知能(サービス産業分野)の研究開
発」
•
– 「搭乗用移動知能の構築を簡便にする
モジュール群の開発 ~ 脚・車輪ロボッ
ト:環境インフラと連動するパーソナル
モビリティ ~」
富士通、豊橋技科大、セック、東大
– 「移動知能(サービス産業分野)の研究開
発」
•
•
•
•
⑤高速移動知能(公共空間分野)の開発
•
SFC、アイシン、自動車研
芝浦工大、千葉工大、NECソフト
– 「自律と操縦が融合したインテリジェント
立ち乗り電動モビリティシステム」
筑波大、富士ソフト
– 「高速移動知能(公共空間分野)の研究
開発」
⑥移動知能(社会・生活分野)の開発
•
日本SGI、東北大、レスキューシステム研究機
構、電通大
⑦コミュニケーション知能(社会・生活
分野)の開発
– 「コミュニケーション知能の研究開発」
•
NEC
– 「コミュニケーション知能(社会・生活分
野)の研究開発」
•
ATR、阪大、オムロン、ヴイストン、イーガー、
三菱重工
38
ソフトウエアプラットフォーム
「ロボット知能ソフトウェアプラットフォームの研究開発」
• 産総研 • マエカワ
• NEC
• ゼネラルロボティックス
RTC RTC RTC RTC RTC RTC RTC
• セック
• 東大
各コンソーシアムの技術を
• (社)日本ロボット工業会
RTC
RTC
RTC RTC RTC RTC RTC
RTコンポーネントとして集積
RTC
RTC
•RTミドルウエアを基盤とし
たロボットソフトウエア開発
のための統合プラットフォー
RTC RTC
ムを開発
•共通のプラットフォーム上
で、さまざまな知能モジュー
ルを開発する
ソフトウェアプラットフォーム
仕様・記述方式の共通化 ソフトウェアツール群
相互利用・再利用を図る
RTC
RTC
RTCビルダ
RTC 要素機能開発
RTC RTC
RTC
•ハードウェア仕様
•知能モジュール仕様
•ロボットシステム仕様
•作業シナリオ記述
・動作記述
・動作制御記述
RTCデバッガ
RTシステムエディタ
システム開発
ロボット設計支援ツール
OpenRT Platform (OpenRTP)
||
アプリケーション
開発
OpenRTM+ツールチェーン
RTCリポジトリ
シミュレータ
動作設計ツール
シナリオ作成ツール
実時間SW設計ツール
プロジェクト体制
企画調整WG
標準仕様
記述方式
を検討
①プラットフォーム
プラットフォーム
ツール提供
②作業知能(生産分野)
各研究組織は実際に使えるものを
③作業知能(社会・生活分野)
作ることを要求される
ソフトウエア
プラットフォーム
④移動知能(サービス産業分野)
グループ間で
モジュールを
流通させる
⑤高速移動知能(公共空間分野)
各研究組織は開発成果を
⑥移動知能(社会・生活分野)
ハードウエア
事業化することを求められる
プラットフォーム
リファレンス
⑦コミュニケーション知能
ハードウエア上で
(社会・生活分野)
検証
40
OpenRT Platformによる
ロボット開発プロセス
コンポーネント要求仕様
ハードウエア等仕様記述方式
– RTミドルウエアを基盤としたロ
ボット開発プラットフォーム
• システム開発にもモジュー
ル化の原理を採用
– 信頼性
– ロバスト性
– 柔軟性
• プロセス
–
–
–
–
–
設計
コンポーネント開発
システム開発
シナリオ開発
運用
モジュール化された開発プロセス
• OpenRTP
RTコンポーネント
開発プロセス
デザインルール=
結合
コンポーネント仕様記述方式
RTシステム
開発プロセス
デザインルール=
結合
システム仕様記述方式
RTシステムシナリオ
開発プロセス
結合
デザインルール=
シナリオ仕様記述方式
RTシステム
運用プロセス
コンポーネント指向ロボット開発
設計
RT システム開発プロセス
MotionPattern
Hardware
Generator
Design
Tool
Real-Time
ビルダ、開発・デバッグツール
システムエディタ、シミュレータ
デプロイメント
および
Verification
RT- コンポーネント開発
RT- システム開発
コンフィギュレーション
RTCBuilder
RTSystem
Editor
設計
設計
Eclipse
RTC
テスト
Debuger
実装
テスト
OpenHRP3
実装
運用
Scenario
Editor
RT
RT- コンポーネント
パッケージングツール
Ripository
リポジトリ
foo Component
bar Component
開発プロセス間の行き来を容易にし
サービスロボット市場創生のための基盤
開発者の負担を減らす統合開発環境を構築
RTCビルダ
RTコンポーネントビルダ
コンポーネント仕様
<rtcomponent>
<profile>
</profile>
:
<port>
</port>
ウィザード
</rtcomponent>
ソースコード
自動生成
rtc-template
ソースコード
<rtcomponent>
<profile>
</profile>
:
<port>
</port>
</rtcomponent>
開発・実装
・GUIで入力
コンパイル
バイナリ
デバッガへ
編集
RTコンポーネントパッケージ
仕様
ソースコード
バイナリ
RTリポジトリへ
43
知能モジュール仕様記述
雛形ソース生成
知能モジュール仕様
<rtmodule>
<rtcs>
:
</rtcs>
<configuration>
:
</configuration>
:
</rtmodule>
利用
リポジトリ検索
RTコンポーネント検証
利用
生成
RTコンポーネントビルダ
RTコンポーネントデバッガ
生成
利用
システム構成
検証
利用
シミュレーション
ソースコード
ソースコード
ソースコード
inv
main(void)
{{
inv
main(void)
int
I;
inv
main(void)
{
int
I;I;
: int
: : == b)
ifif(a
{ if{(a(a==
==b)b)
::{
}:
: :} }
}} :
}
再利用
類似システム作成時
知能モジュール仕様
RTリポジトリ
foo Component
bar Component
RTリポジトリ
RTシステムエディタ
シミュレータ
<rtmodule>
<rtcs>
:
</rtcs>
<configuration>
:
</configuration>
:
</rtmodule>
類似コンポーネント
44
RTシステム仕様記述
システム検証
生成
RTシステムエディタ
利用
利用
シミュレーション
ロボットシステム
<rtsystem>
<rtcs>
:
</rtcs>
<configuration>
:
</configuration>
:
</rtsystem>
利用
シナリオ等運用時
Real RT-System Nodes
シミュレータ
実システム
RT-Network
再利用
類似システム作成時
ロボットシステム仕様
<rtsystem>
<rtcs>
:
</rtcs>
<connections>
:
</connections>
:
</rtsystem>
類似システム
45
RTミドルウエアと
組込みシステム
46
ロボットのCPUとOS(1)
• P2
– CPU:MicroSPARC II×4
– OS: VxWorks
– L12DOF, A14DOF
• P3
– CPU :MicroSPARC
II(110MHz)×1
– OS: VxWorks
– L12DOF, A14DOF
• ASIMO
– CPU:PowerPC?
– OS:VxWorks
– L12DOF,A14DOF,H3DOF,
F4DOF,C1DOF
http://www.honda.co.jp
47
ロボットのCPUとOS(2)
• HRP-2
– OS:ART-Linux
– CPU:Pentium!!!x2
– 30DOF
• HRP-2m Choromet
– OS:ART-Linux
– CPU:SH4 240MHz
• HRP-3 Promet Mk-II
– OS:ART-Linux
– CPU:Pentium4+CAN
• HRP-4C
– OS:ART-Linux
– CPU:PentiumM 1.6GHz,
VIA C7 1GHz
http://www.aist.go.jp
48
ロボットのCPUとOS(3)
• PaPeRo (NEC)
– CPU: i386系(ノートPC)
– OS:Windows
– ARM9系+Linuxも?
• HOPE-1/2 (富士通)
– CPU:PentiumMMX 300MHz
– OS:RT-Linux
• WAKAMARU (三菱重工)
http://www.nec.co.jp
http://techon.nikkeibp.co.jp
– CPU:ARMx7
– OS:Linux (MontaVista)
• PR2 (Willow Garage)
– OS:Linux (Xenomai)
– CPU:PCx4+FPGAモータドラ
イバ分散
http://www.mhi.co.jp
http://www.willowgarage.com
49
ロボットとμITRON
• サービスロボットでμITRONが使われることは
(今のところ)稀である。
• そもそも、サービスロボットは組込みシステム
とは言えない(かもしれない)。
しかし
• 我々は組込みシステムおよびμITRON(特に
TOPPERS)に着目。
なぜか?
50
なぜ「ロボット」で「組込み」か?
• 分散化
– MPUモータドライバ+CAN、FlexRay、TTP/C、EtherCAT
etc..
– 体内・体外ネットワーク
• 安全性
– 機能安全:IEC61508 に注目
• NEDO生活支援ロボットPJ
– ロボット安全に関する標準化の動き
– 実用化には必須
• 実用化
– 安定性、堅牢性、長時間連続使用
– 信頼性(ディペンダビリティ)
51
知能化空間・ロボット住宅
(NEDOオープンイノベーションPJ)
• 生活支援ロボット
– 知能化空間+ロボット
• RTM
– 家屋内のセンサネットワ
ーク構築
– センサ→ロボット
– ロボット→アクチュエータ
– Etc…
すべてをRTMで統合
分散センサ・モータ→組込みデバイス
52
RTCチップ組み込みイメージ
RTCチップ
RTCチップには
・通信インターフェース
・チップ化されたRTCインターフェース
・基本的なI・Oインターフェース
が組み込まれている
既存のロボット
既存のロボット
既存のデバイス
既存のデバイス
既存のロボット・デバイスを容易にRTC化
RTコンポーネント化
されたロボット
RTコンポーネント化
されたロボット
RTコンポーネント化
されたデバイス
RTコンポーネント化
されたデバイス
RTCチップ開発
• 目的:
• reliabilityを考慮したRTMシステム構築のため
• 様々なデバイスをRTC化
• 電灯、スイッチ、単機能センサ、etc…
• RTCチップまたは軽量RTC
• デバイスに接続すればRTMに参加可能
• 名刺半分サイズ
• @2000円以下
機能安全とIEC61508
• 機能安全(Functional Safety)
– システムの安全を確保す
る機能を持つ
– リスクを許容目標へ軽減
する
– ⇔本質安全(固有安全)
1. 全安全ライフサイクルの導
入
2. 安全度水準(SIL)という定
量的尺度の導入
3. 機能安全管理に対するコ
ンピテンシーの採用
ハードウエア
ソフトウエア
200の技法
100の技法
ライフサイクル
ライフサイクル
規定
規定
技術要因
組織の機能安全管理
人的要因(個人コンピテンシー)
http://systemsafety.fc2web.com/
安全関連系とRTミドルウエア
• 安全関連系
– 必要なリスク軽減を達成
するシステム
• RTCが安全関連系に
組み込まれる
RTC
RTM
OS
– OSレスまたは認証済み
OSを使用することが望
ましい
VxWorks
or
TOPPERS
が有力
安全関連系を構成する
デバイスRTC
56
RTC-Liteから
TOPPERS版OpenRTM-aistへ
57
RTUnit(2003年~) /RTC-Lite(2005年~)
• ネットワーク型マイコン機器
– small/μ RTUnitをRTMで統合
RTUnit 仕様
MPU
Microchip PIC16F877A
ROM
8kwords
RAM
368 bytes
EEPROM
256 bytes
クロック
max 20MHz
A/D
10bit ×8ch
DIO
24ch
シリアル
2ch
通信
LANTRONIX XPort
電源
DC 5V
small RTUnit
μRTUnit
58
RTC-Lite:Proxy方式
PC
フル規格RTCから
Proxy Component
RTC-Lite protocol
RTC-Lite
Small RT-Unit
I/O
フル規格RTCへ
モデルに基づくコード生成
コンポーネント仕様
name:
category:
description:
comp_type:
act_type:
InPorts:
OutPorts:
MyComp
temp.sensor device
temp. sensor RTC
STATIC
PERIODIC
mode:TimedBool
temp: TimedDouble
同一のRTC仕様からは
言語が異なっていても、
同じ(コンポーネントモデ
ルの)RTCが生成される
Template code generator
RTC source
for C++
class MyComp
: public DataflowComponent {
public:
virutal onExecute(ec_id);
:
private:
TimedBool m_mode;
TimedDouble m_temp;
};
C++
Java
Python
RTC-Lite
backend
backend
backend
backend
RTC source
for Java
RTC source
for Python
import RTC.DataFlowComponent;
public class MyCompImpl
extends DataFlowComponent
{
public ConsoleInImpl(mgr)
{
}
:
};
#/usr/bin/env python
import RTC
class MyComp(
DataFlowComponent):
def __init__(self, manager):
:
def onExecute(self, ec_id):
:
RTC-Lite source
for PIC C
#include <16f877a.h>
#include "rtc_base.c“
int main (void)
{
rtc_connect_proxy();
rtc_mainloop();
return 0;
}
RTC-Lite proxy
code
#/usr/bin/env python
import RTC
class Proxy(
DataFlowComponent):
def __init__(self, manager):
:
def onExecute(self, ec_id):
:
60
RTC-Liteの応用
Communication Server
Proxy
Proxy
small RT-Unit
& RTC-Lite
small RT-Unit
& RTC-Lite
Touch sensor
メディアアート作品への適用
blue
移動プラットフォームへの適用
red
Lamp
red
blue
様々な組込み向けRTC
PCはオプショナル
PCが必須
Proxy RTC
Proxy RTC
RTCLite
eRTC
TCP/IP
Or other
通常RTC
RTC-Lite
eRTC
RTC Activity
RTC Activity
RT-Unit
RTC-Lite同士は
直接通信不可
RTC-Lite方式
TOPPERSで実現可能に
CORBA
RTC
TCP/IP
Or other
CORBA
RTC
eRTC
で通信
PC
RTC-Lite
で通信
PC
実現可能か?
RT-Unit
eRTC方式
通常RTC
通常RTC
eRTC
軽量CORBA RTC
RTC
RT-Unit
RTC同士は
直接通信可
OSが必要
それなりのCPUが必要
軽量CORBA方式
様々な組込み向けRTC
通常RTC
通常RTC
CORBA RTC
CORBA RTC
TCP/IP Chip
TCP/IP Chip
RTC Proxy Chip
RTC FPGA Chip
RTC-Lite
RTC-Lite
RTC-Lite
で通信
SPI
or other
RTC-Lite
で通信
SPI
or other
RTC-Lite
RTC-Lite
RTC
RTC
RT-Unit
RT-Unit
CORBA RTC専用
MPU方式
CORBA RTC専用
FPGA方式
ORBexpress FPGA
• XILINX Vertex シリーズをサポート
– Vertex-4, Vertex-5
– Vertex-4:@$200~$2,000 (avnet調べ)
• CORBAサポート
– 標準オペレーション
– すべてのデータ型
• μs以下のレインテンシ
• IDLコンパイラが Lightweight VHDL を生成
• FPGA開発ツール一式があれば開発可能
http://www.ois.com
組込みLinux版OpenRTM
このプロセスは1回のみ行えばよい
OpenRTMをクロスビルド
RTC用ROMイメージを作成
RTCをクロスコンパイル
クロス開発環境
RTC用ROMイメージを書き込み
RTCを書き込み
挿入
USBメモリ
ターゲットCPUボード
65
TOPPERS版OpenRTM
• TOPPERS
– uITRON互換OS
– オープンソース
– 製品搭載実績多数
• RtORB
– 産総研版CORBA
– 軽量・高速
• coil
RTC
RTC
RTC
RTC
RTC
– OS抽象化層
RtORB
OpenRTM-aist
TINET
coil
OS (TOPPERS)
66
標準化
67
なぜ標準が必要?
RTミドルウエアの目的
• 人々の間で共有される共通ソフトウエアモデル
≠
ソフトウエアモデルが共有されていないと…
意思疎通が困難に…
68
なぜ標準が必要?
RTミドルウエアの目的
• 人々の間で共有される共通ソフトウエアモデル
複雑なRTシステム
ComponentComponent
command
reply
CORBA object
Thread
OutPort 0
RTComponent
InPort 0
get
put
reply
Activity
get
InPort n
put
OutPort n
reply
put
get, subscribe
reply
push
共通コンポーネントモデルに基づいて考えると…
RTシステムの構造を確実に相手に伝えられる。
69
なぜ標準が必要?
RTミドルウエアの目的
• 人々の間で共有される共通ソフトウエアモデル
• オープンな仕様を提供
– 誰でも実装可能→実装の多様性
– 仕様を策定することが主たる目的
– 実装(OpenRTM-aist):仕様の妥当性検証
オープン化
ミドルウエアが競争領域ではなくなる
RTM仕様
RTM実装A
RTM実装B
RTM実装C
上に載せるロジック・コンポーネント
相互運用可能
の共有・競争の促進
70
なぜ標準が必要?
RTミドルウエアの目的
• 人々の間で共有される共通ソフトウエアモデル
• オープンな仕様を提供
– 誰でも実装可能→実装の多様性
– 仕様を策定することが主たる目的
– 実装(OpenRTM-aist):仕様の妥当性検証
• 実装技術に非依存なソフトウエアモデル
– 特定の言語、OS、分散オブジェクトミドルウエアに依存しないモデル
(PIM: Platform Independent Model)
• →標準化が必要
– OMG (Object Management Group) における標準化
– オープンな標準化プロセス
71
OMGにおける標準化
• OMG (Object Management Group)
– ソフトウエア標準化団体
– UML、CORBAなどの仕様策定で実績
• MDA
– システムをPIM化することにより、抽象化されたモデルの寿命が延び
実行可能性変数(品質、コスト、寿命の積)が向上する。(MDA:
Model Driven Architecture の考え方。)
• PIM (Platform Independent Model)
– プラットフォーム(ここでは、CORBA, JavaRMI, SOAP, HORB等分
散オブジェクトプラットフォームを指す。)に依存しないモデル。
• PSM (Platform Specific Model)
– プラットフォーム毎にPSMから変換されたモデル。
– CORBA PSM, SOAP PSM etc…
72
OMGにおける標準化
• OMGからRFP (Request
For Proposal)が出される。
• 標準化を希望するベンダが
提案を持ち寄る。
– 提案はPIMおよびPSM
• 合意ベースのプロセスに基
づき標準仕様を策定。
• OMGにおける認定プロセ
ス
• OMG標準としてオープンに
…
OOの標準化に関して
提案がある人は手を
上げてください
RFP
Request for Proposal
提案A
提案B
提案C
提案者間の
合意に基づく
標準化プロセス
OMG標準
73
OMGにおける標準化
①OpenRTM-aistに基づく
初期提案の作成
②共同提案書作成
のための詳細を議論
2005年
③標準作業部会
への提出・採択
④最終文書化委員会
における整合性の議論
2006年
2005.9
①
2006.2
②
2006.6
2007年
③
2006.9
④
2008年
2008.4
標準仕様の
公式リリース
RFP発行
(RFP=標準仕様
提案の呼びかけ)
Initial Submission
Joint Submission
Adopted Specification
74
OpenRTMとOMG RTC仕様
NEDO
プロジェクト成果
2002-2005年
OpenRTM-aist
0.2.0
OMG RTC仕様
に準拠した始め
てのバージョン
OpenRTM-aist
0.3.0
OMGに提案
0.2.0のRTCを
元にした仕様案
を作成
2009年
RC1:5月
RELEASE:7月
OpenRTM-aist
0.4.0
OMG RTC仕様
採択
2007年9月採択
その後FTFにて
公式リリースに
向けて議論
OpenRTM-aist
1.0
OMG RTC仕様
正式リリース
2008年4月
75
OMG RTC の特徴
• コンポーネント間の状態を統一的に扱うライフサイク
ル管理方法を提供
• コンポーネントおよび付随するオブジェクトを記述す
るためのデータ構造を規定
• 基本的なデザインパターンを提供
– 細粒度コンポーネントの密な結合を実現するデータフロー
型コンポーネント
– 有限状態マシンを有する stimulus-response 型コンポー
ネント
– 同期または非同期的なコンポーネントのコンポジションを
実現するモード型コンポーネント
76
PIM (Platform Independent Model)
pd RTC Packages
«profile»
RTC
SDOPackage
Execution Semantics
Introspection
(from External Models)
Lightw eight RTC
(from Robotic Technology Components)
•
OMG RTC 仕様は3つ
のパッケージから構成
される:
– Lightweight RTC
– Execution
Semantics
– Introspection
77
パッケージ1: Lightweight RTC
pd RTC Packages
«profile»
RTC
SDOPackage
Execution Semantics
Introspection
(from External Models)
Lightw eight RTC
(from Robotic Technology Components)
コンポーネント
• Lightweight RTC
– コンポーネント、ポート、コネ
クタ等のスレレオタイプ
– コンポーネントライフサイクル
– 実行コンテキスト
– コンポーネントのメタ情報を
取得するイントロスペクション
機能は含まれない
– 静的に構成されるコンポーネ
ント
ポート
状態マシン
78
パッケージ2: Execution Semantics
pd RTC Packages
«profile»
RTC
SDOPackage
Execution Semantics
Introspection
•
Execution Semantics
–
(from External Models)
Lightw eight RTC
(from Robotic Technology Components)
Data flow
FSM
request
response
ロボットシステム一般によく
用いられる振舞いのパター
ンを提供する
1. 時刻に同期して、データの
流れにより駆動されるタイ
プ(データフロー型)
2. Stimulus-response型ある
いはイベントドリブン型の実
行タイプ (FSM)
3. 幾つかのモードを内包する
モード型
Multi Modal
79
パッケージ2: Introspection
pd RTC Packages
«profile»
RTC
SDOPackage
Execution Semantics
Introspection
(from External Models)
Lightw eight RTC
(from Robotic Technology Components)
RTC
SDO
コンポーネント
•
Introspection
– コンポーネントのメタ情
報取得のためのイン
ターフェースを提供
– 別のOMG標準である
SDO(Super Distributed Object)
に準拠
– 動的な構成(コンポー
ネント間の接続等)が
可能なコンポーネント
ポート
状態マシン
80
PSM (Platform-Specific Models)
• CORBA IDL
– CORBA 2.x 準拠のIDL (Interface Definition Language) を提供
• CORBA Component Model
– CCM (CORBAコンポーネントモデル)準拠の仕様を提
供
• Local components
– 通信オーバーヘッドの少ない単一プロセスモデル
– C++ マッピングとして提供
81
OMG RTC 仕様とOpenRTM-aist
PIM (Platform Independent Model)
level specification
OMGにおける
標準仕様
<<PIM>>
RTC Specification
<<PIM>
SDO model
<<mapping>>
PSM (Platform Specific Model)
level specification
<<PSM>
RTC
CORBA model
<<use>>
Extended interface
for OpenRTM-aist
<<interface>>
OpenRTM
ext. interface
<<PSM>>
RTC
EJB model
<<PSM>>
RTC
SOAP model
RTM for other platforms
<<interface>>
OpenRTM
basic interface
<<implements>>
Implementation
産総研による実
装
OpenRTM-aist
OpenRTM-aist implementation
Other RTM
Implementation by other vendors
82
終わりに
• RTミドルウエア
– モジュール化による諸問題の解決
– 新たなロボットビジネス市場の創生
• OpenRTM-aistアーキテクチャ
– コンポーネントフレームワーク
• 開発の労力をコアロジックに集中
• 組込みシステム
– 分散化、安全性、信頼性への要求の高まり
– TOPPERS版OpenRTM-aistへ
• RTCのOMGにおける標準化
– 競争領域、非競争領域の分離
83
RTミドルウエア関連情報
• OpenRTM-aist
– http://www.openrtm.org/
• メーリングリスト
– [email protected]
• OpenHRP3
– http://www.openrtp.jp/openhrp3/jp/
• OpenRTP
– http://openrtp.jp/
• OMG Robotics DTF
– http://www.omg.org/robotics/
84