[openrtm-users 00612] rtc_handle.pyについて

12 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00612] rtc_handle.pyについて

中島様,

CorbaClient生成時の引数に誤りがありました.
修正してHome Page にuploadしましたので
そちらを試してみて下さい.

よろしくお願いします.

Yusuke Nakajima さんは書きました:
> 末廣様
>
> 自律Gの中島と申します。
>
> 知能化PJの検証用RTCの公開に向けて、喜多さんの意向により、
> rtc_handle.pyを使ったRtcHandleのスクリプトも用意すべく、
> http://staff.aist.go.jp/t.suehiro/rtm/index.html を参照しながら
> 作成を試みているのですが、以下のようにRTCを認識できないような
> エラーが出てまして、もし簡単にお分かりのようでしたら、
> 解決法お教え頂けると幸いです。
>
> ほぼ同様の作り方で、複数のRTCを作成し、rtc.confの中身もほぼ同一の
> ものを使用しており、各々を端末から起動させてから、以下のログにあるような
> 操作を行ったのですが、['rh00.rtc', 'MotorControl0.rtc', 'DriveControl0.rtc']
> の3つはcreateされるのですが、'Map0.rtc'などは"is not alive."となり、
> それ以降、ハンドルの取得も出来ない状態です。
>
> ちなみに、これらは、RtcLinkやRtSystemEditorで正常に表示でき、ポートの接
> 続から、activate、全て正常に動作するようですし、NameServiceViewにも正常
> 表示されています。
>
> OpenRTMの中身など良く分からないのですが、何故このような違いが出ているの
> かが解決できない状態です。('Map0.rtc'などはconsumerをもっており、正常な
> 3つのRTCはプロバイダのみを持っているのですが、何か影響がありますでしょ
> うか)
>
>
> 私の環境ですが、
> OS: ubuntu7.1
> OpenRTM: C++ 0.4.2, Python0.4.1, PublisherFactory.cpp部修正済み
> です。
>
> よろしくお願いいたします。
>
>

未定義
root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00613] rtc_handle.pyについて

末廣様

早速対応頂きありがとうございました。
新しいバージョンを利用して、全てcreateされる
ようになったことを確認いたしました。

中島

> 中島様,
>
> CorbaClient生成時の引数に誤りがありました.
> 修正してHome Page にuploadしましたので
> そちらを試してみて下さい.
>
> よろしくお願いします.
>
> Yusuke Nakajima さんは書きました:
> > 末廣様
> >
> > 自律Gの中島と申します。
> >
> > 知能化PJの検証用RTCの公開に向けて、喜多さんの意向により、
> > rtc_handle.pyを使ったRtcHandleのスクリプトも用意すべく、
> > http://staff.aist.go.jp/t.suehiro/rtm/index.html を参照しながら
> > 作成を試みているのですが、以下のようにRTCを認識できないような
> > エラーが出てまして、もし簡単にお分かりのようでしたら、
> > 解決法お教え頂けると幸いです。
> >
> > ほぼ同様の作り方で、複数のRTCを作成し、rtc.confの中身もほぼ同一の
> > ものを使用しており、各々を端末から起動させてから、以下のログにあるような
> > 操作を行ったのですが、['rh00.rtc', 'MotorControl0.rtc', 'DriveControl0.rtc']
> > の3つはcreateされるのですが、'Map0.rtc'などは"is not alive."となり、
> > それ以降、ハンドルの取得も出来ない状態です。
> >
> > ちなみに、これらは、RtcLinkやRtSystemEditorで正常に表示でき、ポートの接
> > 続から、activate、全て正常に動作するようですし、NameServiceViewにも正常
> > 表示されています。
> >
> > OpenRTMの中身など良く分からないのですが、何故このような違いが出ているの
> > かが解決できない状態です。('Map0.rtc'などはconsumerをもっており、正常な
> > 3つのRTCはプロバイダのみを持っているのですが、何か影響がありますでしょ
> > うか)
> >
> >
> > 私の環境ですが、
> > OS: ubuntu7.1
> > OpenRTM: C++ 0.4.2, Python0.4.1, PublisherFactory.cpp部修正済み
> > です。
> >
> > よろしくお願いいたします。
> >
> >
> > -- 以下がログ--
> >
> > nakajima@invent-v2:/data/RTC/invent/DEVELOP/Python$ python
> > Python 2.5.1 (r251:54863, Jul 31 2008, 23:17:40)
> > [GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
> > Type "help", "copyright", "credits" or "license" for more information.
> >>>> import sys
> >>>> import os
> >>>> RtmToolsDir="/data/RTC/invent/DEVELOP/Python"
> >>>> save_path = sys.path[:]
> >>>> sys.path.append(RtmToolsDir+"/rtc_handle")
> >>>> from rtc_handle import *
> >>>> sys.path = save_path
> >>>> env = RtmEnv(sys.argv, ["localhost:2809"])
> >>>> env.name_space.keys()
> > ['localhost:2809']
> >>>>
> >>>> env.name_space["localhost:2809"].list_obj()
> > objcet EventChannelFactory was listed.
> > objcet UrgSensorComponent0.rtc was listed.
> > UrgSensorComponent0.rtc is not alive.
> > objcet OnlineViewer was listed.
> > objcet ViewSimulator was listed.
> > objcet CollisionDetectorFactory was listed.
> > objcet ModelLoader was listed.
> > objcet DynamicsSimulatorFactory was listed.
> > objcet InventGUIComp0.rtc was listed.
> > InventGUIComp0.rtc is not alive.
> > objcet DriveControl0.rtc was listed.
> > handle for DriveControl0.rtc was created.
> > objcet rh00.rtc was listed.
> > handle for rh00.rtc was created.
> > objcet MotorControlFactory was listed.
> > objcet MotorControl0.rtc was listed.
> > handle for MotorControl0.rtc was created.
> > objcet GlobalPathPlanning0.rtc was listed.
> > GlobalPathPlanning0.rtc is not alive.
> > objcet LocalPathPlanning0.rtc was listed.
> > LocalPathPlanning0.rtc is not alive.
> > objcet ObstacleDetection0.rtc was listed.
> > ObstacleDetection0.rtc is not alive.
> > objcet Map0.rtc was listed.
> > Map0.rtc is not alive.
> > [['UrgSensorComponent0.rtc', ], ['InventGUIComp0.rtc', ], ['DriveControl0.rtc', ], ['rh00.rtc', ], ['MotorControl0.rtc', ], ['GlobalPathPlanning0.rtc', ], ['LocalPathPlanning0.rtc', ], ['ObstacleDetection0.rtc', ], ['Map0.rtc', ]]
> >>>>
> >>>> env.name_space['localhost:2809'].rtc_handles.keys()
> > ['rh00.rtc', 'MotorControl0.rtc', 'DriveControl0.rtc']
> >>>>
> >>>> handle_drive = env.name_space["localhost:2809"].rtc_handles['DriveControl0.rtc']
> >>>> dir(handle_drive)
> > ['__doc__', '__init__', '__module__', 'activate', 'conf_ref', 'conf_set', 'conf_set_data', 'deactivate', 'env', 'execution_contexts', 'inports', 'name', 'outports', 'port_refs', 'ports', 'profile', 'prop', 'retrieve_info', 'rtc_ref', 'services', 'set_conf', 'set_conf_activate']
> >>>>
> >>>> handle_map = env.name_space["localhost:2809"].rtc_handles['Map0.rtc']
> > Traceback (most recent call last):
> > File "", line 1, in
> > KeyError: 'Map0.rtc'
> >
> >
> >
> >
> >
>
>

root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00615] rtc_handle.pyについて

中島様,

産総研 末廣です.

Yusuke Nakajima さんは書きました:
>
> サービスポート接続について教示頂きありがとうございました。
>
> 接続の方がうまくいきまして、RTCの起動からDataPort/ServicePort
> の接続、Configパラメータの変更、activateまでの一連の流れが自動化
> 出来、さらに、OpenHRP3によるシミュレーションでも正常に動作すること
> が確認できました。
>
> 度々で申し訳ないのですが、2点ほど質問させてください。
>
> (1)idlコンパイルについて
> マニュアルでは、RTC利用環境構築の事前準備として、"RTCのサービスポート
> を使うためには、それに対応したidlファイルが必要"とあり、omniidlによる
> コンパイルが必要と認識していたのですが、私のスクリプトでは、これらを行わ
> ず、スタブのimportをしない状態でもサービスポートは正常に接続出来、動作し
> ているようですが、問題ないでしょうか?

「RTCのサービスポートを使うためには」というのは,
ユーザプログラムから直接サービスプロバイダのインタフェースを
使う場合です.
「サービスポートの接続」の場合は,ユーザプログラムでの
スタブのimportは不要です.実際には各コンポーネントの側で
スタブをimportしています.

> (2)独自型のDataPortがある場合について
> 以下のようなIDLにて、module名RTCとした独自データ型でDataPortを定義
> しているRTCもあり、他のRTCと同様にRTCを起動し、NameServiceより
> handleの取得を試みると、"is not alive"となります。
> omniidlでコンパイルし"import RTC"をすると、大元のRTCがimportできない
> ようですし、module名RTCを変えてomniidlをすると、"Time not found"と
> エラーを吐くという状態でして、どのように対処すべきかが分からない状況
> です。解決法をご教示願えませんでしょうか。

これは結構難しい問題ですね.
C++では,idlのモジュールを分割してロードできるのかな.
pythonでは,idlのモジュールとpythonのモジュールが対応付け
られているので,分割してロードするのが難しい.

考えられる案は,
(1) SensorData.idlをOpenRTM-aist-Python-xxxx/OpenRTM/RTM_IDLに
持っていってidlコンパイルする.
(2) 上記ディレクトリのBasicDataType.idlを書き換え,idlコンパイルする.
(3) RTCモジュールにしないで,TimeはRTC::Timeとして引用する.
などです.
ただ,(3)はrtc-templateが正しいコードを生成できるかどうか
不明です.

とりあえずのお勧めは(1)だと思います.

どなたか他に良い代案があれば教えてください.

> ******************************************************************
> #ifndef __SensorData_idl__
> #define __SensorData_idl__
>
> #include "BasicDataType.idl"
>
> module RTC {
>
> //------------------------------------------------------------
> // Primitive data type definition
> //------------------------------------------------------------
>
> struct MeasurementData
> {
> long startDirection;
> long endDirection;
> long collectStepNumber;
> long interval;
> long timestamp;
> sequence distance;
> };
>
> struct TimedMeasurementData
> {
> Time tm;
> MeasurementData data;
> };
>
> struct SensorStatus
> {
> string sensorType;
> string laserState;
> string motorSpeed;
> string measureMode;
> string baudRate;
> string timeStamp;
> string sensorState;
> };
>
> struct TimedSensorStatus
> {
> Time tm;
> SensorStatus data;
> };
>
> }; // end of module RTM
>
> #endif // __SensorData_idl__
>
> ******************************************************************

root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00616] rtc_handle.pyについて

末廣様、 中島様、

お世話になっております。
産総研 栗原です。

> > (2)独自型のDataPortがある場合について
> > 以下のようなIDLにて、module名RTCとした独自データ型でDataPortを定義
> > しているRTCもあり、他のRTCと同様にRTCを起動し、NameServiceより
> > handleの取得を試みると、"is not alive"となります。
> > omniidlでコンパイルし"import RTC"をすると、大元のRTCがimportできない
> > ようですし、module名RTCを変えてomniidlをすると、"Time not found"と
> > エラーを吐くという状態でして、どのように対処すべきかが分からない状況
> > です。解決法をご教示願えませんでしょうか。
>
> これは結構難しい問題ですね.
> C++では,idlのモジュールを分割してロードできるのかな.
> pythonでは,idlのモジュールとpythonのモジュールが対応付け
> られているので,分割してロードするのが難しい.
>
> 考えられる案は,
> (1) SensorData.idlをOpenRTM-aist-Python-xxxx/OpenRTM/RTM_IDLに
> 持っていってidlコンパイルする.
> (2) 上記ディレクトリのBasicDataType.idlを書き換え,idlコンパイルする.
> (3) RTCモジュールにしないで,TimeはRTC::Timeとして引用する.
> などです.
> ただ,(3)はrtc-templateが正しいコードを生成できるかどうか
> 不明です.
>
> とりあえずのお勧めは(1)だと思います.
>
> どなたか他に良い代案があれば教えてください.
当方でも数日前に、IDLファイルにてmodule名にRTCを使用した場合、
大元のRTCをインポートできない問題に遭遇しました。

当方では、idlコンパイル時にコンポーネントのディレクトリに生成
されるRTC/__init__.py, RTC__POA/__init__.pyを下記のように編集
し対処致しました。

※ /usr/lib/python2.4/site-packages/OpenRTM/RTM_IDL/RTC/__init__.py
ではなく、コンポーネントのディレクトリのRTM/__init__.pyですの
で御注意下さい。

<編集前>
// file RTC/__init__.py

# ** 1. Stub files contributing to this module
import MyService_idl

<編集後>
// file RTC/__init__.py

import BasicDataType_idl
import DataPort_idl
import OpenRTM_idl
import RTC_idl

# ** 1. Stub files contributing to this module
import MyService_idl

大元のRTCをインポートするため、BasicDataType_idlからRTC_idlまでの
import文を追加しました。
これらのimport文は、/usr/lib/python2.4/site-packages/OpenRTM/RTM_IDL/
RTC/__init__.pyに記述してある内容です。

ただ、RTC/__init__.pyには"DO NOT EDIT THIS FILE!"と記述してあります
ので、このファイルを編集するのはよろしくないのかも知れませんが、一応、
これで当方ではmodule RTCをIDLファイルにて使用する事ができました。

以上、宣しくお願い致します。

On Wed, 01 Oct 2008 13:21:36 +0900
Takashi Suehiro wrote:

> 中島様,
>
> 産総研 末廣です.
>
> Yusuke Nakajima さんは書きました:
> >
> > サービスポート接続について教示頂きありがとうございました。
> >
> > 接続の方がうまくいきまして、RTCの起動からDataPort/ServicePort
> > の接続、Configパラメータの変更、activateまでの一連の流れが自動化
> > 出来、さらに、OpenHRP3によるシミュレーションでも正常に動作すること
> > が確認できました。
> >
> > 度々で申し訳ないのですが、2点ほど質問させてください。
> >
> > (1)idlコンパイルについて
> > マニュアルでは、RTC利用環境構築の事前準備として、"RTCのサービスポート
> > を使うためには、それに対応したidlファイルが必要"とあり、omniidlによる
> > コンパイルが必要と認識していたのですが、私のスクリプトでは、これらを行わ
> > ず、スタブのimportをしない状態でもサービスポートは正常に接続出来、動作し
> > ているようですが、問題ないでしょうか?
>
> 「RTCのサービスポートを使うためには」というのは,
> ユーザプログラムから直接サービスプロバイダのインタフェースを
> 使う場合です.
> 「サービスポートの接続」の場合は,ユーザプログラムでの
> スタブのimportは不要です.実際には各コンポーネントの側で
> スタブをimportしています.
>
> > (2)独自型のDataPortがある場合について
> > 以下のようなIDLにて、module名RTCとした独自データ型でDataPortを定義
> > しているRTCもあり、他のRTCと同様にRTCを起動し、NameServiceより
> > handleの取得を試みると、"is not alive"となります。
> > omniidlでコンパイルし"import RTC"をすると、大元のRTCがimportできない
> > ようですし、module名RTCを変えてomniidlをすると、"Time not found"と
> > エラーを吐くという状態でして、どのように対処すべきかが分からない状況
> > です。解決法をご教示願えませんでしょうか。
>
> これは結構難しい問題ですね.
> C++では,idlのモジュールを分割してロードできるのかな.
> pythonでは,idlのモジュールとpythonのモジュールが対応付け
> られているので,分割してロードするのが難しい.
>
> 考えられる案は,
> (1) SensorData.idlをOpenRTM-aist-Python-xxxx/OpenRTM/RTM_IDLに
> 持っていってidlコンパイルする.
> (2) 上記ディレクトリのBasicDataType.idlを書き換え,idlコンパイルする.
> (3) RTCモジュールにしないで,TimeはRTC::Timeとして引用する.
> などです.
> ただ,(3)はrtc-templateが正しいコードを生成できるかどうか
> 不明です.
>
> とりあえずのお勧めは(1)だと思います.
>
> どなたか他に良い代案があれば教えてください.
>
> > ******************************************************************
> > #ifndef __SensorData_idl__
> > #define __SensorData_idl__
> >
> > #include "BasicDataType.idl"
> >
> > module RTC {
> >
> > //------------------------------------------------------------
> > // Primitive data type definition
> > //------------------------------------------------------------
> >
> > struct MeasurementData
> > {
> > long startDirection;
> > long endDirection;
> > long collectStepNumber;
> > long interval;
> > long timestamp;
> > sequence distance;
> > };
> >
> > struct TimedMeasurementData
> > {
> > Time tm;
> > MeasurementData data;
> > };
> >
> > struct SensorStatus
> > {
> > string sensorType;
> > string laserState;
> > string motorSpeed;
> > string measureMode;
> > string baudRate;
> > string timeStamp;
> > string sensorState;
> > };
> >
> > struct TimedSensorStatus
> > {
> > Time tm;
> > SensorStatus data;
> > };
> >
> > }; // end of module RTM
> >
> > #endif // __SensorData_idl__
> >
> > ******************************************************************
>

root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00617] rtc_handle.pyについて

栗原様,

末廣です.
栗原さんの案はいいですね.
私のは,site-pakagesの方でやるか,idlコンパイルした後
そちらへインストールしないとだめですね.

他には,いっそのこと
BasicDataType.idl
DataPort.idl
OpenRTM.idl
RTC.idl
を自分のところに持ってきてidlコンパイルするというのも考えられます.

また,ユーザのidlファイルで,これらを全部インクルードしておく
というのはどうでしょうか?

kurihara shinji さんは書きました:
>
> 当方でも数日前に、IDLファイルにてmodule名にRTCを使用した場合、
> 大元のRTCをインポートできない問題に遭遇しました。
>
> 当方では、idlコンパイル時にコンポーネントのディレクトリに生成
> されるRTC/__init__.py, RTC__POA/__init__.pyを下記のように編集
> し対処致しました。
>
> ※ /usr/lib/python2.4/site-packages/OpenRTM/RTM_IDL/RTC/__init__.py
> ではなく、コンポーネントのディレクトリのRTM/__init__.pyですの
> で御注意下さい。
>
> <編集前>
> // file RTC/__init__.py
>
> # ** 1. Stub files contributing to this module
> import MyService_idl
>
>
> <編集後>
> // file RTC/__init__.py
>
> import BasicDataType_idl
> import DataPort_idl
> import OpenRTM_idl
> import RTC_idl
>
> # ** 1. Stub files contributing to this module
> import MyService_idl
>
>
> 大元のRTCをインポートするため、BasicDataType_idlからRTC_idlまでの
> import文を追加しました。
> これらのimport文は、/usr/lib/python2.4/site-packages/OpenRTM/RTM_IDL/
> RTC/__init__.pyに記述してある内容です。
>
> ただ、RTC/__init__.pyには"DO NOT EDIT THIS FILE!"と記述してあります
> ので、このファイルを編集するのはよろしくないのかも知れませんが、一応、
> これで当方ではmodule RTCをIDLファイルにて使用する事ができました。

root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00618] rtc_handle.pyについて

末廣様、栗原様

情報提供ありがとうございます。
先ほど、以下の方法で正常に認識できることを確認しました。

> (1) SensorData.idlをOpenRTM-aist-Python-xxxx/OpenRTM/RTM_IDLに
> 持っていってidlコンパイルする.

取り急ぎ、結果のご報告まで。

中島

> 中島様,
>
> 産総研 末廣です.
>
> Yusuke Nakajima さんは書きました:
> >
> > サービスポート接続について教示頂きありがとうございました。
> >
> > 接続の方がうまくいきまして、RTCの起動からDataPort/ServicePort
> > の接続、Configパラメータの変更、activateまでの一連の流れが自動化
> > 出来、さらに、OpenHRP3によるシミュレーションでも正常に動作すること
> > が確認できました。
> >
> > 度々で申し訳ないのですが、2点ほど質問させてください。
> >
> > (1)idlコンパイルについて
> > マニュアルでは、RTC利用環境構築の事前準備として、"RTCのサービスポート
> > を使うためには、それに対応したidlファイルが必要"とあり、omniidlによる
> > コンパイルが必要と認識していたのですが、私のスクリプトでは、これらを行わ
> > ず、スタブのimportをしない状態でもサービスポートは正常に接続出来、動作し
> > ているようですが、問題ないでしょうか?
>
> 「RTCのサービスポートを使うためには」というのは,
> ユーザプログラムから直接サービスプロバイダのインタフェースを
> 使う場合です.
> 「サービスポートの接続」の場合は,ユーザプログラムでの
> スタブのimportは不要です.実際には各コンポーネントの側で
> スタブをimportしています.
>
> > (2)独自型のDataPortがある場合について
> > 以下のようなIDLにて、module名RTCとした独自データ型でDataPortを定義
> > しているRTCもあり、他のRTCと同様にRTCを起動し、NameServiceより
> > handleの取得を試みると、"is not alive"となります。
> > omniidlでコンパイルし"import RTC"をすると、大元のRTCがimportできない
> > ようですし、module名RTCを変えてomniidlをすると、"Time not found"と
> > エラーを吐くという状態でして、どのように対処すべきかが分からない状況
> > です。解決法をご教示願えませんでしょうか。
>
> これは結構難しい問題ですね.
> C++では,idlのモジュールを分割してロードできるのかな.
> pythonでは,idlのモジュールとpythonのモジュールが対応付け
> られているので,分割してロードするのが難しい.
>
> 考えられる案は,
> (1) SensorData.idlをOpenRTM-aist-Python-xxxx/OpenRTM/RTM_IDLに
> 持っていってidlコンパイルする.
> (2) 上記ディレクトリのBasicDataType.idlを書き換え,idlコンパイルする.
> (3) RTCモジュールにしないで,TimeはRTC::Timeとして引用する.
> などです.
> ただ,(3)はrtc-templateが正しいコードを生成できるかどうか
> 不明です.
>
> とりあえずのお勧めは(1)だと思います.
>
> どなたか他に良い代案があれば教えてください.
>
> > ******************************************************************
> > #ifndef __SensorData_idl__
> > #define __SensorData_idl__
> >
> > #include "BasicDataType.idl"
> >
> > module RTC {
> >
> > //------------------------------------------------------------
> > // Primitive data type definition
> > //------------------------------------------------------------
> >
> > struct MeasurementData
> > {
> > long startDirection;
> > long endDirection;
> > long collectStepNumber;
> > long interval;
> > long timestamp;
> > sequence distance;
> > };
> >
> > struct TimedMeasurementData
> > {
> > Time tm;
> > MeasurementData data;
> > };
> >
> > struct SensorStatus
> > {
> > string sensorType;
> > string laserState;
> > string motorSpeed;
> > string measureMode;
> > string baudRate;
> > string timeStamp;
> > string sensorState;
> > };
> >
> > struct TimedSensorStatus
> > {
> > Time tm;
> > SensorStatus data;
> > };
> >
> > }; // end of module RTM
> >
> > #endif // __SensorData_idl__
> >
> > ******************************************************************
>

root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00619] rtc_handle.pyについて

末廣様

中島です。

新たにもう1つうまく動作しない部分がありまして、まだデバッグの途中
ではありますが、以下の内容で問題点お分かりでしたら、ご教示頂けると助かり
ます。

独自定義のある"SensorData.idl"を3つのRTCで利用していまして、
[a]C++版のRTCのIn/OutPort
[b]Java版RTC(GUI表示用)のInPort
[c]Java版(OpenHRP3のView用plugin)のOutPort
とそれぞれ異なるのですが、
昨日の情報を元にIDLをコンパイルすると、[a][b]はOKですが、
[c]のみ未だ、"is not alive"となっております。

rtc_handle.pyをデバッグしながら追っていくと、Line257 RtcOutportクラスの
"self.ref = self.con.prop_dict['dataport.corba_any.outport_ref']"
部分でエラーとなります。

[c]の"self.con.prop_dict"に"dataport.corba_any.outport_ref"が無い状態で
す。RTC側に何か抜けがあるのかもしれませんが、違いが出ている理由が見つか
ら無い状態です。
以下はデバッグ出力ログです。

==[a]のOutPort====
print self.con.prop_dict =
{'dataport.dataflow_type': 'Push', 'dataport.corba_any.outport_ref':,'dataport.interface_type': 'CORBA_Any', 'dataport.subscription_type':
'Flush'}

dir(self.con.prop_dict) =
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__str__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

==[c]のOutPort====
print self.con.prop_dict =
{'dataport.dataflow_type': 'Push', 'dataport.interface_type': 'CORBA_Any', 'dataport.subscription_type': 'Flush'}

dir(self.con.prop_dict) =
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__str__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

ちなみに、RtcLink/RtSystemEditor等でマニュアル接続して、OpenHRP3でシミュ
レーションする一連の流れでは、RTC側のバグも多少残ってますが、特に問題な
く動作はしています。

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

> 末廣様、栗原様
>
> 情報提供ありがとうございます。
> 先ほど、以下の方法で正常に認識できることを確認しました。
>
> > (1) SensorData.idlをOpenRTM-aist-Python-xxxx/OpenRTM/RTM_IDLに
> > 持っていってidlコンパイルする.
>
> 取り急ぎ、結果のご報告まで。
>
> 中島
>
>
> > 中島様,
> >
> > 産総研 末廣です.
> >
> > Yusuke Nakajima さんは書きました:
> > >
> > > サービスポート接続について教示頂きありがとうございました。
> > >
> > > 接続の方がうまくいきまして、RTCの起動からDataPort/ServicePort
> > > の接続、Configパラメータの変更、activateまでの一連の流れが自動化
> > > 出来、さらに、OpenHRP3によるシミュレーションでも正常に動作すること
> > > が確認できました。
> > >
> > > 度々で申し訳ないのですが、2点ほど質問させてください。
> > >
> > > (1)idlコンパイルについて
> > > マニュアルでは、RTC利用環境構築の事前準備として、"RTCのサービスポート
> > > を使うためには、それに対応したidlファイルが必要"とあり、omniidlによる
> > > コンパイルが必要と認識していたのですが、私のスクリプトでは、これらを行わ
> > > ず、スタブのimportをしない状態でもサービスポートは正常に接続出来、動作し
> > > ているようですが、問題ないでしょうか?
> >
> > 「RTCのサービスポートを使うためには」というのは,
> > ユーザプログラムから直接サービスプロバイダのインタフェースを
> > 使う場合です.
> > 「サービスポートの接続」の場合は,ユーザプログラムでの
> > スタブのimportは不要です.実際には各コンポーネントの側で
> > スタブをimportしています.
> >
> > > (2)独自型のDataPortがある場合について
> > > 以下のようなIDLにて、module名RTCとした独自データ型でDataPortを定義
> > > しているRTCもあり、他のRTCと同様にRTCを起動し、NameServiceより
> > > handleの取得を試みると、"is not alive"となります。
> > > omniidlでコンパイルし"import RTC"をすると、大元のRTCがimportできない
> > > ようですし、module名RTCを変えてomniidlをすると、"Time not found"と
> > > エラーを吐くという状態でして、どのように対処すべきかが分からない状況
> > > です。解決法をご教示願えませんでしょうか。
> >
> > これは結構難しい問題ですね.
> > C++では,idlのモジュールを分割してロードできるのかな.
> > pythonでは,idlのモジュールとpythonのモジュールが対応付け
> > られているので,分割してロードするのが難しい.
> >
> > 考えられる案は,
> > (1) SensorData.idlをOpenRTM-aist-Python-xxxx/OpenRTM/RTM_IDLに
> > 持っていってidlコンパイルする.
> > (2) 上記ディレクトリのBasicDataType.idlを書き換え,idlコンパイルする.
> > (3) RTCモジュールにしないで,TimeはRTC::Timeとして引用する.
> > などです.
> > ただ,(3)はrtc-templateが正しいコードを生成できるかどうか
> > 不明です.
> >
> > とりあえずのお勧めは(1)だと思います.
> >
> > どなたか他に良い代案があれば教えてください.
> >
> > > ******************************************************************
> > > #ifndef __SensorData_idl__
> > > #define __SensorData_idl__
> > >
> > > #include "BasicDataType.idl"
> > >
> > > module RTC {
> > >
> > > //------------------------------------------------------------
> > > // Primitive data type definition
> > > //------------------------------------------------------------
> > >
> > > struct MeasurementData
> > > {
> > > long startDirection;
> > > long endDirection;
> > > long collectStepNumber;
> > > long interval;
> > > long timestamp;
> > > sequence distance;
> > > };
> > >
> > > struct TimedMeasurementData
> > > {
> > > Time tm;
> > > MeasurementData data;
> > > };
> > >
> > > struct SensorStatus
> > > {
> > > string sensorType;
> > > string laserState;
> > > string motorSpeed;
> > > string measureMode;
> > > string baudRate;
> > > string timeStamp;
> > > string sensorState;
> > > };
> > >
> > > struct TimedSensorStatus
> > > {
> > > Time tm;
> > > SensorStatus data;
> > > };
> > >
> > > }; // end of module RTM
> > >
> > > #endif // __SensorData_idl__
> > >
> > > ******************************************************************
> >

root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00620] rtc_handle.pyについて

中島様,

末廣です.

Yusuke Nakajima さんは書きました:
>
> [c]Java版(OpenHRP3のView用plugin)のOutPort
確認ですが,これもJava版のRTCですね?

> 昨日の情報を元にIDLをコンパイルすると、[a][b]はOKですが、
> [c]のみ未だ、"is not alive"となっております。
>
> rtc_handle.pyをデバッグしながら追っていくと、Line257 RtcOutportクラスの
> "self.ref = self.con.prop_dict['dataport.corba_any.outport_ref']"
> 部分でエラーとなります。
これはデータ型の問題ではなく,[c]のOutPortに関する情報の
扱いの問題だと思います.

この部分では,いったん[c]のOutPortに接続を要求して
そのConnectorProfileからOutPortに関する情報を引き出しています.
本来なら,OutPortへの,get要求を処理するcorbaオブジェクトの
リファレンスが入っていなくてはいけません.

OutPortからデータをget(RtcHandleではread)しないなら
この行を消してしまって利用して下さい.

Pull型をサポートしないOutPortならこれでいいのかな.
'dataport.dataflow_type'が'Push'のみの場合を
処理できるようにする必要がありますね.
(これはそのうちrtc_handle側でやります.)

とりあえず本当に[c]が正しくそうなっているか
self.con.prop_dictではなくself.propの方を
チェックしてもらえませんでしょうか.
こちらに,outportがサポートしている'dataport.dataflow_type'が
書かれているはずです.

よろしくお願いします.

root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00621] rtc_handle.pyについて

末廣様

中島です。

早速の対応ありがとうございます。

> > [c]Java版(OpenHRP3のView用plugin)のOutPort
> 確認ですが,これもJava版のRTCですね?

はい、java版RTCです。[c] --> [a] --> [b] というデータの流れのRTC群です。

> とりあえず本当に[c]が正しくそうなっているか
> self.con.prop_dictではなくself.propの方を
> チェックしてもらえませんでしょうか.
> こちらに,outportがサポートしている'dataport.dataflow_type'が
> 書かれているはずです.

取り急ぎ、「self.prop」のデバッグ出力を示します。
("u"が付いているとjava?)

[c(java)]のOutPort
{'port.port_type': u'DataOutPort', 'dataport.data_type': u'TimedMeasurementData', 'dataport.dataflow_type': u'Push, Pull', 'dataport.interface_type': u'CORBA_Any', 'dataport.subscription_type': u'Flush, New, Periodic'}

[a(c++)]のInPort
{'port.port_type': 'DataInPort', 'dataport.data_type': 'TimedMeasurementData', 'dataport.dataflow_type': 'Push, Pull', 'dataport.interface_type': 'CORBA_Any', 'dataport.subscription_type': 'Any'}

[a(c++)]のOutPort
{'port.port_type': 'DataOutPort', 'dataport.data_type': 'TimedMeasurementData', 'dataport.dataflow_type': 'Push, Pull', 'dataport.interface_type': 'CORBA_Any', 'dataport.subscription_type': 'Flush, New, Periodic'}

[b(java)]のInPort
{'port.port_type': u'DataInPort', 'dataport.data_type': u'TimedMeasurementData', 'dataport.dataflow_type': u'Push, Pull', 'dataport.interface_type': u'CORBA_Any', 'dataport.subscription_type': u'Any'}

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

> 中島様,
>
> 末廣です.
>
> Yusuke Nakajima さんは書きました:
> >
> > [c]Java版(OpenHRP3のView用plugin)のOutPort
> 確認ですが,これもJava版のRTCですね?
>
> > 昨日の情報を元にIDLをコンパイルすると、[a][b]はOKですが、
> > [c]のみ未だ、"is not alive"となっております。
> >
> > rtc_handle.pyをデバッグしながら追っていくと、Line257 RtcOutportクラスの
> > "self.ref = self.con.prop_dict['dataport.corba_any.outport_ref']"
> > 部分でエラーとなります。
> これはデータ型の問題ではなく,[c]のOutPortに関する情報の
> 扱いの問題だと思います.
>
> この部分では,いったん[c]のOutPortに接続を要求して
> そのConnectorProfileからOutPortに関する情報を引き出しています.
> 本来なら,OutPortへの,get要求を処理するcorbaオブジェクトの
> リファレンスが入っていなくてはいけません.
>
> OutPortからデータをget(RtcHandleではread)しないなら
> この行を消してしまって利用して下さい.
>
> Pull型をサポートしないOutPortならこれでいいのかな.
> 'dataport.dataflow_type'が'Push'のみの場合を
> 処理できるようにする必要がありますね.
> (これはそのうちrtc_handle側でやります.)
>
> とりあえず本当に[c]が正しくそうなっているか
> self.con.prop_dictではなくself.propの方を
> チェックしてもらえませんでしょうか.
> こちらに,outportがサポートしている'dataport.dataflow_type'が
> 書かれているはずです.
>
> よろしくお願いします.

root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00622] rtc_handle.pyについて

中島様,安藤様,

末廣です.

JAVA版はどなたが開発しているのでしょうか.
この部分はOMGの仕様の外になるので,明示的なドキュメントがないのです.
安藤さん,この辺の統一的な記述が欲しいのですがどうしましょう.

Yusuke Nakajima さんは書きました:
>
>> とりあえず本当に[c]が正しくそうなっているか
>> self.con.prop_dictではなくself.propの方を
>> チェックしてもらえませんでしょうか.
>> こちらに,outportがサポートしている'dataport.dataflow_type'が
>> 書かれているはずです.
>
>
> 取り急ぎ、「self.prop」のデバッグ出力を示します。
> ("u"が付いているとjava?)
uはUnicodeということですね.javaではどうなっているのでしょうか.

> [c(java)]のOutPort
> {'port.port_type': u'DataOutPort', 'dataport.data_type': u'TimedMeasurementData', 'dataport.dataflow_type': u'Push, Pull', 'dataport.interface_type': u'CORBA_Any', 'dataport.subscription_type': u'Flush, New, Periodic'}
>
> [a(c++)]のInPort
> {'port.port_type': 'DataInPort', 'dataport.data_type': 'TimedMeasurementData', 'dataport.dataflow_type': 'Push, Pull', 'dataport.interface_type': 'CORBA_Any', 'dataport.subscription_type': 'Any'}
>
> [a(c++)]のOutPort
> {'port.port_type': 'DataOutPort', 'dataport.data_type': 'TimedMeasurementData', 'dataport.dataflow_type': 'Push, Pull', 'dataport.interface_type': 'CORBA_Any', 'dataport.subscription_type': 'Flush, New, Periodic'}
>
> [b(java)]のInPort
> {'port.port_type': u'DataInPort', 'dataport.data_type': u'TimedMeasurementData', 'dataport.dataflow_type': u'Push, Pull', 'dataport.interface_type': u'CORBA_Any', 'dataport.subscription_type': u'Any'}
>
一応,Pull型もサポートしていることになっていますね.
JAVA版で正しく情報をセットしていないということでしょうか.
それとも'Pull’を指定してconnectを要求すると情報がセットされるのかな.
いずれにしてもself.propでは区別できないことが分かりました.
ありがとうございます.

root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00623] rtc_handle.pyについて

中島様、皆様、

産総研 末廣です。

OutPortの情報取得に関するJAVA版のバグ回避版rtc_handle.pyを
http://staff.aist.go.jp/t.suehiro/rtm/
にuploadしました。

JAVA版RTCに対しては直接OutPortからデータ取得することは
できませんが、他の機能は使えます。

root
オフライン
Last seen: 2日 10時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00624] rtc_handle.pyについて

末廣様

中島です。

最新版を利用させていただきました。
先日まで認識できなかった、Java版のRTCも正常に認識できるようになりました。
対応ありがとうございました。

"rtc_handle.py"を利用したpythonスクリプトを作成することで、
複数のC++版/Java版のRTC(plugin化されたRTC含む)など混合した
RTC群を、コンポーネントの起動から、handleの取得、DataPort同士の接続、
ServicePort同士の接続、configパラメータのデフォルト設定、RTCのactivateまで、
RtcLink/RtSystemEditorを用いずとも、自動で一括に処理できることを
確認いたしました。
(独自型定義のDataPortに対しては、別途IDLコンパイルが必要ですが。)

> 中島様、皆様、
>
> 産総研 末廣です。
>
> OutPortの情報取得に関するJAVA版のバグ回避版rtc_handle.pyを
> http://staff.aist.go.jp/t.suehiro/rtm/
> にuploadしました。
>
> JAVA版RTCに対しては直接OutPortからデータ取得することは
> できませんが、他の機能は使えます。
>

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

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

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

Choreonoid

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

OpenHRP3

動力学シミュレータ

OpenRTP

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

産総研RTC集

産総研が提供するRTC集

TORK

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

DAQ-Middleware

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