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

Ando Noriaki n-ando @ aist.go.jp
2013年 7月 2日 (火) 08:07:37 JST


三宅さん

安藤です

すみません、見てるソースが違うのでいろいろ違うみたいですね。
私が見ていたソースではgetPropertiesで取得できるNS_OPTの
値(host:port)のhostの部分がnshostに代入されています。
これはもしかしてJythonで実行することを前提としたスクリプトなんですかね?

こちらのスクリプトでは
https://code.google.com/p/hrpsys-base/source/browse/trunk/python/rtm.py
そういう指定はできないみたいですね。

Python単体ではJavaのPropertiesのような仕組みはないですが、
omniORBpy自体はconfigファイルを読み込む仕組みがあるので、
それをつかってネームサーバを指定するという手は使えるかもしれません。
http://omniorb.sourceforge.net/omni40/omniORB/omniORB004.html

あとは、OpenRTMのように自分でconfigファイルを読み込む仕組みを作るか
rtshellのように環境変数を使うという手があるかと思います。



2013年7月2日 0:19 Kenji Miyake <kenji @ jsk.t.u-tokyo.ac.jp>:
> 安藤さん
>
> 三宅です。
> 度々すいません。
>
> 先日は気づかなかったのですが、安藤さんのコードにあるnshostについて疑問が出てきたので、教えていただきたいです。
> 以下の部分です。
>
>  def findRTCmanager(hostname=None, rnc=None):
>    if not hostname:
>      hostname = nshost
>      cxt = None
>
> この中にあるnshostは、我々のスクリプトでは定義されていないのですが、
> どういった意味合いを持つものなのでしょうか?
>
> 例えば、今私は
> python ./hironx.py RobotHardware0 -ORBInitRef
> NameService=corbaloc:iiop:hiro014:2809/NameService
> のように、いちいちオプションを設定してロボットを使用しているのですが、
> nshostを定義しておくことによって、このオプションが不要になったりするのでしょうか?
>
> よろしくお願いします。
>
> 2013年7月1日 15:40 Ando Noriaki <n-ando @ aist.go.jp>:
>> 三宅さま
>>
>> 安藤です
>>
>>> 遅くなりましたが、アドバイスの通りに修正したところ、無事にIPアドレスから接続できるようになりました。
>>> ありがとうございます。hrpsys-baseのプロジェクトへ報告しておきます。
>>
>> それはよかったです。よろしくお願いいたします。
>>
>>> あと一点だけ、コメントを頂きたいところがあるのですが、
>>> if getManagerFromDirectly(h, mgr): return mgr
>>> if getManagerFromNS(h, mgr): return mgr
>>> の部分で、getManagermgr〜の結果がmgrに入っておらず、Noneのままになっていたので、
>>
>> mgrは参照渡しのつもりで書いたのですが、Pythonでやろうと思うと
>> 配列に入れなければならなかったですね。
>>
>>> for h in hostnames:
>>>   mgr = getManagerDirectly(h, mgr) or getManagerFromNS(h, mgr)
>>>   if mgr: return mgr
>>> のように変更しました。
>>> これで問題がないようなら良いのですが、問題があるor他に良い書き方があるようならば、教えていただきたいです。
>>
>> たしかにorを使うと綺麗にかけますね。これは思いつきませんでした。
>> こうなるともう引数のmgrはいらないですね。削ってもいいと思います。
>> ありがとうございました。
>>
>>> よろしくお願いします。
>>>
>>>
>>> 最後に、念の為最終的なコードを載せておきます。
>>>
>>> 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
>>> _______________________________________________
>>> openrtm-users mailing list
>>> openrtm-users @ openrtm.org
>>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>>
>>
>>
>> --
>> 安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
>>     統合知能研究グループ 主任研究員, 博士(工学)
>>     〒305-8568 つくば市梅園1-1-1 中央第2
>>     e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
>>     OpenRTM-aist: http://www.openrtm.org
>>
>> Noriaki Ando, Ph.D.
>>     Senior Research Scientist, RT-Synthesis R.G., ISRI, AIST
>>     AIST Tsukuba Central 2, Tsukuba, Ibaraki 305-8568 JAPAN
>>     e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
>>     OpenRTM-aist: http://www.openrtm.org
>> _______________________________________________
>> 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



--
安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
    統合知能研究グループ 主任研究員, 博士(工学)
    〒305-8568 つくば市梅園1-1-1 中央第2
    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
    OpenRTM-aist: http://www.openrtm.org

Noriaki Ando, Ph.D.
    Senior Research Scientist, RT-Synthesis R.G., ISRI, AIST
    AIST Tsukuba Central 2, Tsukuba, Ibaraki 305-8568 JAPAN
    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
    OpenRTM-aist: http://www.openrtm.org


More information about the openrtm-users mailing list