[openrtm-users 02829] Re: findRTCmanagerに関する質問

Ando Noriaki n-ando @ aist.go.jp
2013年 6月 29日 (土) 00:38:02 JST


三宅さん

安藤です

失礼しました。RTCmanagerオブジェクトはCORBAオブジェクトではないですね。
narrowしているので、None以外が返ってくればCORBAオブジェクトはnilではないはずなので、

if not CORBA.is_nil(getManagerFromDirectly(h, mgr)): return mgr
if not CORBA.is_nil(getManagerFromNS(h, mgr)): return mgr
↓
if getManagerFromDirectly(h, mgr): return mgr
if getManagerFromNS(h, mgr): return mgr

でいいと思います。

ちなみに、getManagerFromDirectly() にもバグがありました。
corbalocのポート番号が抜けていました。以下のようになります。

     def getManagerDirectly(hostname, mgr = None):
   global orb
       corbaloc = "corbaloc:iiop:" + hostname + ":2810/manager"
       try:
         obj = orb.string_to_object(corbaloc)
         mgr = RTCmanager(obj._narrow(RTM.Manager))
       except:
         mgr = None
       return mgr


2013年6月29日 0:15 Kenji Miyake <kenji @ jsk.t.u-tokyo.ac.jp>:
> 安藤さん
>
> 三宅です。
>
> 頂いたプログラムのように変更を加えてみましたが、
> objの生成の段階で例外が発生してしまいます。
>
> また、getManagerFromNSの方は、
> #mgr = RTCmanager(ManagerHelper.narrow(obj))
> とコメントアウトして、元から書いてあったものを参考に、
> mgr = RTCmanager(obj._narrow(RTM.Manager))
> とすると、以下のようにインスタンスは生成されました。
> <rtm.RTCmanager instance at 0x2ab4b00>
>
> しかしその後、
>   File "/home/leus/ros/fuerte/rtm-ros-robotics/rtmros_common/hrpsys/share/hrpsys/python/rtm.py",
> line 337, in findRTCmanager
>     if not CORBA.is_nil(getManagerFromNS(h, mgr)):
>   File "/usr/lib/python2.7/dist-packages/omniORB/CORBA.py", line 1139, in is_nil
>     raise BAD_PARAM(omniORB.BAD_PARAM_WrongPythonType, COMPLETED_NO)
> omniORB.CORBA.BAD_PARAM:
> CORBA.BAD_PARAM(omniORB.BAD_PARAM_WrongPythonType, CORBA.COMPLETED_NO)
>
> とエラーが出てしまいます。
>
>
> どのように変更すれば良いでしょうか?
> また、もう少し詳細なログや環境変数などの情報は必要でしょうか?
> お手数をおかけしますが、よろしくお願い致します。
>
> 2013年6月28日 20:39 Ando Noriaki <n-ando @ aist.go.jp>:
>> 三宅さん
>>
>> 安藤です
>>
>>> JSKの三宅です。
>>>
>>> 頂いたコードを少し修正して試しましたが、
>>> System.getProperties()のところで例外が出ました。
>>>
>>> こちらの環境では、jythonではなくてCpythonを使っているのですが、
>>> その場合はどのように書けば良いのでしょうか?
>>
>> グローバル変数 orb に ORB の参照が代入されているようですので、
>> getProperites() を使わないでgetManagerDirectly()を以下のように書けばいいかもしれません。
>> # initCORBA() が実行されていることが前提です。
>>
>>      def getManagerDirectly(hostname, mgr = None):
>>    global orb
>>        corbaloc = "corbaloc:iiop:" + hostname + "/manager"
>>        try:
>>          obj = orb.string_to_object(corbaloc)
>>          mgr = RTCmanager(ManagerHelper.narrow(obj))
>>
>>> また、以下の、
>>> for h in hostnames:
>>>        if not CORBA.is_nil(getManagerDirectly(hostname, mgr)): return
>>> mgr   #getmanager -> getManager
>>>        if not CORBA.is_nil(getManagerFromNS(hostname, mgr)): return mgr
>>>
>>> については、hostname -> hに置き換えればよろしいでしょうか?
>>
>> そうですね。for の中なので getManager*(h, mgr) じゃないとだめですね。
>> これらのif文は最初for文の外にあったのですが、修正し忘れです。すみません。
>> _______________________________________________
>> openrtm-users mailing list
>> openrtm-users @ openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>
>
>
> --
> 三宅 健司
> 東京大学 情報理工学系研究科 創造情報学専攻
> 稲葉・岡田研究室 修士2年
> E-mail: kenji @ jsk.t.u-tokyo.ac.jp
> _______________________________________________
> openrtm-users mailing list
> openrtm-users @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users


More information about the openrtm-users mailing list