[openrtm-users 02689] Re: 独自バッファの使用法

Ando Noriaki n-ando @ aist.go.jp
2012年 10月 21日 (日) 22:36:59 JST


清水先生

安藤です

ありがとうございます。
この辺はまだ枯れてないので、次のリリースでは対応
していきたいと思います。いただいたソースも参考にさせていただきます。
ちなみに、InPortのSingle Bufferモードに関しては、
InPortBase::init() で以下のようにコンポーネントコンフィグファイルで
プロパティを与えているので本当はここで指定できるべきなんです。


  void InPortBase::init(coil::Properties& prop)
  {
    RTC_TRACE(("init()"));
    m_properties << prop;
    if (m_singlebuffer)
      {
        RTC_DEBUG(("single buffer mode."));
        m_thebuffer = CdrBufferFactory::instance().createObject("ring_buffer");
// ここは本当は以下のようになるべき。
//      m_thebuffer =
CdrBufferFactory::instance().createObject(prop["buffer_type"].c_str());

        if (m_thebuffer == 0)
          {
            RTC_ERROR(("default buffer creation failed"));
          }
      }
    else
      {
        RTC_DEBUG(("multi buffer mode."));
      }

で、コンフィグファイルで
port.inport.dataport.buffer_type: mybuffer
とかやれば、自作のバッファが使えるのではないかと思います。(未検証ですが)
もし、こうなっていたら清水さんのやりたいことが実現できるのではないでしょうか?

もし追加で何か情報があれば教えていただければ幸いです。
よろしくお願いいたします。

2012年10月18日 14:01 Masayuki Shimizu <masayuki.shimizu @ aist.go.jp>:
> 安藤様
>
> 清水です。
>
>> ちなみに、OutPortのほうは大丈夫でしたでしょうか?
> いまは、データフローがpush型、パブリッシャがflushの場合のみを試しています。
> その場合、OutPortのバッファはデータ送受信に関係ないため問題にはなっていません。
>
> pull型の場合や、push型でもflush以外のパブリッシャだと
> OutPort側で問題が起きる可能性がありますが、そこは調べてはいません。
>
> ソースに手を入れないと解決できなさそうなので、
> InPortをマルチバッファモードに変更するソース改変を行い、
> 自作バッファを使用できるようにしました。
>
> 具体的には、InPortBaseにpublicインタフェースを追加し、
> コンポーネントのInPortオブジェクトからそれを呼び出すようにしました。
> 以下、InPortBaseの追加部分です。
> --------------------------------
> bool InPortBase::setSingleBufferMode()
>   {
>     if(m_singlebuffer) return true;
>     if(m_thebuffer == 0){
>       m_thebuffer = CdrBufferFactory::instance().createObject("ring_buffer");
>       if (m_thebuffer == 0) return false;
>     }
>     m_singlebuffer = true;
>     return true;
>   }
>
>   bool InPortBase::setMultiBufferMode()
>   {
>     if(!m_singlebuffer) return true;
>     if(m_thebuffer != 0){
>       CdrBufferFactory::instance().deleteObject(m_thebuffer);
>       m_thebuffer = 0;
>     }
>     m_singlebuffer = false;
>     return true;
>   }
> --------------------------------------------------------
>
> 本当は、シングルバッファモードでも、バッファをユーザが
> 指定できるようにしたいのですが、
> バッファの指定は、connect()時にConnectorProfileで渡ってくるものなので、
> connect()が発行されるまではバッファの型はInPortBaseでは分かりません。
> そのため、ポート接続が無いときにバッファをどうするかの検討が必要そうです。
> # 今はオリジナルと同様にring_bufferを入れておくようにしてあります。
>
> 清水
> --- On Thu, 2012/10/18, Ando Noriaki <n-ando @ aist.go.jp> wrote:
>
>> 安藤です
>>
>> 清水先生のおっしゃる通り、InPortではsinglebufferタイプのポートに固定
>> かつバッファは ring_buffer固定という実装になっていますね。
>> バッファ自体はプロパティで与えて変更できないといけませんね。
>> これは修正します。とりあえずチケットは発行しました。
>>
>> ちなみに、OutPortのほうは大丈夫でしたでしょうか?
>>
>>
>>
>>
>>
>> 2012年10月16日 12:04 Masayuki Shimizu <masayuki.shimizu @ aist.go.jp>:
>> > OpenRTM-aist開発チーム
>> > 皆様
>> >
>> > 静岡大の清水です。
>> >
>> > データポートのバッファを独自のものを作成して使用しようとしています。
>> >
>> > CdrBufferBaseを継承した独自バッファを作成し、
>> > xxxInit()関数でダイナミックロードできる所までは出来ました。
>> >
>> > データポートのバッファとしてこの独自バッファを使用したいのですが、
>> > どうすればよいのでしょうか?
>> >
>> > ソースを読む限りでは、ポート接続時にConnectorProfileに
>> > buffer_typeプロパティを渡せば良さそうですが、上手くいきません。
>> >
>> > 原因を探ったところ、InPortBaseでsingle_bufferモードが固定で設定されており、
>> > デフォルトのring_bufferしか使用できないように実装されています。
>> >
>> > そこで、multi_bufferモード、もしくはsingleの場合でも独自バッファを使用したいのですが、
>> > RTMのソースに手を加えないで実現可能でしょうか?
>> >
>> > よろしくお願いいたします。
>> >
>> > 清水
>> > --------------------
>> > Masayuki Shimizu
>> > Assistant Professor
>> > Dept. of Mechanical Engineering, Shizuoka Univ.
>> > 3-5-1, Johoku, Naka-ku, Hamamatsu 432-8561, JAPAN
>> > TEL/FAX: +81-53-478-1061
>> > Email: tmsimiz @ ipc.shizuoka.ac.jp
>> > _______________________________________________
>> > openrtm-users mailing list
>> > openrtm-users @ openrtm.org
>> > http://www.openrtm.org/mailman/listinfo/openrtm-users
>>
>>
>>
>> --
>> 安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
>>     統合知能研究グループ 主任研究員, 博士(工学)
>>     〒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
>>
> _______________________________________________
> openrtm-users mailing list
> openrtm-users @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users



-- 
安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
    統合知能研究グループ 主任研究員, 博士(工学)
    〒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


More information about the openrtm-users mailing list