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

Shuichiro Namiki schu @ tjsys.co.jp
2011年 3月 2日 (水) 17:32:00 JST


【宛】産総研 片見様

並木です。ご回答ありがとうございます。

> プロパティには以下の設定が必要となります。
> ・"dataport.interface_type"
> ・"dataport.dataflow_type"
> ・"dataport.subscription_type"
>
プロパティへの設定とのことですが、
こちらはプログラム上でできるものでしょうか?
(それともRTCBuilderでの作成時などに設定するものですか?)

可能でしたら手順をご教授いただけますか。
不勉強で申し訳ありませんが、よろしくお願いいたします。

現状、connectの戻り値として返される値は「5」です。
「前提条件が満たされていない」ということになりますが、
connect実行直前でBreakして、RT System Editor上で確認する限り、
接続対象のコンポーネントが両方表示されております。

この満たされていない前提条件が
教えていただいたinterface_typeなど3種の設定ということでしょうか。


以上です。よろしくお願いいたします。


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


> 並木様
>
> 産総研 片見です。
>
>> 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 メーリングリストの案内