[openrtm-users 01637] Re: ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください

Shuichiro Namiki schu @ tjsys.co.jp
2011年 3月 2日 (水) 15:25:08 JST


【宛】産総研 栗原様

並木です。

ご送付いただいた資料より、キャストしてget_portsできなかった問題点は
解決しました。ありがとうございます。

DataFlowComponentのimport対象を
RTC.DataFlow〜からOpenRTM.DataFlow〜に変えたところ、
キャストの必要なく、get_ports関数を使えるようになりました。

上記問題は解決したのですが、
その後、connectを実行すると失敗で返ってきてしまいます。
(connectの戻り値がReturnCode_t.RTC_OKではない)

connect後のConnectProfileHolderの内容のうち、
value.properties内容がなく、そこが問題だと考えているのですが、
connectの処理でvalue.propertiesに何が設定されるのか
ご教授いただけますでしょうか。

また、いただいたソースでConnectProfileのpropertiesに
connect直前に設定しているNVListHolderの部分は
使用していないのですが、この部分はどういった処理になりますでしょうか。
(connectするのに必須ということはありますか?)


以上です。立て続けの質問で申し訳ありませんが、
よろしくお願いいたします。


----- Original Message ----- 
From: "Shuichiro Namiki" <schu @ tjsys.co.jp>
To: "kurihara shinji" <shinji.kurihara @ aist.go.jp>
Cc: <OpenRTM-users @ m.aist.go.jp>
Sent: Wednesday, March 02, 2011 10:50 AM
Subject: [openrtm-users 01630] Re: ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください


> 【宛】産総研 栗原様
>
> ご回答ありがとうございます。
> 展開いただいた情報を元に修正・確認してみたいと思います。
>
> 並木
>
> ----- Original Message ----- 
> From: "kurihara shinji" <shinji.kurihara @ aist.go.jp>
> To: "Shuichiro Namiki" <schu @ tjsys.co.jp>
> Cc: <OpenRTM-users @ m.aist.go.jp>
> Sent: Wednesday, March 02, 2011 2:17 AM
> Subject: [openrtm-users 01629] Re: ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください
>
>
>> 並木様
>>
>> 産総研の栗原です。
>>
>> OpenRTM-aistのバージョン0.4系と1.0系とでは、get_ports()のIDLでの定義
>> が変更されています。(他にもIDLレベルでの変更もございます。)
>> 0.4系 -> PortList get_ports();
>> 1.0系 -> PortServiceList get_ports();
>>
>> よって、PortListHolderではなく、PortServiceListHolderを使用するように
>> 変更する事で接続できるようになるかと思います。
>> 以下のソースを、
>>> PortListHolder p1 = new PortListHolder();
>>> PortListHolder p2 = new PortListHolder();
>> PortServiceListHolder p1 = new PortServiceListHolder();
>> p1.value = new PortService[0];
>> PortServiceListHolder p2 = new PortServiceListHolder();
>> p2.value = new PortService[0];
>> のように変更し、ご確認頂けますでしょうか?
>>
>> 参考までに、OpenRTM-aist-Java-1.0.0のSimpleIOサンプルに
>> 含まれておりますConnectorComp.javaを添付させて頂いて
>> おります。
>>
>> また、以前、株式会社セックの中本様が0.4.2から1.0.0への変更点を
>> まとめてくださった資料をこちらのMLに流して下さいました。
>> とてもわかりやすくまとめて下さっておりますので、こちらの資料も
>> 添付させて頂いております。
>>
>>
>> 以上、宜しくお願い致します。
>>
>>
>>
>> On Tue, 01 Mar 2011 15:55:56 +0900
>> Shuichiro Namiki <schu @ tjsys.co.jp> wrote:
>>
>>> 並木と申します。
>>> 今回、初めて質問いたします。よろしくお願いします。
>>>
>>> 最近、OpenRTMをはじめまして、
>>> 別の方が0.4.2で作成した内容を1.0.0で
>>> 作り直すことになりました。
>>> (言語はJavaを使用しています)
>>>
>>> 0.4.2では以下のようなソースでポートを接続していたのですが、
>>> 1.0.0ではDataFlowComponentからget_portsを使用しようとすると
>>> ClassCastExceptionを起こしてしまい、キャストできずに
>>> PortServiceの取得ができません。
>>> (0.4.2で動作することは確認が取れております)
>>>
>>> 0.4.2→1.0.0にする上でどこに差分があって、
>>> どのように修正すればよいか
>>> ご存知な方教えていただけますようお願いいたします。
>>>
>>>
>>> (0.4.2で作成済みのソースから抜粋)
>>> ====
>>> String connector_id = null;
>>> ConnectorProfile prof = null;
>>>
>>> // サーバ側のCobraConsumerを取得
>>> CorbaConsumer consumerServerDB = null;
>>> ORB orb = ORBUtil.getOrb();
>>> CorbaNaming naming = new CorbaNaming(orb, nameServer);
>>>  // nameServerは文字列"localhost:2809"
>>>
>>> consumerServerDB =
>>>  new CorbaConsumer<DataFlowComponent>(DataFlowComponent.class);
>>> consumerServerDB.setObject(naming.resolve(serverURI + ".rtc"));
>>>  // serverURIは任意指定の文字列
>>>
>>> // ローカル側のCobraConsumerを取得
>>> CorbaConsumer consumerLocalDB = null;
>>> consumerLocalDB =
>>>  new CorbaConsumer<DataFlowComponent>(DataFlowComponent.class);
>>> consumerLocalDB.setObject(naming.resolve(thisConsumerName + ".rtc"));
>>>  // thisConsumerNameは任意指定の文字列
>>>
>>> PortListHolder p1 = new PortListHolder();
>>> PortListHolder p2 = new PortListHolder();
>>>
>>> // サーバ側とローカル側のポートを取得
>>> // ★ここで1.0.0の場合はキャスト失敗する★
>>> p1.value =
>>>  ((DataFlowComponent) consumerServerDB._ptr()).get_ports();
>>> p2.value =
>>>  ((DataFlowComponent) consumerLocalDB._ptr()).get_ports();
>>>
>>> prof = new ConnectorProfile();
>>> connector_id = serverURI + "_" + thisConsumerName;
>>> prof.connector_id = connector_id;
>>> prof.name = connector_id;
>>> prof.properties = new NameValue[0];
>>> prof.ports = new Port[2]; // 1.0.0ではPortからPortServiceに変更
>>> prof.ports[0] = p1.value[0];
>>> prof.ports[1] = p2.value[0];
>>>
>>> // ローカルとサーバのポートを接続
>>> ConnectorProfileHolder proflist = new ConnectorProfileHolder(prof);
>>> proflist.value = prof;
>>> ReturnCode_t ret = prof.ports[0].connect(proflist);
>>> ====
>>>
>>> (ソースから抜粋)の9行目、14行目を<DataFlowComponent>ではなく、
>>> <RTObject>に変えてみたりもしたのですが、
>>> RTCBuilderで生成する際にDataFlowを指定しているので
>>> 今度は(というかやはり)最後のconnectで接続失敗してしまいます。
>>>
>>>
>>> 以上です。よろしくお願いいたします。
>>>
>>>
>>
>>
>> -- 
>> ----------
>> 栗原 眞二 <shinji.kurihara @ aist.go.jp>
>>
>> 独立行政法人産業技術総合研究所
>>  知能システム研究部門 統合知能研究グループ
>>  〒305-8568
>>  茨城県つくば市梅園1-1-1 中央第2
>>
>>  TEL: 029-861-5956
>>
>
> 




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