[openrtm-users 01438] Re: OpenRTM-aist-1.0.0でのonWriteコールバックについて
Tsuyoshi Suenaga
tsuyo-s @ is.naist.jp
2010年 10月 22日 (金) 02:52:32 JST
安藤様
奈良先端大の末永です.
仰る通り,autoclean引数にfalseを与えて,onFinalizeにてremoveConnectorDataListener()を
呼び出すことで正常に終了するようになったようです.
早速のお返事ありがとうございました.
RTC::ReturnCode_t Pipe::onInitialize()
{
// Registration: InPort/OutPort/Service
// <rtc-template block="registration">
// 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
// </rtc-template>
m_inIn.addConnectorDataListener(ON_BUFFER_WRITE, &m_inout, false);
// <rtc-template block="bind_config">
// Bind variables and configuration variable
// </rtc-template>
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 <n-ando @ aist.go.jp>:
> 末永さま
>
> 安藤です
>
> 詳しく見てないのではずしてたらすみません。
> 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 <tsuyo-s @ is.naist.jp>:
>> 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 <n-ando @ aist.go.jp>:
>>> From Ando Noriaki <n-ando @ aist.go.jp>
>>> 日付 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 <n-ando @ aist.go.jp>:
>>>> 産総研 安藤です
>>>>
>>>> 高エネ研の安様より以下のようなメールをいただきましたので、
>>>> 参考までにOpenRTM MLに転送させていただきます。
>>>>
>>>>
>>>> ---------- 転送されたメッセージ ----------
>>>> 差出人: Yoshiji Yasu <Yoshiji.Yasu @ kek.jp>
>>>> 日付: 2008/07/08 10:02
>>>> 件名: [rtm-kek 00535] onWriteConvert
>>>> 宛先: rtm-kek @ m.aist.go.jp
>>>>
>>>>
>>>> 安です。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を行うときにやは
>>>> りフィルタープログラムをコールバックに入れて読み込むという使い方が自然の
>>>> ようです。
>>>>
>>>> 私の理解が間違っているかもしれません。
>>>>
>>>> --
>>>> Yoshiji Yasu @ Online group, Institute of Particle and Nuclear Studies,
>>>> High Energy Accelerator Research Organization ( KEK ),
>>>> E-mail : Yoshiji.YASU @ kek.jp
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> 安藤慶昭@独立行政法人産業技術総合研究所 研究員
>>>> 知能システム研究部門 タスクインテリジェンス研究グループ
>>>> 〒305-8568 茨城県つくば市梅園1-1-1 中央第2
>>>> TEL: 029-861-5981 FAX: 029-862-6631
>>>> n-ando @ aist.go.jp, n-ando @ ieee.org
>>>>
>>>
>>>
>>>
>>> --
>>> 安藤慶昭@独立行政法人産業技術総合研究所 研究員
>>> 知能システム研究部門 タスクインテリジェンス研究グループ
>>> 〒305-8568 茨城県つくば市梅園1-1-1 中央第2
>>> TEL: 029-861-5981 FAX: 029-862-6631
>>> n-ando @ aist.go.jp, n-ando @ ieee.org
>>>
>>
>>
>>
>> --
>> --------------------------------------------
>> 末永 剛 (Tsuyoshi Suenaga)
>> 奈良先端科学技術大学院大学 情報科学研究科
>> ロボティクス講座 研究員
>> e-mail: tsuyo-s @ is.naist.jp
>> URL: http://robotics.naist.jp/~tsuyo-s/
>> --------------------------------------------
>>
>
>
>
> --
> 安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
> 統合知能研究グループ 主任研究員, 博士(工学)
> 〒305-8568 つくば市梅園1-1-1 中央第2
> e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
> OpenRTM-aist: http://www.openrtm.org
>
> Noriaki Ando, Ph.D.
> Senior Research Scientist, RT-Synthesis R.G., ISRI, AIST
> AIST Tsukuba Central 2, Tsukuba, Ibaraki 305-8568 JAPAN
> e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
> OpenRTM-aist: http://www.openrtm.org
>
>
--
--------------------------------------------
末永 剛 (Tsuyoshi Suenaga)
奈良先端科学技術大学院大学 情報科学研究科
ロボティクス講座 研究員
e-mail: tsuyo-s @ is.naist.jp
URL: http://robotics.naist.jp/~tsuyo-s/
--------------------------------------------
openrtm-users メーリングリストの案内