[openrtm-users 00824] ポートの名前について

3 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 4日 19時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00824] ポートの名前について

OpenRTM-aist開発者の皆様

ポートの名前について教えてください。

0.4系では、ポートに関連する名前として、
バッファ自体の名前とRTC上のポートの名前、
の二つがあって、
バッファ名はInPort/OutPortのコンストラクタ引数、
ポート名はregisterInPort/registerOutPortの
引数として指定するようになっていたと思います。
そして、RTC/PortのCORBAインタフェースから
取得される名前は上記のポート名の方だったと思います。

ところが、1.0.0では、
registerInPort/registerOutPortで
指定する名前は特に利用されることも無く、
RTC/PortのCORBAインタフェースで取得される名前は、
InPort/OutPortのコンストラクタ引数の方と
なっているように見受けられます。

これは、ポート関連の名前の位置付けが
変わったと考えればよろしいのでしょうか?
0.4系ではバッファの名前とポートの名前が
分離されていましたが、
今後はそれらが統一されて、
それぞれを独立して名前付けしない方針
となるのでしょうか?

# ポート関連の名前で重要なのは、
CORBAインタフェースから取得する名前の方なので、
0.4系での実装を変更する必要が出てきそうです。

よろしくお願いいたします。

静岡大 清水

未定義
root
オフライン
Last seen: 4日 19時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00825] ポートの名前について

清水様

安藤です

ポート周りは1.0でだいぶ構造を変えました。
詳しくは添付のクラス図をご覧ください。

以前は、InPort<>, OutPort<> というものはバッファを
主体としたクラスだったのですが、1.0からは、
Portそのものになり、バッファは、接続毎に生成されるConnector
オブジェクト毎に一つづつ割り当てられるようになっています。

これにより、以前問題になっていた複数のInPortへの出力ができない
といった問題が解決されました。

> OpenRTM-aist開発者の皆様
>
> ポートの名前について教えてください。
>
> 0.4系では、ポートに関連する名前として、
> バッファ自体の名前とRTC上のポートの名前、
> の二つがあって、
> バッファ名はInPort/OutPortのコンストラクタ引数、
> ポート名はregisterInPort/registerOutPortの
> 引数として指定するようになっていたと思います。
> そして、RTC/PortのCORBAインタフェースから
> 取得される名前は上記のポート名の方だったと思います。
>
> ところが、1.0.0では、
> registerInPort/registerOutPortで
> 指定する名前は特に利用されることも無く、
> RTC/PortのCORBAインタフェースで取得される名前は、
> InPort/OutPortのコンストラクタ引数の方と
> なっているように見受けられます。
>
> これは、ポート関連の名前の位置付けが
> 変わったと考えればよろしいのでしょうか?
> 0.4系ではバッファの名前とポートの名前が
> 分離されていましたが、
> 今後はそれらが統一されて、
> それぞれを独立して名前付けしない方針
> となるのでしょうか?

上記の理由により、InPort/OutPortについては、バッファにつけていた
名前をPortの名前とし、registerInPortなどで渡す名前は、InPortの
名前と同じであるという前提で、ポートのプロパティを取得するためだけに
使用しています。

本当は、どちらか一つにしたいところなのですが、0.4からのインターフェースの
互換性のためこのような仕様になっています。
rtc-templateやRTCBuilderでコードを生成する限りでは、これらの2つの名前は
必ず同じですので問題は起こりません。ただし、自分でregisterInPort
などを呼んで動的にポートを操作する場合には問題になるかもしれません。

void RTObject_impl::registerInPort(InPortBase& inport);

というシグニチャの関数も用意したいと思います。
さらに、以前のregisterInPort関数は

void RTObject_impl::registerInPort(const char* name, InPortBase& inport)
{
inport.setName(name);
registerInPort(inport);
}

のようにしようかと思いますが、いかがでしょうか?

> # ポート関連の名前で重要なのは、
> CORBAインタフェースから取得する名前の方なので、
> 0.4系での実装を変更する必要が出てきそうです。
>
> よろしくお願いいたします。
>
> 静岡大 清水

root
オフライン
Last seen: 4日 19時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00826] ポートの名前について

安藤様

ご返答ありがとうございます。

> 本当は、どちらか一つにしたいところなのですが、0.4から
のインターフェースの
> 互換性のためこのような仕様になっています。
> rtc-templateやRTCBuilderでコードを生成する限りでは、こ
れらの2つの名前は
>
必ず同じですので問題は起こりません。ただし、自分でregisterInPort
> などを呼んで動的にポートを操作する場合には問題になるか
もしれません。

以前から、ポートに二つの名前があって、
少しややこしいとは感じていたので、
一つに統一されるとわかりやすくなると思います。
ただ、私が0.4系で実装をしていたときは、
その点を逆手にとり、
バッファとポートに別名を割り当てるという
変なこともしていたので、少し困惑したまでです。

> void RTObject_impl::registerInPort(InPortBase&
> inport);
>
> というシグニチャの関数も用意したいと思います。
> さらに、以前のregisterInPort関数は
>
> void RTObject_impl::registerInPort(const char* name,
> InPortBase& inport)
> {
> inport.setName(name);
> registerInPort(inport);
> }
>
> のようにしようかと思いますが、いかがでしょうか?

0.4系との互換性維持のために、
そのような関数を用意して頂けると助かります。
これで0.4系のソースに手を入れなくても
よくなります。

清水

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2210
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク