[openrtm-users 00780] OpenHRPとRTコンポーネントの連動について

3 posts / 0 new
Last post
root
Offline
Last seen: 10 hours 30 min ago
Joined: 2009-06-23 14:31
[openrtm-users 00780] OpenHRPとRTコンポーネントの連動について

穴口と申します。
初めて投稿致します。

OpenHRPシミュレータを用いて、
RTコンポーネントの作成をしております。

シミュレータにコンポーネントAが接続し、
コンポーネントAがコンポーネントBに接続する場合の、
シミュレータとコンポーネントBの同期の取り方についての質問です。

シミュレータにコンポーネントAはSynchExtTriggerECで接続されているので、

同期が取れますが、
コンポーネントAとコンポーネントBは、どのようにすればよいでしょうか。

以上、宣しくお願い致します。

Undefined
root
Offline
Last seen: 10 hours 30 min ago
Joined: 2009-06-23 14:31
[openrtm-users 00781] OpenHRPとRTコンポーネントの連動について

穴口様

産総研 安藤と申します。

> 穴口と申します。
> 初めて投稿致します。
>
> OpenHRPシミュレータを用いて、
> RTコンポーネントの作成をしております。
>
> シミュレータにコンポーネントAが接続し、
> コンポーネントAがコンポーネントBに接続する場合の、
> シミュレータとコンポーネントBの同期の取り方についての質問です。
>
> シミュレータにコンポーネントAはSynchExtTriggerECで接続されているので、
>
> 同期が取れますが、
> コンポーネントAとコンポーネントBは、どのようにすればよいでしょうか。

方法としては、シミュレータとRTC-AにアタッチされているSynchExtTriggerECを
コンポーネントBにもアタッチすればできるとおもいます。
(EC関連はバグがあるかもしれないです。すみません。)

手順としては、以下のとおりです。

rtc_a_ref: コンポーネントAのオブジェクト参照
rtc_b_ref: コンポーネントBのオブジェクト参照

ec_a_list = rtc_a_ref->get_contexts(); // AのECのリストを取得
ec_ext = ec_a_list[?]; // ?はおそらく0だと思います。

ec_b_list = rtc_b_ref->get_contexts(); // BのECリストを取得
ec_b = ec_b_list[0]; // デフォルトのECは0に入っている
ec_b->stop(); // デフォルトのECを止める
rtc_b_ref->attach_context(ec_ext); // AのECをBにアタッチ

大まかな流ればこのようになります。
C++でこのコードを書くのは面倒なので、末廣先生作のrtc_handle
を使用すると比較的簡単にこういった操作ができます。
http://staff.aist.go.jp/t.suehiro/rtm/rtc_handle.html

お試しください。

root
Offline
Last seen: 10 hours 30 min ago
Joined: 2009-06-23 14:31
[openrtm-users 00782] OpenHRPとRTコンポーネントの連動について

穴口様、

末廣です。

もう1つの方法として、入出力ポートのコールバック機能を使って
データ駆動的に動作させることも考えられます。

この場合の注意点としては、RTCが複数の入出力を持つときに
流れるデータの数が増幅しないようにするというものがあります。

Ando Noriaki さんは書きました:
> 穴口様
>
> 産総研 安藤と申します。
>
>> 穴口と申します。
>> 初めて投稿致します。
>>
>> OpenHRPシミュレータを用いて、
>> RTコンポーネントの作成をしております。
>>
>> シミュレータにコンポーネントAが接続し、
>> コンポーネントAがコンポーネントBに接続する場合の、
>> シミュレータとコンポーネントBの同期の取り方についての質問です。
>>
>> シミュレータにコンポーネントAはSynchExtTriggerECで接続されているので、
>>
>> 同期が取れますが、
>> コンポーネントAとコンポーネントBは、どのようにすればよいでしょうか。
>
> 方法としては、シミュレータとRTC-AにアタッチされているSynchExtTriggerECを
> コンポーネントBにもアタッチすればできるとおもいます。
> (EC関連はバグがあるかもしれないです。すみません。)
>
> 手順としては、以下のとおりです。
>
> rtc_a_ref: コンポーネントAのオブジェクト参照
> rtc_b_ref: コンポーネントBのオブジェクト参照
>
> ec_a_list = rtc_a_ref->get_contexts(); // AのECのリストを取得
> ec_ext = ec_a_list[?]; // ?はおそらく0だと思います。
>
> ec_b_list = rtc_b_ref->get_contexts(); // BのECリストを取得
> ec_b = ec_b_list[0]; // デフォルトのECは0に入っている
> ec_b->stop(); // デフォルトのECを止める
> rtc_b_ref->attach_context(ec_ext); // AのECをBにアタッチ
>
> 大まかな流ればこのようになります。
> C++でこのコードを書くのは面倒なので、末廣先生作のrtc_handle
> を使用すると比較的簡単にこういった操作ができます。
> http://staff.aist.go.jp/t.suehiro/rtm/rtc_handle.html
>
> お試しください。

Log in or register to post comments

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK