[openrtm-users 01169] Re: ポート名の設定について

Tasuku Owada oowada @ sec.co.jp
2010年 3月 19日 (金) 17:10:35 JST


産総研 安藤様

株式会社セックの大和田です。

> 1) bool RTObject_impl::addPort(PortBase& port);
を使用してポートを追加しておりました。

> 2) bool RTObject_impl::addPort(PortService_ptr port);
については検討できておりませんでした。
ご指摘ありがとうございます。

しかし、
ブリッジRTCはOpenRTM-aistのコンポーネントですが、
複合化したいコンポーネントは別の異なるミドルウェア上の
コンポーネントですので、PortService_ptr が取得できません。

ブリッジRTCでは内部的にポートを作成し、
作成したポートを経由することで、複合化しているコンポーネントのポート
を利用できるような仕組みを検討しておりますので、
複合コンポーネントのように、下位コンポーネントのPortService_ptrを取得して
> 2) bool RTObject_impl::addPort(PortService_ptr port);
でポートを追加することができません。

ブリッジRTC内で作成(コンストラクト)したポートに対して、
1)ポート名変更
 void PortBase::setName(const char* name);
2)プロパティ初期化
 void InPortBase::init(coil::Properties& prop);
3)ポート登録
 bool RTObject_impl::addPort(PortService_ptr port);
とすることで、BridgeRTCに"Comp1.port"というポートを追加
することを検討しているのですが、コンストラクタで渡したポート名を
後から変更すると、具体的にどのような問題が生じますでしょうか?

以上です、宜しくお願い致します


Ando Noriaki さんは書きました:
> 株式会社セック 大和田様
> 
> 産総研 安藤です
> 
> 複合コンポーネントでポートをaddPortで追加する際、
> どちらの関数で行っていますでしょうか?
> 
> 1) bool RTObject_impl::addPort(PortBase& port);
> 2) bool RTObject_impl::addPort(PortService_ptr port);
> 
> 1) は内部的にポートを追加するための関数、
> 2) は外部のポートを自分のポートのように登録する関数
> となっています。
> 
> 複合コンポーネントを作成する際には、2) の addPort() を
> 使用することになると思うのですが、いかがでしょうか?
> 2) の関数の場合、ownerの設定は行わないので、ポート名は
> 書き換えられることはありませんが、1) の場合は、当該ポートを
> 自分のポートとして追加するためにポート名が書き換えられることになります。
> 
> 
> 
> 
>> 株式会社セックの大和田です。
>> ご回答ありがとうございます。
>>
>> この度、異なるミドルウェア上にある複数のコンポーネントを複合化して、
>> OpenRTM-aistの一つのコンポーネントとして見せかけたいと考えております。
>> (このコンポーネントを仮にブリッジRTCとします。)
>> ブリッジRTCはRTシステムエディタ上で見たとき、
>> 複合コンポーネントとして見せたいため、
>> ブリッジRTCのポート名は下位コンポーネントのポート名と
>> 同一にしたいと考えております。
>>
>> 以下の図のように、
>> BridgeRTCのポートをComp1とComp2の持つ
>> ポートと同一にしたい。
>>
>>            BridgeRTC
>>            +------------+
>>            |            ■Comp1.port
>>            |            |
>>            |            ■Comp2.port
>>            +------------+
>>                  |
>> ------------------+-----------------
>> |            |
>>  +-------+            +-------+
>>  |       |            |       |
>>  |       ■Comp1.port |       ■Comp2.port
>>  |       |            |       |
>>  +-------+            +-------+
>>   Comp1                Comp2
>>
>> ※ BridgeRTCはOpenRTM-aistとし、Comp1,2は異なるミドルウェアとする
>>
>> BridgeRTCに対して"Comp1.port"という名前でAddInPort/AddOutPortを行うと、
>> "BridgeRTC.port"に変換されてしまうため、後から変更する方法を検討していました。
>>
>>
>> 以上です、宜しくお願い致します。
>>
>>
>> Ando Noriaki さんは書きました:
>>> 大和田様
>>>
>>> 安藤です
>>>
>>> ポート名の制限についてはドキュメントに記述がありませんが、
>>> 実際には "." を使用することができません。
>>> 申し訳ありませんが、"." を使用しないようにお願いいたします。
>>>
>>>
>>>> 産総研 安藤様
>>>>
>>>> お世話になっております。
>>>> 株式会社セックの大和田と申します。
>>>>
>>>> ポート名に設定について2点質問があります。
>>>>
>>>> 1.
>>>> AddInPort/AddOutPort でポートを追加する場合に、
>>>> ポート名に"."を含んだ文字列を指定すると、
>>>> 以下のように設定されてしまいます。
>>>> 例)
>>>> コンポーネント名 :sample
>>>> 追加するポート名 :device.port
>>>> 予想されるポート名:sample.device.port
>>>> -------------------------------
>>>> 設定されるポート名:sample.port
>>>>
>>>> 調査した結果、PortBase::setOwnerにて、
>>>> ポート名を"."区切りにして、その末尾だけを
>>>> 取得しているようなのですが、
>>>> これにはどのような意図があるのでしょうか?
>>> 複合コンポーネントを作成する際に、複合コンポーネントが
>>> 外部にexportするポートを名前で区別する必要があります。
>>> そのために、現在ポート名は内部的に
>>> <インスタンス名>.<ポート名>
>>> として扱われています。
>>>
>>> そういうわけですので、ポート名には"."を使用しないようにお願いいたします。
>>>
>>>> 2.
>>>> また、1に関連して、
>>>> ポート名を PortBase::setNameを用いて変更することを
>>>> 検討しているのですが、問題ないでしょうか?
>>> ポート名はコンストラクタで渡したものを変更しないようお願いします。
>>> どうしても名前を変更する必要があるようでしたら、
>>> どのような理由で変更しなければならないか教えていただけますか?
>>> 後から変更する方法を提供することも検討したいと思います。
>>>
>>> 以上、よろしくお願いいたします。
>>>
>>>> 以上、2点、ご教示いただけると幸いです。
>>>> 宜しくお願い致します。
>>>>
>>>> --
>>>> 大和田資(Owada Tasuku)
>>>> 株式会社セック(SEC Co.,LTD) 開発本部 第四開発部
>>>> E-mail:oowada @ sec.co.jp
>>>>
>>>> 〒150-0031 渋谷区桜丘町22-14 NESビル
>>>> Tel:03-5458-7743  Fax:03-5458-7726
>>>>
>>>> ======================================================================
>>>> この電子メールの内容および添付されている情報は、機密情報であると同時に、
>>>> 宛先として意図した特定の受信者のみに送信いたしております。当方の誤送信
>>>> 等により、心当たりのない方が受信された場合は、大変お手数ですが、受信さ
>>>> れましたメール内容は削除していただきますようお願いいたします。
>>>> ======================================================================
>>>>
>>>>
>>>>
>>>
>>>
>> --
>> 大和田資(Owada Tasuku)
>> 株式会社セック(SEC Co.,LTD) 開発本部 第四開発部
>> E-mail:oowada @ sec.co.jp
>>
>> 〒150-0031 渋谷区桜丘町22-14 NESビル
>> Tel:03-5458-7743  Fax:03-5458-7726
>>
>> ======================================================================
>> この電子メールの内容および添付されている情報は、機密情報であると同時に、
>> 宛先として意図した特定の受信者のみに送信いたしております。当方の誤送信
>> 等により、心当たりのない方が受信された場合は、大変お手数ですが、受信さ
>> れましたメール内容は削除していただきますようお願いいたします。
>> ======================================================================
>>
>>
> 
> 
> 

-- 
大和田資(Owada Tasuku)
株式会社セック(SEC Co.,LTD) 開発本部 第四開発部
E-mail:oowada @ sec.co.jp

〒150-0031 渋谷区桜丘町22-14 NESビル
Tel:03-5458-7743  Fax:03-5458-7726

======================================================================
この電子メールの内容および添付されている情報は、機密情報であると同時に、
宛先として意図した特定の受信者のみに送信いたしております。当方の誤送信
等により、心当たりのない方が受信された場合は、大変お手数ですが、受信さ
れましたメール内容は削除していただきますようお願いいたします。
======================================================================



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