[openrtm-users 01436] OpenRTM-aist-1.0.0でのonWriteコールバックについて

3 posts / 0 new
Last post
root
Offline
Last seen: 19 hours 59 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01436] OpenRTM-aist-1.0.0でのonWriteコールバックについて

OpenRTM-aistユーザの皆さん

奈良先端大の末永です.

以前,産総研の安藤様からのメール[openrtm-users 00512]で
onWriteコールバックを用いた通信方法(OpenRTM-aist-0.4.2用)がありましたが,
こちらをセック中本様からのメール[openrtm-users 01328]を参考に
OpenRTM-aist-1.0.0 用に書き換えてみました.

一応,動いてはいるのですが,RTSystemEditorからPipe RTCをexitした際に
異常終了で終わっていることに気が付きました.

あくまで終了時だけなので影響は少ないのですが,あまり気持ちの良いものではありません.
何か記述で間違っていたり,勘違いしている点などありますでしょうか?
何かお気づきの方がおりましたら,ご教授頂けましたら幸いです.

どうぞよろしくお願い致します.

・添付ファイルの説明
Pipe_042.tar.g_  OpenRTM-aist-0.4.2用(ほぼ安藤様のファイル)
Pipe_100.tar.g_  OpenRTM-aist-1.0.0用
GetAndSendTimedLong.tar.g_  動作テスト用
diff_Pipe_cpp.pdf  Pipe.cppの差分
diff_Pipe_h.pdf  Pipe.hの差分
OnWriteCallBack.png  実行結果
error_when_exiting.txt  終了時に出力されるエラー(gdb表示)
※ 添付ファイル *.tar.g_ は *.tar.gz にリネームして解凍してください。

・参考にしたメール
[openrtm-users 01328] OpenRTM-aist-1.0.0-RELEASEにおけるRC1からの変更点
[openrtm-users 00512] Re: onWriteConvert

以上.

> 日付 2008年7月8日20:19
> 件名 [openrtm-users 00512] Re: onWriteConvert
>
>
> 産総研 安藤です
>
> 先ほどのメールの回答です。
>
> 添付のサンプルをご覧ください。
> 添付ファイル Pipe.tar.g_ は Pipe.tar.gz にリネームして解凍してください。
>
> このコンポーネントはTimedLong型のInPort/OutPortをひとつづつもち、
> InPortに入ってきたデータをOutPortへコールバックを使って即座に
> 伝送するものです。
>
> コンパイル後、ConsoleInとConsoleOutの間にはさんで接続してください。
> Pipeコンポーネントはコールバックを使用しているので、
> onExecuteでデータの読み込み+書き出しをしなくても、
> InPortから入ったデータが即座にOutPortから出て行きます。
> したがって、Active化しなくても動作します。
>
>
>
>> 産総研 安藤です
>>
>> 高エネ研の安様より以下のようなメールをいただきましたので、
>> 参考までにOpenRTM MLに転送させていただきます。
>>
>>
>> ---------- 転送されたメッセージ ----------
>> 日付: 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: 19 hours 59 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01437] OpenRTM-aist-1.0.0でのonWriteコールバックについて

末永さま

安藤です

詳しく見てないのではずしてたらすみません。
addConnectorDataListener の第3引数に false を与えるとどうなりますか?

http://www.openrtm.org/OpenRTM-aist/documents/current/cxx/classreference_ja/classRTC_1_1InPortBase.html#87108f42506a526d05dd72d67a1654af

2010年10月22日0:55 Tsuyoshi Suenaga :
> OpenRTM-aistユーザの皆さん
>
> 奈良先端大の末永です.
>
> 以前,産総研の安藤様からのメール[openrtm-users 00512]で
> onWriteコールバックを用いた通信方法(OpenRTM-aist-0.4.2用)がありましたが,
> こちらをセック中本様からのメール[openrtm-users 01328]を参考に
> OpenRTM-aist-1.0.0 用に書き換えてみました.
>
> 一応,動いてはいるのですが,RTSystemEditorからPipe RTCをexitした際に
> 異常終了で終わっていることに気が付きました.
>
> あくまで終了時だけなので影響は少ないのですが,あまり気持ちの良いものではありません.
> 何か記述で間違っていたり,勘違いしている点などありますでしょうか?
> 何かお気づきの方がおりましたら,ご教授頂けましたら幸いです.
>
> どうぞよろしくお願い致します.
>
>
> ・添付ファイルの説明
> Pipe_042.tar.g_  OpenRTM-aist-0.4.2用(ほぼ安藤様のファイル)
> Pipe_100.tar.g_  OpenRTM-aist-1.0.0用
> GetAndSendTimedLong.tar.g_  動作テスト用
> diff_Pipe_cpp.pdf  Pipe.cppの差分
> diff_Pipe_h.pdf  Pipe.hの差分
> OnWriteCallBack.png  実行結果
> error_when_exiting.txt  終了時に出力されるエラー(gdb表示)
> ※ 添付ファイル *.tar.g_ は *.tar.gz にリネームして解凍してください。
>
> ・参考にしたメール
> [openrtm-users 01328] OpenRTM-aist-1.0.0-RELEASEにおけるRC1からの変更点
> [openrtm-users 00512] Re: onWriteConvert
>
> 以上.
>
>
> 2008年7月8日20:19 Ando Noriaki
>> From Ando Noriaki
>> 日付 2008年7月8日20:19
>> 件名 [openrtm-users 00512] Re: 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を行うときにやは
>>> りフィルタープログラムをコールバックに入れて読み込むという使い方が自然の
>>> ようです。
>>>
>>> 私の理解が間違っているかもしれません。
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>
>
>

root
Offline
Last seen: 19 hours 59 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01438] OpenRTM-aist-1.0.0でのonWriteコールバックについて

安藤様

奈良先端大の末永です.

仰る通り,autoclean引数にfalseを与えて,onFinalizeにてremoveConnectorDataListener()を
呼び出すことで正常に終了するようになったようです.
早速のお返事ありがとうございました.

RTC::ReturnCode_t Pipe::onInitialize()
{
// Registration: InPort/OutPort/Service
//
// Set InPort buffers
addInPort("in", m_inIn);

// Set OutPort buffer
addOutPort("out", m_outOut);

// Set service provider to Ports

// Set service consumers to Ports

// Set CORBA Service Ports

//
m_inIn.addConnectorDataListener(ON_BUFFER_WRITE, &m_inout, false);

//
// Bind variables and configuration variable

//
return RTC::RTC_OK;
}

RTC::ReturnCode_t Pipe::onFinalize()
{
m_inIn.removeConnectorDataListener(ON_BUFFER_WRITE, &m_inout);
return RTC::RTC_OK;
}

2010年10月22日1:47 Ando Noriaki :
> 末永さま
>
> 安藤です
>
> 詳しく見てないのではずしてたらすみません。
> addConnectorDataListener の第3引数に false を与えるとどうなりますか?
>
> http://www.openrtm.org/OpenRTM-aist/documents/current/cxx/classreference_ja/classRTC_1_1InPortBase.html#87108f42506a526d05dd72d67a1654af
>
>
> 2010年10月22日0:55 Tsuyoshi Suenaga
>> OpenRTM-aistユーザの皆さん
>>
>> 奈良先端大の末永です.
>>
>> 以前,産総研の安藤様からのメール[openrtm-users 00512]で
>> onWriteコールバックを用いた通信方法(OpenRTM-aist-0.4.2用)がありましたが,
>> こちらをセック中本様からのメール[openrtm-users 01328]を参考に
>> OpenRTM-aist-1.0.0 用に書き換えてみました.
>>
>> 一応,動いてはいるのですが,RTSystemEditorからPipe RTCをexitした際に
>> 異常終了で終わっていることに気が付きました.
>>
>> あくまで終了時だけなので影響は少ないのですが,あまり気持ちの良いものではありません.
>> 何か記述で間違っていたり,勘違いしている点などありますでしょうか?
>> 何かお気づきの方がおりましたら,ご教授頂けましたら幸いです.
>>
>> どうぞよろしくお願い致します.
>>
>>
>> ・添付ファイルの説明
>> Pipe_042.tar.g_  OpenRTM-aist-0.4.2用(ほぼ安藤様のファイル)
>> Pipe_100.tar.g_  OpenRTM-aist-1.0.0用
>> GetAndSendTimedLong.tar.g_  動作テスト用
>> diff_Pipe_cpp.pdf  Pipe.cppの差分
>> diff_Pipe_h.pdf  Pipe.hの差分
>> OnWriteCallBack.png  実行結果
>> error_when_exiting.txt  終了時に出力されるエラー(gdb表示)
>> ※ 添付ファイル *.tar.g_ は *.tar.gz にリネームして解凍してください。
>>
>> ・参考にしたメール
>> [openrtm-users 01328] OpenRTM-aist-1.0.0-RELEASEにおけるRC1からの変更点
>> [openrtm-users 00512] Re: onWriteConvert
>>
>> 以上.
>>
>>
>> 2008年7月8日20:19 Ando Noriaki
>>> From Ando Noriaki
>>> 日付 2008年7月8日20:19
>>> 件名 [openrtm-users 00512] Re: 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.1.0-RELESE Download page
2.0.1-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