[openrtm-users 00432] 「1対多のサービスポート接続のメッセージ」について

2 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 3日 5時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00432] 「1対多のサービスポート接続のメッセージ」について

産総研の中島です。

「1対多のサービスポート接続のメッセージ」について質問させてください。

サンプルRTC「serviceAComp」「serviceBComp」「serviceCComp」
を3つ、以下のようなIDLとgen.shを用いて作成し、各々のRTCでは、
それぞれ一つずつ「provider/consumer」用のポートを用意して、

 [provider A]----[consumer B]
  ----[consumer C]
 
 [provider B]----[consumer A]
  ----[consumer C]
 
 [provider C]----[consumer A]
  ----[consumer B] 

のような全てのポートが「1対2」となるようにRtc-Linkで接続し、動作確認
をしていたところ、正常にサービスのやり取りは出来ているようですが、
ポート接続時に

”Port interfaces do not match completely”

というアラームメッセージが表示されますが、問題ないでしょうか?

イメージとして、同じポートに別の複数RTCのポートから接続する場合に、
プロバイダ/コンシューマで整合させる「インスタンス名(例えば以下の"BtoA"とか)」
をユーザが選択する必要があるかと思えたのですが、実際は上記アラームが出て「OK」を
すると内部で自動的に選択しているようです。

自動的に選択出来るにも関わらず、このアラームが出るということは、
今回のようなサービスポートの接続方法をRTMとして推奨していないものなので
しょうか?

もしくは、このアラームは別の何らかの修正が必要であることを意味しているの
でしょうか?

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

--[serviceA.idl]---
interface srvA {
void serviceA();
};

--[serviceB.idl]---
interface srvB {
void serviceB();
};

--[serviceC.idl]---
interface srvC {
void serviceC();
};

---[gen.sh(serviceACompの場合)]---
/usr/local/bin/rtc-template -bcxx --module-name=serviceA
--module-desc=serviceA --module-version=0.1 --module-vendor=AIST
--module-category=Generic --module-comp-type=DataFlowComponent
--module-act-type=SPORDIC --module-max-inst=10
--service=providerA:BtoA:srvA --service=providerA:CtoA:srvA
--service-idl=serviceA.idl --consumer=consumerA:AtoB:srvB
--consumer-idl=serviceB.idl --consumer=consumerA:AtoC:srvC
--consumer-idl=serviceC.idl

---[gen.sh(serviceBCompの場合)]---
/usr/local/bin/rtc-template -bcxx --module-name=serviceB
--module-desc=serviceB --module-version=0.1 --module-vendor=AIST
--module-category=Generic --module-comp-type=DataFlowComponent
--module-act-type=SPORDIC --module-max-inst=10
--service=providerB:AtoB:srvB --service=providerB:CtoB:srvB
--service-idl=serviceB.idl --consumer=consumerB:BtoA:srvA
--consumer-idl=serviceA.idl --consumer=consumerB:BtoC:srvC
--consumer-idl=serviceC.idl

---[gen.sh(serviceCCompの場合)]---
/usr/local/bin/rtc-template -bcxx --module-name=serviceC
--module-desc=serviceC --module-version=0.1 --module-vendor=AIST
--module-category=Generic --module-comp-type=DataFlowComponent
--module-act-type=SPORDIC --module-max-inst=10
--service=providerC:AtoC:srvC --service=providerC:BtoC:srvC
--service-idl=serviceC.idl --consumer=consumerC:CtoA:srvA
--consumer-idl=serviceA.idl --consumer=consumerC:CtoB:srvB
--consumer-idl=serviceB.idl

未定義
root
オフライン
Last seen: 3日 5時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00434] 「1対多のサービスポート接続のメッセージ」について

中島 様

栗原です。

> ポート接続時に
>
> ”Port interfaces do not match completely”
>
> というアラームメッセージが表示されますが、問題ないでしょうか?
RtcLinkでは、どのproviderポートのオブジェクトとconsumerポートのオブジェク
トが接続可能かのチェックを行っており、その際に、どちらかのポートに登録さ
れているオブジェクトの数の最大数個の接続が可能ではない場合に警告メッセー
ジを出力するようになっております。
ですので今回の場合は特に問題はありません。

もし、"No corresponding port interface."のようなメッセージがでた場合は
どのオブジェクトも接続可能ではないという事ですので、再度、コンポーネン
トを確認する必要があります。

今回のserviceACompのproviderポートとserviceBCompのconsumerポートの接続
について説明させて頂きますと、 serviceACompのproviderポートは、

m_providerAPort.registerProvider("CtoA", "srvA", m_CtoA); ---- (1)
m_providerAPort.registerProvider("BtoA", "srvA", m_BtoA); ---- (2)

のように、一つのポートにm_CtoAとm_BtoAオブジェクトが登録されております。

一方、serviceBCompのconsumerポートは、

m_consumerBPort.registerConsumer("BtoA", "srvA", m_BtoA); ---- (3)
m_consumerBPort.registerConsumer("BtoC", "srvC", m_BtoC); ---- (4)

のようにこちらも一つのポートにm_BtoAとm_BtoCオブジェクトが登録されてお
ります。

providerポート、consumerポート共に2つのオブジェクトが登録されております
が、これらの内、(2)-(3)の組合せしか接続可能ではなく、『どちらかのポート
に登録されているオブジェクトの数の最大数個の接続が可能ではない場合』に
警告メッセージがでるようになっていますので、ご報告頂きましたように警告
が出力されたようです。

※ サービスポートの接続では、providerポートとconsumerポートのインスタン
ス名とインターフェース名が同じである必要があります。

以上、
長文になり申し訳ございません。 宣しくお願い致します。

> 産総研の中島です。
>
>
> 「1対多のサービスポート接続のメッセージ」について質問させてください。
>
>
> サンプルRTC「serviceAComp」「serviceBComp」「serviceCComp」
> を3つ、以下のようなIDLとgen.shを用いて作成し、各々のRTCでは、
> それぞれ一つずつ「provider/consumer」用のポートを用意して、
>
>  [provider A]----[consumer B]
>   ----[consumer C]
>  
>  [provider B]----[consumer A]
>   ----[consumer C]
>  
>  [provider C]----[consumer A]
>   ----[consumer B] 
>
> のような全てのポートが「1対2」となるようにRtc-Linkで接続し、動作確認
> をしていたところ、正常にサービスのやり取りは出来ているようですが、
> ポート接続時に
>
> ”Port interfaces do not match completely”
>
> というアラームメッセージが表示されますが、問題ないでしょうか?
>
>
> イメージとして、同じポートに別の複数RTCのポートから接続する場合に、
> プロバイダ/コンシューマで整合させる「インスタンス名(例えば以下の"BtoA"とか)」
> をユーザが選択する必要があるかと思えたのですが、実際は上記アラームが出て「OK」を
> すると内部で自動的に選択しているようです。
>
> 自動的に選択出来るにも関わらず、このアラームが出るということは、
> 今回のようなサービスポートの接続方法をRTMとして推奨していないものなので
> しょうか?
>
> もしくは、このアラームは別の何らかの修正が必要であることを意味しているの
> でしょうか?
>
>
> よろしくお願いいたします。
>
>
> --[serviceA.idl]---
> interface srvA {
> void serviceA();
> };
>
> --[serviceB.idl]---
> interface srvB {
> void serviceB();
> };
>
> --[serviceC.idl]---
> interface srvC {
> void serviceC();
> };
>
> ---[gen.sh(serviceACompの場合)]---
> /usr/local/bin/rtc-template -bcxx --module-name=serviceA
> --module-desc=serviceA --module-version=0.1 --module-vendor=AIST
> --module-category=Generic --module-comp-type=DataFlowComponent
> --module-act-type=SPORDIC --module-max-inst=10
> --service=providerA:BtoA:srvA --service=providerA:CtoA:srvA
> --service-idl=serviceA.idl --consumer=consumerA:AtoB:srvB
> --consumer-idl=serviceB.idl --consumer=consumerA:AtoC:srvC
> --consumer-idl=serviceC.idl
>
> ---[gen.sh(serviceBCompの場合)]---
> /usr/local/bin/rtc-template -bcxx --module-name=serviceB
> --module-desc=serviceB --module-version=0.1 --module-vendor=AIST
> --module-category=Generic --module-comp-type=DataFlowComponent
> --module-act-type=SPORDIC --module-max-inst=10
> --service=providerB:AtoB:srvB --service=providerB:CtoB:srvB
> --service-idl=serviceB.idl --consumer=consumerB:BtoA:srvA
> --consumer-idl=serviceA.idl --consumer=consumerB:BtoC:srvC
> --consumer-idl=serviceC.idl
>
> ---[gen.sh(serviceCCompの場合)]---
> /usr/local/bin/rtc-template -bcxx --module-name=serviceC
> --module-desc=serviceC --module-version=0.1 --module-vendor=AIST
> --module-category=Generic --module-comp-type=DataFlowComponent
> --module-act-type=SPORDIC --module-max-inst=10
> --service=providerC:AtoC:srvC --service=providerC:BtoC:srvC
> --service-idl=serviceC.idl --consumer=consumerC:CtoA:srvA
> --consumer-idl=serviceA.idl --consumer=consumerC:CtoB:srvB
> --consumer-idl=serviceB.idl

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

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

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

Choreonoid

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

OpenHRP3

動力学シミュレータ

OpenRTP

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

産総研RTC集

産総研が提供するRTC集

TORK

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

DAQ-Middleware

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