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

ts suehiro @ is.uec.ac.jp
2010年 5月 18日 (火) 12:38:29 JST


安藤様,

末廣です.

たとえば,現在値と目標値を受けて制御を行うコンポーネントを
考えましょう.そのコンポーネントの入力ポートを,
th_cur, th_refとか呼びたいわけです.

それぞれの入力に平滑化のフィルタを入れるために,
inとoutをもつフィルタコンポーネントを使って
複合コンポーネント化したとします.

するとそのポート名は,
comp0.inとcomp1.inになるのだと思うのですが
そのどちらがth_curでどちらがth_refなのでしょうか?
その情報はどこに保持されているのでしょうか?

ちゃんとth_cur, th_refという名前をつけましょうというのが,
以下のOMG仕様の意図していることだと思うのですが違いますか?

> ・ポート名は(OMG RTCの仕様上は)同一RTC内で一意でなければならない
>   formal/08-04-04 p.65
>   Semantics
>   Ports owned by an RTC are distinguished by their names.
>   Therefore, this name should be unique within the target RTC.
>  とある。

名前で区別できる(機能も含めて)というのは,そういうことなのでは?

実装上の制約はあるのかもしれませんが,この辺は重要な議論だと思います.

ご検討よろしくお願いします.


(10/05/18 9:37), Ando Noriaki wrote:
> 末廣様
> 
> 安藤です
> 
>> (10/05/18 1:33), Ando Noriaki wrote:
>>
>>>> 私は,あるコンポーネントが複合コンポーネントか単独のコンポーネントかは
>>>> 実装の問題と考えていました.
>>>> すなわち,1つのコンポーネントの中で名前の衝突はないということです.
>>>
>>> すみません。実装の問題というのはどういう意味なのか教えていただけ
>>> ますでしょうか?
>>
>> ポート名が現状のように,コンポート名.ポート名と名付けられる
>> としても,複合コンポーネントの各ポートの名称は,
>> 複合コンポーネント名.ポート名となるべきではないかということです.
>>
>> 内部コンポーネント名.ポート名では,複合コンポーネントの
>> 内部構造が変わるたびにポート名が変わってしまいますよね.
>> 困りませんか?
> 
> 現在の仕様では、
> ・ポート名は<もともとのownerRTC>.<ポート名>
> ・ポート名は複合化されても変わらない(変更できない)
> ・複合コンポーネントの親は、ポートのリファレンスを保持するだけで
>  実際の管理はもともとの親が行う
> 
> となっていますので、上記の問題は起こりません。
> ただし、複合コンポーネントのポートが子コンポーネント名.ポート名
> となるのは、少々すっきりしないのもわかります。
> 一方で、複合コンポーネントをどんなに階層化しても、
> もともとそのポートが何のどういうポートであるか、名前から
> ある程度分かるという利点もあります。
> 
>> また今の仕様だと,コンポート名というのがコンポーネントの
>> インスタンス名になっているのでインスタンスごとにポート名が
>> 違うというのもやりにくくはないですか?
>> こちらに関しては,プログラム的にはインスタンス名を削る
>> だけですむのでまだよいのですが.
> 
> 確かに、この仕様のために、実装が若干ややこしくなっているのは
> 否めません。ただし、複合コンポーネントで、ポート名がぶつかるケース
> に対処するうまい方法が思いつきませんでした。
> 
> rtc_handleで仮に複合コンポーネントの作成、分解や、ポートの
> 公開、非公開を制御するAPIを提供するとしたら、末廣さんなら
> どのようにしますか?
> 
> 前提として、以下の制約および可能性があります。
> 
> ・ポート名は基本的には外部からは変更できない(内部からはできる)
>  PortProfile は2つの方法で取得される
>  1) RTObject::get_component_profile() から ComponentProfile::port_profiles
>  2) PortService::get_port_profile() から PortProfile
>  前者は複合RTCの親ですり替えることは可能だが、後者は難しいので
> ・ポートのownerも基本的には外部から変更できない(変更されることはない)
> ・ポート名は(OMG RTCの仕様上は)同一RTC内で一意でなければならない
>   formal/08-04-04 p.65
>   Semantics
>   Ports owned by an RTC are distinguished by their names.
>   Therefore, this name should be unique within the target RTC.
>  とある。
> 
> これらの前提を考えると、現在の実装のようにポート名を最初から
> できるだけ一意になるように付ける、というのが実装的にもシンプルで
> ベターな選択であると私は考えています。
> 
> 上記の制約の上で、ポート名を純粋にポート名だけとして、
> かつ複合コンポーネント等にもうまく対処できる方法を思いついた方が
> いらっしゃいましたら、教えていただけないでしょうか?
> 
> #最終手段としてOMGでRTFを立ち上げて仕様を変えてしまう
> #というのもありかもしれませんが。。。。
> 
> ジェフさん
> 
>> 安藤様
>>
>> ジェフです。
>>
>> rtctreeにとって、ポートはいつもコンポーネントかコネクタから取ります。コ
>> ンポーネントの場合、もうどのコンポーネントからか分かるから問題ありませ
>> ん。コネクタの場合、rtctreeは自動的にポートのownerを探して、その情報もも
>> らいます。
> 
> 了解です。ツールの方でうまく対処していただければと思います。
> Pythonなら正規表現も簡単に使えますし。。。。
> 
> 


-- 
Takashi Suehiro, Professor, Intelligent Systems Lab,
Graduate School of Information Systems,
the University of Electro-Communications
Tel: +81-424-43-5655 Fax: +81-424-43-5682
E-mail: suehiro @ is.uec.ac.jp
1-5-1 Chofugaoka, Chofu, Tokyo 1828585, Japan



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