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

katami fsi-katami @ aist.go.jp
2011年 3月 2日 (水) 16:35:06 JST


並木様

産総研 片見です。

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

先のメールで添付されていた ConnectorComp.java を参考にして、
value.properties の設定をお願いします。
(135行目〜148行目)

NVListHolder nvholder = new NVListHolder();
if( nvholder.value==null ) nvholder.value = new NameValue[0];
CORBA_SeqUtil.push_back(nvholder, 
        NVUtil.newNVString("dataport.interface_type","corba_cdr"));
CORBA_SeqUtil.push_back(nvholder, 
        NVUtil.newNVString("dataport.dataflow_type", "push"));
CORBA_SeqUtil.push_back(nvholder, 
        NVUtil.newNVString("dataport.subscription_type", "flush"));
prof.properties = nvholder.value;

(上記の prof は ConnectorProfile として記述してあります。)
 プロパティには以下の設定が必要となります。
 ・"dataport.interface_type" 
 ・"dataport.dataflow_type"
 ・"dataport.subscription_type"

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

On Wed, 02 Mar 2011 15:25:08 +0900
Shuichiro Namiki <schu @ tjsys.co.jp> wrote:

> 【宛】産総研 栗原様
> 
> 並木です。
> 
> ご送付いただいた資料より、キャストして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
> >>
> >
> > 
> 
> 


独立行政法人産業技術総合研究所
知能システム研究部門 統合知能研究グループ
〒305-8568 茨城県つくば市梅園1-1-1 中央第2
片見 剛人 <fsi-katami @ aist.go.jp>





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