[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 メーリングリストの案内