[openrtm-users 00615] Re: rtc_handle.pyについて

Takashi Suehiro t.suehiro @ aist.go.jp
2008年 10月 1日 (水) 13:21:36 JST


中島様,

産総研 末廣です.

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




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