[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