Transcript 平均[ms]
2007.9.14
OS: RTミドルウエアとオープンシステム
2I1 9:15 ~ 12:00
RTコンポーネントのリアルタイム化を
実現する実行コンテキストの拡張
○安藤慶昭,清水昌幸,尹祐根,神徳徹雄
独立行政法人産業技術総合研究所
知能システム研究部門
概要
•
•
•
•
•
•
RTミドルウエア
RTコンポーネントアーキテクチャ
コアロジックと実行コンテキストの拡張
リアルタイム実行の実現
実験
まとめ
2
RTミドルウエアとRTコンポーネント
コアロジック
・デバイス制御
・制御アルゴリズム
・アプリケーション
etc…
RT
コンポーネント
フレームワーク
RT
コンポーネント
ロジックを箱(フレームワーク)に入れたもの=RTコンポーネント(RTC)
RTC RTC RTC RTC RTC RTC RTC RTC
RTミドルウエア
RTCの実行環境(OSのようなもの)=RTミドルウエア(RTM)
※RTCはネットワーク上に分散可能
3
RTコンポーネントアーキテクチャ
•
メタ情報取得
– プロファイル
– どんなコンポーネントか?
•
アクティビティ
– ユーザ定義ロジックの実行
•
データポート
SDO Interfaces RTC Interfaces
– Data Centric な相互作用
•
サービスポート
RTComponent Service
RTCS Consumer
– request/response型相互作用
•
RTCEx Interfaces
RTComponent
Consumer
コンフィギュレーション
Service
Proxy
– ユーザ定義の設定
provide
Consumer
Proxy
Activity
Service
use
provide
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
Active
アーム
サーボON
Error
アーム
緊急停止
実行コンテキスト
5
RTCコアロジックの実行
・実行コンテキスト(ExecutionContext) = 実行主体 ≒スレッド
・RTコンポーネント⇔実行コンテキスト:動的に関連付けられる
RTミドルウエア
標準コンテキスト
実行コンテキストB
モジュールの
動的ロード
RTコンポーネント RTコンポーネント
実行コンテキストA
コンテキストをアタッチ
コンテキストをアタッチ
異なる実行コンテキストを関連付けることにより
動作形態を動的に変更できる
6
リアルタイム実行の実現
• 従来のExecutionContext
を拡張
• ARTLinuxを用いてリアルタ
イム化
• PeriodicExecutionContext
を継承
• コアロジック実行関数
– svc()内でARTLinux APIを呼
び出す
– ループ前:art_enter()
– ループ中: art_wait()
– ループ後:art_exit()
int ArtExecutionContext::svc(void)
{
//リアルタイムスレッドの開始
art_enter(ART_PRIO_MAX-1,
ART_TASK_PERIODIC, m_usec);
do
{
// コンポーネントのAction の実行
std::for_each(m_comps.begin(),
m_comps.end(),
invoke_worker());
art_wait();
} while (m_running);
art_exit();
return 0;
}
7
実験
• リアルタイムExecutionContextを適用
– ハプティックインターフェース (1ms)
– HRP2 (5ms)
設定周期[ms]
平均[ms]
最大/最小[ms]
標準偏差[us]
1.00
1.00
1.03/0.98
6.74
5.00
5.00
5.02/4.98
6.14
RTコンポーネントを変更することなくリアルタイム化を実現
実行コンテキストによるオーバーヘッド問題は顕在化せず
8
その他の応用
シミュレータでは、関連する全コン
ポーネントの実行タイミングを制御す
る必要がある
• 外部トリガ実行コンテキスト
– インターフェースを拡張
– tick() オペレーションをコール
– ロジックが1tick分だけ進む
シミュレータ時間
• ロジックの実行タイミングを
外部から制御
– シミュレータ
– デバッガ
などに利用可能
tick!
外部トリガ
実行コンテキスト
tick!
拡張インターフェース
OpenHRP3において利用
同一のコンポーネントを
実機・シミュレータ両方で利用可能
9
まとめ
• RT コンポーネントのコアロジックの実行
– 実行コンテキスト
• 実行コンテキストの拡張により様々な実行形態を実
現する方法を示した。
– リアルタイム実行
– 外部トリガによる実行
• 2つのデバイスに対してリアルタイム実行コンテキス
トを適用
• 今後の予定
– コンポーネントの複合化
– マルチレート実行
10
お知らせ
• RTミドルウエアWebページ
– Googleで検索「RTミドルウエア」or「OpenRTM」
– メーリングリストにご参加ください(詳細はWebで)
• RTミドルウエアコンテスト
– 募集要項1Fにて配布中
• 経済産業省「次世代ロボット知能化技術開発プロジェ
クト」採択
–
–
–
–
19億×5年、RTミドルウエア:約3億×5年
テクニカルスタッフ募集中
ポスドク募集中:ソフトウエアが好きな人
職員募集中:来年度から
• まずはポスドクへご応募ください
11
RTCコアロジックの実行
・実行コンテキスト(ExecutionContext:EC) ≒スレッド
・RTコンポーネント⇔実行コンテキスト:動的に関連付けられる
異なる実行コンテキストを関連付けることにより
動作形態を動的に変更できる
13
その他の応用
• ロジックの実行タイミン
グを外部から制御
シミュレータでは、関連する全コン
ポーネントの実行タイミングを制御す
る必要がある
– シミュレータ
– デバッガ
• 外部トリガ実行コンテキ
スト
– IDLを拡張
– tick() オペレーションをコ
ールすると、ロジックが
1tick分だけ進む
– シミュレータ:
OpenHRP3へ適用
同一のコンポーネントを
実機・シミュレータ両方で利用可能
14
アクティビティ
• ロジックを実行する部分
• ≒スレッド
• 共通の状態遷移を持つ
–
–
–
–
初期化
非アクティブ(OFF状態)
アクティブ状態(ON状態)
エラー(エラー状態)
アームコンポーネントの例
デバイス
初期化処理
アーム
停止
Init
Inactive
センサRTC
(センサからデータを読む)
制御RTC
(制御出力計算)
アクチュエータRTC
(アクチュエータを駆動)
Active
アーム
サーボON
Error
アーム
緊急停止
別々に作成された複数のコンポーネントを
シーケンシャルにリアルタイム実行し
制御等を行うことも可能
→複合コンポーネント
実行コンテキスト
15