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

Yusuke Nakajima y.nakajima @ aist.go.jp
2008年 10月 2日 (木) 10:47:24 JST


末廣様

中島です。

新たにもう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':<RTC._objref_OutPortAny instance at 0x82f6b6c>,'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<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
> 
> 

-----------------------------------------------------
〒305-8568 
茨城県つくば市梅園1-1-1 つくば中央第2  2-12棟
独立行政法人 産業技術総合研究所
 知能システム研究部門 自律行動制御研究グループ

   中島 裕介 (Yusuke Nakajima)

 TEL:029-861-5080(内線55267)
 mailto:y.nakajima @ aist.go.jp
-----------------------------------------------------




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