[openrtm-users 00506] onWriteConvert

2 posts / 0 new
Last post
root
Offline
Last seen: 2 days 1 hour ago
Joined: 2009-06-23 14:31
[openrtm-users 00506] onWriteConvert

産総研 安藤です

高エネ研の安様より以下のようなメールをいただきましたので、
参考までにOpenRTM MLに転送させていただきます。

---------- 転送されたメッセージ ----------
差出人: Yoshiji Yasu
日付: 2008/07/08 10:02
件名: [rtm-kek 00535] onWriteConvert
宛先:

安です。onWriteConvertについて質問です。

proc1, proc2, proc3という3つのコンポーネントの中のproc2にコールバックを
入れようとしています。やりたいことは、proc2のInPortの RingBufferのwrite
のタイミングで、proc2のメインメソッドをすっ飛ばして、write時のコールバッ
クでOutPortのwrite を実行してしまうということです。

InPortCorbaConsumer.hで
status = _ptr()->put(tmp);
でCORBAのデータ転送とRingBufferのputメソッドを行います。
OutPort.h, InPort.hのwriteメソッドの中で、
status = this->put((*m_OnWriteConvert)(value));
という形でコールバックが呼ばれます。

proc1はOutPortのwriteをすると、RingBufferにput/getしてから _ptr()->putで
CORBA転送しproc2のRingBufferにデータが書き込まれます。書き込まれた
タイミングでコールバックするには、InPortCorbaConsumer.hにコールバックす
るような仕掛けがないといけないのではないでしょうか?

コールバックの例題をみると、
OnWriteConvertの場合は、proc1ないしはproc2がOutPortのwriteを行うときに
フィルタープログラムをコールバックに入れて転送するという使い方が自然のよ
うですし、
onReadConvertの場合は、proc2ないしはproc3がInPortのreadを行うときにやは
りフィルタープログラムをコールバックに入れて読み込むという使い方が自然の
ようです。

私の理解が間違っているかもしれません。

Undefined
root
Offline
Last seen: 2 days 1 hour ago
Joined: 2009-06-23 14:31
[openrtm-users 00512] onWriteConvert

産総研 安藤です

先ほどのメールの回答です。

添付のサンプルをご覧ください。
添付ファイル Pipe.tar.g_ は Pipe.tar.gz にリネームして解凍してください。

このコンポーネントはTimedLong型のInPort/OutPortをひとつづつもち、
InPortに入ってきたデータをOutPortへコールバックを使って即座に
伝送するものです。

コンパイル後、ConsoleInとConsoleOutの間にはさんで接続してください。
Pipeコンポーネントはコールバックを使用しているので、
onExecuteでデータの読み込み+書き出しをしなくても、
InPortから入ったデータが即座にOutPortから出て行きます。
したがって、Active化しなくても動作します。

2008/07/08 19:48 Ando Noriaki :
> 産総研 安藤です
>
> 高エネ研の安様より以下のようなメールをいただきましたので、
> 参考までにOpenRTM MLに転送させていただきます。
>
>
> ---------- 転送されたメッセージ ----------
> 差出人: Yoshiji Yasu
> 日付: 2008/07/08 10:02
> 件名: [rtm-kek 00535] onWriteConvert
> 宛先:
>
>
> 安です。onWriteConvertについて質問です。
>
> proc1, proc2, proc3という3つのコンポーネントの中のproc2にコールバックを
> 入れようとしています。やりたいことは、proc2のInPortの RingBufferのwrite
> のタイミングで、proc2のメインメソッドをすっ飛ばして、write時のコールバッ
> クでOutPortのwrite を実行してしまうということです。
>
> InPortCorbaConsumer.hで
> status = _ptr()->put(tmp);
> でCORBAのデータ転送とRingBufferのputメソッドを行います。
> OutPort.h, InPort.hのwriteメソッドの中で、
> status = this->put((*m_OnWriteConvert)(value));
> という形でコールバックが呼ばれます。
>
> proc1はOutPortのwriteをすると、RingBufferにput/getしてから _ptr()->putで
> CORBA転送しproc2のRingBufferにデータが書き込まれます。書き込まれた
> タイミングでコールバックするには、InPortCorbaConsumer.hにコールバックす
> るような仕掛けがないといけないのではないでしょうか?
>
> コールバックの例題をみると、
> OnWriteConvertの場合は、proc1ないしはproc2がOutPortのwriteを行うときに
> フィルタープログラムをコールバックに入れて転送するという使い方が自然のよ
> うですし、
> onReadConvertの場合は、proc2ないしはproc3がInPortのreadを行うときにやは
> りフィルタープログラムをコールバックに入れて読み込むという使い方が自然の
> ようです。
>
> 私の理解が間違っているかもしれません。
>

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