[openrtm-users 00996] 接続しているポートの対を取得する方法について

4 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 5時間 34秒 前
登録日: 2009-06-23 14:31
[openrtm-users 00996] 接続しているポートの対を取得する方法について

中央大学の小島です。
いつもお世話になっております。

接続しているポートの対を取得する方法について教えてください。
現在コンポーネントから、情報を収集ならできるのでは?、と考え、添付ファイルのような
プログラムを作りました。

そののちに、SimpleIOプログラムをRTCLinkにて接続し、動作をテストしてみました。

テスト内容

./PortScan.exe ConsoleIn0.rtc

-my port length 1
--Port : out
connector's profile length is 1
connector[out_in] registed 2 ports
in of ConsoleOut0
in of ConsoleOut0

すると、以下のように表示されてしまい、
out of ConsoleIn0
in of ConsoleOut0
と表示されると思っていたため、うまくいきませんでした。
ConnectionProfileに格納されているPortの値が正しく格納されていないようです。

なお、./PortScan.exe ConsoleOut0.rtcとした場合には、

-my port length 1
--Port : in
connector's profile length is 1
connector[out_in] registed 2 ports
in of ConsoleOut0
in of ConsoleOut0

と表示されます。取得の仕方に何か問題がございますでしょうか?
もしくは、もっと簡単に接続しているポートの対を情報を取得する方法はありますでしょうか?

ご教授いただけると幸いです。よろしくお願いいたします。

※RTのVersionは、0.4.2です。

未定義
root
オフライン
Last seen: 5時間 34秒 前
登録日: 2009-06-23 14:31
[openrtm-users 00997] 接続しているポートの対を取得する方法について

安藤です

添付ファイルがなかったので、どこが原因か分からないのですが、
一応以下のようなコードでコネクタの情報を取得できます。
ちなみに、コードは0.4.2用です。1.0では、構造体名など微妙に違うのでご注意を。

以下が実行結果。

Creating a component: "ConsoleIn"....succeed.
=================================================
Component Profile
-------------------------------------------------
InstanceID: ConsoleIn0
Implementation: ConsoleIn
Description: Console input component
Version: 1.0
Maker: Noriaki Ando, AIST
Category: example
Other properties
=================================================
=================================================
Port0 (name): out
-------------------------------------------------
- properties -
port.port_type: DataOutPort
dataport.data_type: TimedLong
dataport.interface_type: CORBA_Any
dataport.dataflow_type: Push, Pull
dataport.subscription_type: Flush, New, Periodic
-------------------------------------------------
port list: 1
connector profiles: 1
----------connector----------
name: connector0
id: 11a08ef4-abe8-202c-0100-001c23da0bdf
Port[0]
RTC: ConsoleIn0
name: out
Port[1]
RTC: ConsoleOut0
name: in
Please input number:

以下のコードを、onExecuteなどに挿入すれば、上の出力が得られます。
#SimpleIOのConnectorでは、activateしてから接続するので、
onActivatedではコネクタの情報は得られず、onExecuteに下記のコードを
挿入して上記の結果を得ました。
-------------------コード-------------------------
RTC::PortList_var portlist = get_ports();
std::cout << "port list: " << portlist->length() << std::endl;

for (CORBA::ULong i(0); i < portlist->length(); ++i)
{
RTC::PortProfile_var pprofile;
pprofile = portlist[i]->get_port_profile();

RTC::ConnectorProfileList cprofile(pprofile->connector_profiles);
std::cout << "connector profiles: " << cprofile.length() << std::endl;

for (CORBA::ULong j(0); j < cprofile.length(); ++j)
{
std::cout << "----------connector----------" << std::endl;
std::cout << "name: " << cprofile[j].name << std::endl;
std::cout << "id: " << cprofile[j].connector_id << std::endl;

RTC::PortList pl;
pl = cprofile[j].ports;
for (CORBA::ULong k(0); k < pl.length(); ++k)
{
std::cout << "Port[" << k << "]" << std::endl;
RTC::PortProfile_var pp;
pp = pl[k]->get_port_profile();
RTC::ComponentProfile_var rtcprofile;
rtcprofile = pp->owner->get_component_profile();
std::cout << "RTC: " << rtcprofile->instance_name << std::endl;
std::cout << "name: " << pp->name << std::endl;
}
}
}

2009年11月4日20:37 Takashi Kojima :
> 中央大学の小島です。
> いつもお世話になっております。
>
> 接続しているポートの対を取得する方法について教えてください。
> 現在コンポーネントから、情報を収集ならできるのでは?、と考え、添付ファイルのような
> プログラムを作りました。
>
> そののちに、SimpleIOプログラムをRTCLinkにて接続し、動作をテストしてみました。
>
> テスト内容
>
> ./PortScan.exe ConsoleIn0.rtc
>
> -my port length 1
> --Port : out
> connector's profile length is 1
> connector[out_in] registed 2 ports
> in of ConsoleOut0
> in of ConsoleOut0
>
> すると、以下のように表示されてしまい、
> out of ConsoleIn0
> in of ConsoleOut0
> と表示されると思っていたため、うまくいきませんでした。
> ConnectionProfileに格納されているPortの値が正しく格納されていないようです。
>
> なお、./PortScan.exe ConsoleOut0.rtcとした場合には、
>
> -my port length 1
> --Port : in
> connector's profile length is 1
> connector[out_in] registed 2 ports
> in of ConsoleOut0
> in of ConsoleOut0
>
> と表示されます。取得の仕方に何か問題がございますでしょうか?
> もしくは、もっと簡単に接続しているポートの対を情報を取得する方法はありますでしょうか?
>
> ご教授いただけると幸いです。よろしくお願いいたします。
>
> ※RTのVersionは、0.4.2です。
>

root
オフライン
Last seen: 5時間 34秒 前
登録日: 2009-06-23 14:31
[openrtm-users 00998] [openrtm-users 00997] 接続しているポートの対を取得する方法

産総研 安藤さま

中央大学の小島です
申し訳ありません。ソースコードを添付するのを忘れてしまっていたようです。
また、私の方は、ところどころ実装方法がスマートではないですが、大筋あっていたようです。

いただいたソースコードを元に、もう少しうまくいかない原因を自分なりに探ってみます。
なお、念のため、添付します。
外部のプログラムから、取得しようとしたサンプルとなっております。

※環境
Ubuntsu 8.10
omniorb 4.1.2-1
RTM 0.4.2

root
オフライン
Last seen: 5時間 34秒 前
登録日: 2009-06-23 14:31
[openrtm-users 00999] 接続しているポートの対を取得する方法について

安藤です

RTC::PortList* target; の添え字は i ではなく k では?

2009年11月5日14:43 Takashi Kojima :
> 産総研 安藤さま
>
> 中央大学の小島です
> 申し訳ありません。ソースコードを添付するのを忘れてしまっていたようです。
> また、私の方は、ところどころ実装方法がスマートではないですが、大筋あっていたようです。
>
> いただいたソースコードを元に、もう少しうまくいかない原因を自分なりに探ってみます。
> なお、念のため、添付します。
> 外部のプログラムから、取得しようとしたサンプルとなっております。
>
> ※環境
> Ubuntsu 8.10
> omniorb 4.1.2-1
> RTM 0.4.2
>

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2209
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク