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

kurihara shinji shinji.kurihara @ aist.go.jp
2011年 3月 2日 (水) 02:17:53 JST


並木様

産総研の栗原です。

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
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: ConnectorComp.java
型:         text/x-java
サイズ:     6483 バイト
説明:       無し
URL:        <http://www.openrtm.org/pipermail/openrtm-users/attachments/20110302/0212fca4/attachment-0001.java>
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: AboutOpenRTM-aist-1.0.0-RC1.pdf
型:         application/pdf
サイズ:     1026743 バイト
説明:       無し
URL:        <http://www.openrtm.org/pipermail/openrtm-users/attachments/20110302/0212fca4/attachment-0001.pdf>


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