[openrtm-users 02826] findRTCmanagerに関する質問

11 posts / 0 new
Last post
Kenji Miyake
Offline
Last seen: Never ago
Joined: 2013-06-27 23:00
[openrtm-users 02826] findRTCmanagerに関する質問

安藤さん

JSKの三宅です。

頂いたコードを少し修正して試しましたが、
System.getProperties()のところで例外が出ました。

こちらの環境では、jythonではなくてCpythonを使っているのですが、
その場合はどのように書けば良いのでしょうか?

また、以下の、
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に置き換えればよろしいでしょうか?

よろしくお願いします。

Undefined
Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 02827] findRTCmanagerに関する質問

三宅さん

安藤です

> 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

Kenji Miyake
Offline
Last seen: Never ago
Joined: 2013-06-27 23:00
[openrtm-users 02828] findRTCmanagerに関する質問

安藤さん

三宅です。

頂いたプログラムのように変更を加えてみましたが、
objの生成の段階で例外が発生してしまいます。

また、getManagerFromNSの方は、
#mgr = RTCmanager(ManagerHelper.narrow(obj))
とコメントアウトして、元から書いてあったものを参考に、
mgr = RTCmanager(obj._narrow(RTM.Manager))
とすると、以下のようにインスタンスは生成されました。

しかしその後、
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 :
> 三宅さん
>
> 安藤です
>
>> 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

Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 02829] findRTCmanagerに関する質問

三宅さん

安藤です

失礼しました。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 :
> 安藤さん
>
> 三宅です。
>
> 頂いたプログラムのように変更を加えてみましたが、
> objの生成の段階で例外が発生してしまいます。
>
> また、getManagerFromNSの方は、
> #mgr = RTCmanager(ManagerHelper.narrow(obj))
> とコメントアウトして、元から書いてあったものを参考に、
> mgr = RTCmanager(obj._narrow(RTM.Manager))
> とすると、以下のようにインスタンスは生成されました。
>
>
> しかしその後、
> 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 :
>> 三宅さん
>>
>> 安藤です
>>
>>> 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

Kenji Miyake
Offline
Last seen: Never ago
Joined: 2013-06-27 23:00
[openrtm-users 02830] findRTCmanagerに関する質問

安藤さん

三宅です。

遅くなりましたが、アドバイスの通りに修正したところ、無事に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 :
> 三宅さん
>
> 安藤です
>
> 失礼しました。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 :
>> 安藤さん
>>
>> 三宅です。
>>
>> 頂いたプログラムのように変更を加えてみましたが、
>> objの生成の段階で例外が発生してしまいます。
>>
>> また、getManagerFromNSの方は、
>> #mgr = RTCmanager(ManagerHelper.narrow(obj))
>> とコメントアウトして、元から書いてあったものを参考に、
>> mgr = RTCmanager(obj._narrow(RTM.Manager))
>> とすると、以下のようにインスタンスは生成されました。
>>
>>
>> しかしその後、
>> 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 :
>>> 三宅さん
>>>
>>> 安藤です
>>>
>>>> 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

Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 02831] findRTCmanagerに関する質問

三宅さま

安藤です

> 遅くなりましたが、アドバイスの通りに修正したところ、無事に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 :
>> 三宅さん
>>
>> 安藤です
>>
>> 失礼しました。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 :
>>> 安藤さん
>>>
>>> 三宅です。
>>>
>>> 頂いたプログラムのように変更を加えてみましたが、
>>> objの生成の段階で例外が発生してしまいます。
>>>
>>> また、getManagerFromNSの方は、
>>> #mgr = RTCmanager(ManagerHelper.narrow(obj))
>>> とコメントアウトして、元から書いてあったものを参考に、
>>> mgr = RTCmanager(obj._narrow(RTM.Manager))
>>> とすると、以下のようにインスタンスは生成されました。
>>>
>>>
>>> しかしその後、
>>> 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 :
>>>> 三宅さん
>>>>
>>>> 安藤です
>>>>
>>>>> 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

Kenji Miyake
Offline
Last seen: Never ago
Joined: 2013-06-27 23:00
[openrtm-users 02832] findRTCmanagerに関する質問

安藤さん

三宅です。
度々すいません。

先日は気づかなかったのですが、安藤さんのコードにある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 :
> 三宅さま
>
> 安藤です
>
>> 遅くなりましたが、アドバイスの通りに修正したところ、無事に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 :
>>> 三宅さん
>>>
>>> 安藤です
>>>
>>> 失礼しました。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 :
>>>> 安藤さん
>>>>
>>>> 三宅です。
>>>>
>>>> 頂いたプログラムのように変更を加えてみましたが、
>>>> objの生成の段階で例外が発生してしまいます。
>>>>
>>>> また、getManagerFromNSの方は、
>>>> #mgr = RTCmanager(ManagerHelper.narrow(obj))
>>>> とコメントアウトして、元から書いてあったものを参考に、
>>>> mgr = RTCmanager(obj._narrow(RTM.Manager))
>>>> とすると、以下のようにインスタンスは生成されました。
>>>>
>>>>
>>>> しかしその後、
>>>> 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 :
>>>>> 三宅さん
>>>>>
>>>>> 安藤です
>>>>>
>>>>>> 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

Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 02833] findRTCmanagerに関する質問

三宅さん

安藤です

すみません、見てるソースが違うのでいろいろ違うみたいですね。
私が見ていたソースでは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 :
> 安藤さん
>
> 三宅です。
> 度々すいません。
>
> 先日は気づかなかったのですが、安藤さんのコードにある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 :
>> 三宅さま
>>
>> 安藤です
>>
>>> 遅くなりましたが、アドバイスの通りに修正したところ、無事に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 :
>>>> 三宅さん
>>>>
>>>> 安藤です
>>>>
>>>> 失礼しました。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 :
>>>>> 安藤さん
>>>>>
>>>>> 三宅です。
>>>>>
>>>>> 頂いたプログラムのように変更を加えてみましたが、
>>>>> objの生成の段階で例外が発生してしまいます。
>>>>>
>>>>> また、getManagerFromNSの方は、
>>>>> #mgr = RTCmanager(ManagerHelper.narrow(obj))
>>>>> とコメントアウトして、元から書いてあったものを参考に、
>>>>> mgr = RTCmanager(obj._narrow(RTM.Manager))
>>>>> とすると、以下のようにインスタンスは生成されました。
>>>>>
>>>>>
>>>>> しかしその後、
>>>>> 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 :
>>>>>> 三宅さん
>>>>>>
>>>>>> 安藤です
>>>>>>
>>>>>>> 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
_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

Kenji Miyake
Offline
Last seen: Never ago
Joined: 2013-06-27 23:00
[openrtm-users 02834] findRTCmanagerに関する質問

安藤さん

三宅です。
こちらが使っているソースと、変更を加えたパッチ部分を送ります。
jython版を参考にして、initCORBAの中でnshostに代入をしてみました。

変更内容は、環境変数から読むのが楽そうだったので、そのように直してみました。
この変更で動作確認はしたのですが、問題がありそうなら、指摘していただけると幸いです。

よろしくお願いします。

2013年7月2日 8:07 Ando Noriaki :
> 三宅さん
>
> 安藤です
>
> すみません、見てるソースが違うのでいろいろ違うみたいですね。
> 私が見ていたソースでは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 :
>> 安藤さん
>>
>> 三宅です。
>> 度々すいません。
>>
>> 先日は気づかなかったのですが、安藤さんのコードにある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 :
>>> 三宅さま
>>>
>>> 安藤です
>>>
>>>> 遅くなりましたが、アドバイスの通りに修正したところ、無事に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 :
>>>>> 三宅さん
>>>>>
>>>>> 安藤です
>>>>>
>>>>> 失礼しました。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 :
>>>>>> 安藤さん
>>>>>>
>>>>>> 三宅です。
>>>>>>
>>>>>> 頂いたプログラムのように変更を加えてみましたが、
>>>>>> objの生成の段階で例外が発生してしまいます。
>>>>>>
>>>>>> また、getManagerFromNSの方は、
>>>>>> #mgr = RTCmanager(ManagerHelper.narrow(obj))
>>>>>> とコメントアウトして、元から書いてあったものを参考に、
>>>>>> mgr = RTCmanager(obj._narrow(RTM.Manager))
>>>>>> とすると、以下のようにインスタンスは生成されました。
>>>>>>
>>>>>>
>>>>>> しかしその後、
>>>>>> 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 :
>>>>>>> 三宅さん
>>>>>>>
>>>>>>> 安藤です
>>>>>>>
>>>>>>>> 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
> _______________________________________________
> openrtm-users mailing list
> openrtm-users@openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users

Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 02835] findRTCmanagerに関する質問

三宅さん

安藤です

環境変数でネームサーバのアドレスを取るのはいいと思います。
ただし、RTCTREE_NAMESERVERS はカンマ区切りで複数のネームサーバが書かれている
可能性があります。それでも、ポート番号が必ず記述されていればこのコードでうまくいきますが、
省略されている場合はうまくいかないかもしれません
#rtctreeのソースを見ていないので違ってるかもしれませんが。

なので、念のため
nshost = os.environ["RTCTREE_NAMESERVERS"].split(",")[0].split(":")[0]
こんな感じにしておいた方がいいかもしれません。

根本的な疑問ですが、ネームサーバのあるホストに、RTC Managerがあると仮定するのは
意味があるんでしょうか?hrpsysがそういうポリシーなら、それはそれでいいのですが。

2013年7月2日 12:55 Kenji Miyake :
> 安藤さん
>
> 三宅です。
> こちらが使っているソースと、変更を加えたパッチ部分を送ります。
> jython版を参考にして、initCORBAの中でnshostに代入をしてみました。
>
> 変更内容は、環境変数から読むのが楽そうだったので、そのように直してみました。
> この変更で動作確認はしたのですが、問題がありそうなら、指摘していただけると幸いです。
>
> よろしくお願いします。
>
>
> 2013年7月2日 8:07 Ando Noriaki :
>> 三宅さん
>>
>> 安藤です
>>
>> すみません、見てるソースが違うのでいろいろ違うみたいですね。
>> 私が見ていたソースでは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 :
>>> 安藤さん
>>>
>>> 三宅です。
>>> 度々すいません。
>>>
>>> 先日は気づかなかったのですが、安藤さんのコードにある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 :
>>>> 三宅さま
>>>>
>>>> 安藤です
>>>>
>>>>> 遅くなりましたが、アドバイスの通りに修正したところ、無事に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 :
>>>>>> 三宅さん
>>>>>>
>>>>>> 安藤です
>>>>>>
>>>>>> 失礼しました。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 :
>>>>>>> 安藤さん
>>>>>>>
>>>>>>> 三宅です。
>>>>>>>
>>>>>>> 頂いたプログラムのように変更を加えてみましたが、
>>>>>>> objの生成の段階で例外が発生してしまいます。
>>>>>>>
>>>>>>> また、getManagerFromNSの方は、
>>>>>>> #mgr = RTCmanager(ManagerHelper.narrow(obj))
>>>>>>> とコメントアウトして、元から書いてあったものを参考に、
>>>>>>> mgr = RTCmanager(obj._narrow(RTM.Manager))
>>>>>>> とすると、以下のようにインスタンスは生成されました。
>>>>>>>
>>>>>>>
>>>>>>> しかしその後、
>>>>>>> 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 :
>>>>>>>> 三宅さん
>>>>>>>>
>>>>>>>> 安藤です
>>>>>>>>
>>>>>>>>> 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
>>>>
_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

Kei Okada
Offline
Last seen: Never ago
Joined: 2011-05-17 20:20
[openrtm-users 02850] findRTCmanagerに関する質問

安藤さん

岡田です.お忙しいところすいません.
ちょっと教えていただきたいんですが,

2013/6/29 Ando Noriaki :
> corbaloc = "corbaloc:iiop:" + hostname + ":2810/manager"

とあるのですが,これはこれでよいでしょうか?
corbaのデフォルトのポートは2809で,標準でopenrtmはそのポートを
利用していると理解していますが,ここで2810とでてくるのはなぜでしょうか?
マネージャは2809と2810の2つを使っているのでしょうか.

ちょうど,
https://code.google.com/p/rtm-ros-robotics/issues/detail?id=140
のように,
omniORB: Error: Unable to create an endpoint of this description: giop:tcp::2810
と表示されて困っている方がいるんですが,そもそもopenrtmは2809しか使っていないのでは?
と思っていたんですが,なにか理解が違うように思えてきた,ということで質問させていただき
ました.
_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 02851] findRTCmanagerに関する質問

岡田先生

安藤です

他の質問も答えられてなくてすみません。これは簡単なので。。。

まず、2809というのはCORBAネームサービスのデフォルトポートです。
一般のCORBAのORBやサーバント自体はのデフォルトポートというのは
特に決まっていません。

また、2010番ポートはマスターマネージャに特別に割り当てているポートです。
これはOpenRTMの独自仕様です。

マネージャはrtcdやその他のコンポーネントで-dオプション付きで起動すると
自身をマスターと認識してエンドポイントを2810に設定します。
もし、マスターとなるプロセスが他にもある場合、ポート番号の衝突が起きて、
omniORB: Error: Unable to create an endpoint of this description: giop:tcp::2810
のようなエラーが出ることがあります。

2013年7月30日 10:55 Kei Okada :
> 安藤さん
>
> 岡田です.お忙しいところすいません.
> ちょっと教えていただきたいんですが,
>
> 2013/6/29 Ando Noriaki :
>> corbaloc = "corbaloc:iiop:" + hostname + ":2810/manager"
>
> とあるのですが,これはこれでよいでしょうか?
> corbaのデフォルトのポートは2809で,標準でopenrtmはそのポートを
> 利用していると理解していますが,ここで2810とでてくるのはなぜでしょうか?
> マネージャは2809と2810の2つを使っているのでしょうか.
>
> ちょうど,
> https://code.google.com/p/rtm-ros-robotics/issues/detail?id=140
> のように,
> omniORB: Error: Unable to create an endpoint of this description: giop:tcp::2810
> と表示されて困っている方がいるんですが,そもそもopenrtmは2809しか使っていないのでは?
> と思っていたんですが,なにか理解が違うように思えてきた,ということで質問させていただき
> ました.
> _______________________________________________
> 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

Log in or register to post comments

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK