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

Shuichiro Namiki schu @ tjsys.co.jp
2011年 3月 3日 (木) 15:49:04 JST


【宛】産総研 片見様

並木です。ご教授ありがとうございます。

作成しているコンポーネントのポートが
データポートではなく、サービスポート間の接続なのですが、
教えていただいたページの後半に記載されていましたので、
そちらを参考して試してみます。


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


> 並木様
>
> 片見です。
>
>> プロパティへの設定とのことですが、
>> こちらはプログラム上でできるものでしょうか?
> プログラム上から設定することは可能です。
> 以下のように記述することにより、プロパティの設定ができます。
>> > 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;
> RTSystemEditorでデータポート間の接続操作を行った場合、
> 画面が表示され、これらの設定が可能です。
> http://www.openrtm.org/openrtm/ja/content/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%EF%BC%88%E3%83%9D%E3%83%BC%E3%83%88%E9%96%93%E3%81%AE%E6%8E%A5%E7%B6%9A-%E7%B7%A8%EF%BC%89
>
>> (それともRTCBuilderでの作成時などに設定するものですか?)
> RTCBuilderでの作成時には設定は不要です。
>
>> 現状、connectの戻り値として返される値は「5」です。
> connector_id が他の接続の connector_id と重複していないか
> ご確認をお願いいたします。
> connector_id は一意である必要があります。
>
> よろしくお願いいたします。
>
> On Wed, 02 Mar 2011 17:32:00 +0900
> Shuichiro Namiki <schu @ tjsys.co.jp> wrote:
>
>> 【宛】産総研 片見様
>>
>> 並木です。ご回答ありがとうございます。
>>
>> > プロパティには以下の設定が必要となります。
>> > ・"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>
>> >
>> >
>> >
>>
>>
>
>
> 独立行政法人産業技術総合研究所
> 知能システム研究部門 統合知能研究グループ
> 〒305-8568 茨城県つくば市梅園1-1-1 中央第2
> 片見 剛人 <fsi-katami @ aist.go.jp>
>
>
> 




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