[openrtm-users 00616] Re: rtc_handle.pyについて
kurihara shinji
shinji.kurihara @ aist.go.jp
2008年 10月 1日 (水) 15:20:53 JST
末廣様、 中島様、
お世話になっております。
産総研 栗原です。
> > (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 <t.suehiro @ aist.go.jp> 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<long> 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__
> >
> > ******************************************************************
>
> --
> Takashi Suehiro, Principal Research Scientist, Intelligent Systems
> Research Institute, AIST
> Tel: +81-29-861-5964 Fax: +81-29-861-5989 E-mail: t.suehiro @ aist.go.jp
> 1-1-1 Umezono, Tsukuba, Ibaraki 3058568, Japan
>
>
--
----------
栗原 眞二
shinji.kurihara @ aist.go.jp
kurihara @ imagination.co.jp
openrtm-users メーリングリストの案内