[openrtm-users 01215] Re: rtc_handle for OpenrtM-aist-1.0.0

Ando Noriaki n-ando @ aist.go.jp
2010年 5月 18日 (火) 01:33:16 JST


安藤です

ご意見ありがとうございます。

> 末廣です.
>
> (10/05/17 23:38), Ando Noriaki wrote:
>
>> ポート名にコンポーネント名を追加したのは、複合コンポーネントを
>> 作成する際に、ポートの公開・非公開を設定するために、
>> ポート名ができるだけ一意になるようにしたかったためそのようにしました。
>>
>> #コンポーネント名をつけても、同一の名前のRTCが2つ複合コンポーネント
>> #内に存在する場合には、これでも十分ではないのですが。。。
>>
>> rtc_handleで扱う際には、コンポーネント名を削ってもかまわないと思うのですが
>> 複合コンポーネントを扱いたい場合に、ポート名が簡単に衝突して、やはり
>> 困るのではないでしょうか?
>
> 私は,あるコンポーネントが複合コンポーネントか単独のコンポーネントかは
> 実装の問題と考えていました.
> すなわち,1つのコンポーネントの中で名前の衝突はないということです.

すみません。実装の問題というのはどういう意味なのか教えていただけ
ますでしょうか?

> したがって複合コンポーネントを作る際に外から見たら一意になるように
> 名前を付け替えるというように考えていました.

それも一つの案としてありかと思いますが、現状、標準インターフェース
の定義上、外部からポートの名前を動的に変更する方法がないので、
コンポーネント名を付加する方法をとりました。

細かい話ですが、ポートのプロファイルは2つの方法で取得できます。
1) RTObject::get_component_profile() から ComponentProfile::port_profiles
2) PortService::get_port_profile() から PortProfile

1) は、複合コンポーネントの場合、port_profileを書き換えて返すことができるので
末廣さんがおっしゃるようにポート名を動的に変更可能です。

2) は、最もオーバーヘッドの少ない方法で実装するなら、子RTCのポートを
そのまま親の複合RTCが参照のみ保持して、自分のポートのように
扱うことになると思いますが、その場合はポートは元々のRTCがつけた
名前を返すのみで、親の複合RTCからは一切触れません。

> 同じカテゴリーのコンポーネントのポートは同じ名前でアクセスできる方が
> 便利ではないでしょうか.

これについては、検討事項とさせてください。
この変更は、ミドルウエア、ツールなど広範囲に影響があるので、
少なくともver.1.1以降になります。



openrtm-users メーリングリストの案内