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

9 posts / 0 new
Last post
root
Offline
Last seen: 11 hours 33 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01626] ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください

並木と申します。
今回、初めて質問いたします。よろしくお願いします。

最近、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.class);
consumerServerDB.setObject(naming.resolve(serverURI + ".rtc"));
// serverURIは任意指定の文字列

// ローカル側のCobraConsumerを取得
CorbaConsumer consumerLocalDB = null;
consumerLocalDB =
new CorbaConsumer(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行目をではなく、
に変えてみたりもしたのですが、
RTCBuilderで生成する際にDataFlowを指定しているので
今度は(というかやはり)最後のconnectで接続失敗してしまいます。

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

Undefined
root
Offline
Last seen: 11 hours 33 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01629] ポート間の接続について、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 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.class);
> consumerServerDB.setObject(naming.resolve(serverURI + ".rtc"));
> // serverURIは任意指定の文字列
>
> // ローカル側のCobraConsumerを取得
> CorbaConsumer consumerLocalDB = null;
> consumerLocalDB =
> new CorbaConsumer(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行目をではなく、
> に変えてみたりもしたのですが、
> RTCBuilderで生成する際にDataFlowを指定しているので
> 今度は(というかやはり)最後のconnectで接続失敗してしまいます。
>
>
> 以上です。よろしくお願いいたします。
>
>

root
Offline
Last seen: 11 hours 33 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01630] ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください

【宛】産総研 栗原様

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

並木

root
Offline
Last seen: 11 hours 33 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01637] ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください

【宛】産総研 栗原様

並木です。

ご送付いただいた資料より、キャストして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するのに必須ということはありますか?)

以上です。立て続けの質問で申し訳ありませんが、
よろしくお願いいたします。

root
Offline
Last seen: 11 hours 33 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01639] ポート間の接続について、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 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"
> To: "kurihara shinji"
> Cc:
> Sent: Wednesday, March 02, 2011 10:50 AM
> Subject: [openrtm-users 01630] Re: ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください
>
>
> > 【宛】産総研 栗原様
> >
> > ご回答ありがとうございます。
> > 展開いただいた情報を元に修正・確認してみたいと思います。
> >
> > 並木
> >
> > ----- Original Message -----
> > From: "kurihara shinji"
> > To: "Shuichiro Namiki"
> > Cc:
> > 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 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.class);
> >>> consumerServerDB.setObject(naming.resolve(serverURI + ".rtc"));
> >>> // serverURIは任意指定の文字列
> >>>
> >>> // ローカル側のCobraConsumerを取得
> >>> CorbaConsumer consumerLocalDB = null;
> >>> consumerLocalDB =
> >>> new CorbaConsumer(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行目をではなく、
> >>> に変えてみたりもしたのですが、
> >>> RTCBuilderで生成する際にDataFlowを指定しているので
> >>> 今度は(というかやはり)最後のconnectで接続失敗してしまいます。
> >>>
> >>>
> >>> 以上です。よろしくお願いいたします。
> >>>
> >>>
> >>
> >>

root
Offline
Last seen: 11 hours 33 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01640] ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください

【宛】産総研 片見様

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

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

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

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

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

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

root
Offline
Last seen: 11 hours 33 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01643] ポート間の接続について、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 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"
> To: "Shuichiro Namiki"
> Cc: "kurihara shinji" ;
>
> 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 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"
> >> To: "kurihara shinji"
> >> Cc:
> >> Sent: Wednesday, March 02, 2011 10:50 AM
> >> Subject: [openrtm-users 01630] Re: ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください
> >>
> >>
> >> > 【宛】産総研 栗原様
> >> >
> >> > ご回答ありがとうございます。
> >> > 展開いただいた情報を元に修正・確認してみたいと思います。
> >> >
> >> > 並木
> >> >
> >> > ----- Original Message -----
> >> > From: "kurihara shinji"
> >> > To: "Shuichiro Namiki"
> >> > Cc:
> >> > 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 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.class);
> >> >>> consumerServerDB.setObject(naming.resolve(serverURI + ".rtc"));
> >> >>> // serverURIは任意指定の文字列
> >> >>>
> >> >>> // ローカル側のCobraConsumerを取得
> >> >>> CorbaConsumer consumerLocalDB = null;
> >> >>> consumerLocalDB =
> >> >>> new CorbaConsumer(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行目をではなく、
> >> >>> に変えてみたりもしたのですが、
> >> >>> RTCBuilderで生成する際にDataFlowを指定しているので
> >> >>> 今度は(というかやはり)最後のconnectで接続失敗してしまいます。
> >> >>>
> >> >>>
> >> >>> 以上です。よろしくお願いいたします。
> >> >>>
> >> >>>
> >> >>
> >> >>
> >>
> >>
> >
> >
> >
> >
>
>

root
Offline
Last seen: 11 hours 33 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01645] ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください

【宛】産総研 片見様

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

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

root
Offline
Last seen: 11 hours 33 min ago
Joined: 2009-06-23 14:31
[openrtm-users 01646] ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください

並木様

片見です。

> データポートではなく、サービスポート間の接続なのですが、
> 教えていただいたページの後半に記載されていましたので、
> そちらを参考して試してみます。
データポートの接続を想定して回答しておりました。
申し訳ありません。

サービスポート間の接続の場合は、
プロパティの "dataport.interface_type" に
ポート名の設定をお願いします。

examples の MyServiceProvider と MyServiceConsumer で言えば、
"MyService" を設定します。

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

On Thu, 03 Mar 2011 15:49:04 +0900
Shuichiro Namiki wrote:

> 【宛】産総研 片見様
>
> 並木です。ご教授ありがとうございます。
>
> 作成しているコンポーネントのポートが
> データポートではなく、サービスポート間の接続なのですが、
> 教えていただいたページの後半に記載されていましたので、
> そちらを参考して試してみます。
>
>
> ----- Original Message -----
> From: "katami"
> To: "Shuichiro Namiki"
> Cc:
> 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 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"
> >> To: "Shuichiro Namiki"
> >> Cc: "kurihara shinji" ;
> >>
> >> 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 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"
> >> >> To: "kurihara shinji"
> >> >> Cc:
> >> >> Sent: Wednesday, March 02, 2011 10:50 AM
> >> >> Subject: [openrtm-users 01630] Re: ポート間の接続について、0.4.2と1.0.0の差分と解決方法を教えてください
> >> >>
> >> >>
> >> >> > 【宛】産総研 栗原様
> >> >> >
> >> >> > ご回答ありがとうございます。
> >> >> > 展開いただいた情報を元に修正・確認してみたいと思います。
> >> >> >
> >> >> > 並木
> >> >> >
> >> >> > ----- Original Message -----
> >> >> > From: "kurihara shinji"
> >> >> > To: "Shuichiro Namiki"
> >> >> > Cc:
> >> >> > 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 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.class);
> >> >> >>> consumerServerDB.setObject(naming.resolve(serverURI + ".rtc"));
> >> >> >>> // serverURIは任意指定の文字列
> >> >> >>>
> >> >> >>> // ローカル側のCobraConsumerを取得
> >> >> >>> CorbaConsumer consumerLocalDB = null;
> >> >> >>> consumerLocalDB =
> >> >> >>> new CorbaConsumer(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行目をではなく、
> >> >> >>> に変えてみたりもしたのですが、
> >> >> >>> RTCBuilderで生成する際にDataFlowを指定しているので
> >> >> >>> 今度は(というかやはり)最後のconnectで接続失敗してしまいます。
> >> >> >>>
> >> >> >>>
> >> >> >>> 以上です。よろしくお願いいたします。
> >> >> >>>
> >> >> >>>
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >
> >> >> >
> >> >>
> >> >>
> >> >
> >> >
> >> >
> >> >
> >>
> >>

Log in or register to post comments

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK