[openrtm-users 02830] Re: findRTCmanagerに関する質問
Kenji Miyake
kenji @ jsk.t.u-tokyo.ac.jp
2013年 7月 1日 (月) 12:59:29 JST
安藤さん
三宅です。
遅くなりましたが、アドバイスの通りに修正したところ、無事にIPアドレスから接続できるようになりました。
ありがとうございます。hrpsys-baseのプロジェクトへ報告しておきます。
あと一点だけ、コメントを頂きたいところがあるのですが、
if getManagerFromDirectly(h, mgr): return mgr
if getManagerFromNS(h, mgr): return mgr
の部分で、getManagermgr〜の結果がmgrに入っておらず、Noneのままになっていたので、
for h in hostnames:
mgr = getManagerDirectly(h, mgr) or getManagerFromNS(h, mgr)
if mgr: return mgr
のように変更しました。
これで問題がないようなら良いのですが、問題があるor他に良い書き方があるようならば、教えていただきたいです。
よろしくお願いします。
最後に、念の為最終的なコードを載せておきます。
def findRTCmanager(hostname=None, rnc=None):
if not hostname:
hostname = nshost
cxt = None
def getManagerFromNS(hostname, mgr = None):
try:
obj = findObject("manager","mgr", findObject(hostname, "host_cxt", rnc))
mgr = RTCmanager(obj._narrow(RTM.Manager))
except:
mgr = None
return mgr
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
import CORBA
# fqdn
mgr = None
hostnames = [hostname, hostname.split(".")[0],
socket.gethostbyaddr(hostname)[0],
socket.gethostbyaddr(hostname)[0].split(".")[0]]
for h in hostnames:
mgr = getManagerDirectly(h, mgr) or getManagerFromNS(h, mgr)
if mgr: return mgr
print "Manager not found"
return None
2013年6月29日 0:38 Ando Noriaki <n-ando @ aist.go.jp>:
> 三宅さん
>
> 安藤です
>
> 失礼しました。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
> _______________________________________________
> 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
More information about the openrtm-users
mailing list