[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 メーリングリストの案内