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

Shuichiro Namiki schu @ tjsys.co.jp
2011年 3月 2日 (水) 10:50:13 JST


【宛】産総研 栗原様

ご回答ありがとうございます。
展開いただいた情報を元に修正・確認してみたいと思います。

並木

----- 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 メーリングリストの案内