[openrtm-users 00940] Re: 同一インターフェースのProvider,Consumerを持つサービスポートの不具合(OpenRTM-aist 0.4.2 C++)

Ando Noriaki n-ando @ aist.go.jp
2009年 9月 4日 (金) 12:07:15 JST


小島様

安藤です

いつもお世話になっております。

> もしかしたら、バグなのでは?ということが見つかったので報告させていただきます。
> 使っているVersionは0.4.2のC++で、Ubutnsu 8.0.4を使っています。

すみません。ドキュメントがリファレンスマニュアルしかないので、わかりにくいと思いますが、
バグではなくて仕様です。詳細は、CorbaPort.h もしくは、
http://www.is.aist.go.jp/rt/OpenRTM-aist/doxygen/ClassReference/classRTC_1_1CorbaPort.html
をご覧ください。


静的にしか対応関係を定義できないので使いづらいのですが、
同一typeのインターフェースがポートに多数存在しても、
任意のPorvider-Consumerを接続することはできます。

具体的には、サービスポートにインターフェースを登録する際に
registerProviderやregisterConsumerの第1引数に与える、
インスタンス名を対応させたい者同士で合わせてみていただけないでしょうか?

たとえば、すべて同一のMyService型のProviderとConsumerを
同じポートに持つRTC-AとRTC-Bがある場合、

RTC-A:
m_ServicePort.registerProvider("myserviceA", "MyService", m_myserviceProvider);
m_ServicePort.registerConsumer("myserviceB", "MyService", m_myserviceConsumer);

RTC-B:
m_ServicePort.registerProvider("myserviceB", "MyService", m_myserviceProvider);
m_ServicePort.registerConsumer("myserviceA", "MyService", m_myserviceConsumer);

のように登録してあげると、AのProviderとBのConsumer、
BのProviderとAのConsumerが接続されます。

なお、1.0-RC1でも、サービスポートは同じ実装になっております。
ただし、RELEASEまでにはProviderとConsumerの対応関係を
接続時に与えられるようにしたいと考えております。

ただし、これを実現するためにはRTSystemEditorの方も変更しなければならないので
もしかすると1.0-RELEASEには入らないかもしれません。




> 同一インターフェース(Interface name, type
> nameともに、同じ名前)のProvider,Consumerを持つサービスポートを他のコンポーネントと接続しました。
> すると、自分の中の、ServicePortとConsumerPortをつないでしまう現象が発生しました。(外部と接続することもあるので、動作が不定です)
> なお、接続にはRTCLinkを使って接続をいたしました。
>
> ただし、厳密には、実装時に、デフォルトのコンストラクタを拡張し、
> ServicePort側に、Consumer側の情報を持つものと、持たないもので接続しておりますが、
> これの内容が違うというだけで接続がおかしくなるということは、原因ではないと考えます。
>
> 構成したポートの例は以下のようになります。
>
> Service Port
>  - port.port_type : CorbaPort
>
>  - Port Interface Profile
>     - interface name : XXXPort
>     - typename : XXXPort
>     - port interface polarity PROVIDED
>
>  - Port Interface Profile
>     - interface name : XXXPort
>     - typename : XXXPort
>     - port interface polarity REQUIRED
>
> 以下が、再現用のIDLです。
>
> interface XXXPort
> {
>        short set(in string name, in short version);
> };
>
>
>
> この問題を、回避または解決する方法として、
> Interface nameもしくは、type nameを変えることが考えられますが、
> その方法でしか解決できないのでしょうか?
>
> ご存知の方がいらっしゃいましたら、ご教授いただけると幸いです。
>
> また、Version 1.0.0で、この現象についてテストはおこなっていませんが、同じ現象が起こりうるのでしょうか?
> ご教授いただけると幸いです。
>
>
> 環境はOpenRTM-aist-0.4.2, OSはUbuntsu 8.0.4 , コンパイラはgcc 4.2です。
> 以上、よろしくお願いいたします。
>
> __________________________________________________________________
> Takashi KOJIMA
> E-Mail : tkjim48 @ gmail.com
> Skype : tkjim48
> MSN: taka_lx_xl_ @ hotmail.com
>
>
>



-- 
安藤慶昭@独立行政法人産業技術総合研究所 研究員
                  知能システム研究部門 統合知能研究グループ
                  〒305-8568 茨城県つくば市梅園1-1-1 中央第2
                  TEL: 029-861-5981 FAX: 029-862-6631
                  n-ando @ aist.go.jp, n-ando @ ieee.org



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