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

Masayuki Shimizu masayuki.shimizu @ aist.go.jp
2012年 10月 18日 (木) 14:01:46 JST


安藤様

清水です。

> ちなみに、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
> 


More information about the openrtm-users mailing list