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

Ando Noriaki n-ando @ aist.go.jp
2009年 4月 14日 (火) 10:20:19 JST


穴口様

産総研 安藤と申します。

> 穴口と申します。
> 初めて投稿致します。
>
> 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

お試しください。
-- 
安藤慶昭@独立行政法人産業技術総合研究所 研究員
                  知能システム研究部門 統合知能研究グループ
                  〒305-8568 茨城県つくば市梅園1-1-1 中央第2
                  TEL: 029-861-5981 FAX: 029-862-6631
                  n-ando @ aist.go.jp, n-ando @ ieee.org



openrtm-users メーリングリストの案内