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

2 個の投稿 / 0 new
最終投稿
Kenji Miyake
オフライン
Last seen: なし 前
登録日: 2013-06-27 23:00
[openrtm-users 02822] findRTCmanagerに関する質問

はじめまして、JSK修士2年の三宅と申します。

hiro014(192.168.128.14)というロボットで、RTMを使用しています。

以下のようにfindRTCmanagerを行った時に、managehostにhiro014を使用すると問題なく実行できるのですが、
hiro014のIPアドレスでは、exeptionが発生してしまいます。

IPアドレスからも通信ができると良いのではないか、とも思うのですが、
これは何故このような仕様になっているのでしょうか?

よろしくお願い致します。

*** Problem ***
leus@parsnip:~/tmp_hiro$ ipython bag_report_sample.py
managehost = hiro014
ms =
managerhost = 192.168.128.14
exception in findRTCmanager(192.168.128.14)
ms = None

*** My sample program ***
#!/usr/bin/env python
import roslib; roslib.load_manifest("hrpsys")

import os
import rtm

from rtm import *
from OpenHRP import *

import socket
import time

managerhost = "hiro014"
print "managehost = ", managerhost
ms = rtm.findRTCmanager(managerhost)
print "ms = ", ms

managerhost = "192.168.128.14"
print "managerhost = ", managerhost
ms = rtm.findRTCmanager(managerhost)
print "ms = ", ms

*** My Environment ***
leus@parsnip:~$ route
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
default raspberry.jsk.t 0.0.0.0 UG 0 0 0 eth0
link-local * 255.255.0.0 U 1000 0 0 eth0
192.168.101.0 * 255.255.255.0 U 1 0 0 eth0
192.168.128.0 * 255.255.255.0 U 1 0 0 eth1

leus@parsnip:~$ ifconfig
eth0 Link encap:イーサネット ハードウェアアドレス 00:1f:29:05:a4:11
inetアドレス:192.168.101.164 ブロードキャスト:192.168.101.255 マスク:255.255.255.0
inet6アドレス: fe80::21f:29ff:fe05:a411/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:364712 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:100019 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:91506001 (91.5 MB) TXバイト:23520376 (23.5 MB)
割り込み:16

eth1 Link encap:イーサネット ハードウェアアドレス 00:1f:29:05:a4:10
inetアドレス:192.168.128.254 ブロードキャスト:192.168.128.255 マスク:255.255.255.0
inet6アドレス: fe80::21f:29ff:fe05:a410/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:476946 エラー:0 損失:55804 オーバラン:0 フレーム:0
TXパケット:399160 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:320400400 (320.4 MB) TXバイト:52379713 (52.3 MB)
割り込み:17

lo Link encap:ローカルループバック
inetアドレス:127.0.0.1 マスク:255.0.0.0
inet6アドレス: ::1/128 範囲:ホスト
UP LOOPBACK RUNNING MTU:16436 メトリック:1
RXパケット:410223 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:410223 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:0
RXバイト:161057733 (161.0 MB) TXバイト:161057733 (161.0 MB)

virbr0 Link encap:イーサネット ハードウェアアドレス ba:5c:0c:ca:90:a0
inetアドレス:192.168.122.1 ブロードキャスト:192.168.122.255 マスク:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 メトリック:1
RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:0
RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)

未定義
Ando Noriaki
オフライン
Last seen: 1年 9ヶ月 前
登録日: 2011-09-04 17:20
[openrtm-users 02823] findRTCmanagerに関する質問

三宅さん

産総研 安藤と申します

findRTCmanager() というのは hrpsysの一部のこのrtm.py内のfindRTCManagerのことであってますでしょうか?

https://github.com/thomas-moulard/hrpsys-base-deb/blob/master/jython/rtm.py

これが三宅さんのおっしゃるfindRTCmanager()だと仮定して、ソースを読む限り、
findRTCmanager()関数はネームサーバの

+ .host_cxt
+ manager.mgr

というところに登録されているマネージャを探しに行っているようです。
また、findRTCmanager()の引数がIPアドレスの場合、ホスト名に変換して
探しているので、一見よさそうに見えるのですが、

OpenRTM-aist側: はドメイン名なしのホスト名
# 具体的には uname (2) の nodename からとっています。

rtm.py側: はFQDNなホスト名
# 正確には gethostbyaddr (2) で取得される正式名(FQDNとは限らない?)
http://docs.python.jp/2.5/lib/module-socket.html

となっているため見つけられないのではないかと思います。

ですので、一番簡単な対処法はマネージャに与える rtc.conf で以下のように指定することです。
#ちょっと美しくないやり方ですが。
manager.naming_formats: %h.host_cxt/%n.mgr, .host_cxt/%n.mgr

http://www.openrtm.org/openrtm/ja/content/rtcconf%E8%A8%AD%E5%AE%9A%E9%A0%85%E7%9B%AE%E4%B8%80%E8%A6%A7#toc5

これで、マネージャが

+ .host_cxt
+ manager.mgr
+ .host_cxt
+ manager.mgr

のように2か所に登録されます。(美しくないです。)

あとは、rtm.pyに手を加えることが許されるなら、マネージャの特性を利用して、
orb.string_to_object() を利用してダイレクトに参照を取得する方法が使えます。
findRTCmanager() を下のような感じで書き換えてあげれば、だいたい
どんなアドレスを与えてやっても取得できると思います。
#ただし、下のコードは動かしたことがないのでエラーはあると思います。

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(ManagerHelper.narrow(obj))
except:
mgr = None
return mgr

def getManagerDirectly(hostname, mgr = None):
corbaloc = "corbaloc:iiop:" + hostname + "/manager"
try:
obj = ORB.init([], System.getProperties()).string_to_object(corbaloc)
mgr = RTCmanager(ManagerHelper.narrow(obj))
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:
if not CORBA.is_nil(getmanagerDirectly(hostname, mgr)): return mgr
if not CORBA.is_nil(getManagerFromNS(hostname, mgr)): return mgr
print "Manager not found"
return None

以上、参考になれば幸いです。

#ちなみに、このrtm.pyは誰に言えば修正できるんでしょうか?

2013年6月27日 22:03 Kenji Miyake :
> はじめまして、JSK修士2年の三宅と申します。
>
> hiro014(192.168.128.14)というロボットで、RTMを使用しています。
>
> 以下のようにfindRTCmanagerを行った時に、managehostにhiro014を使用すると問題なく実行できるのですが、
> hiro014のIPアドレスでは、exeptionが発生してしまいます。
>
> IPアドレスからも通信ができると良いのではないか、とも思うのですが、
> これは何故このような仕様になっているのでしょうか?
>
> よろしくお願い致します。
>
> *** Problem ***
> leus@parsnip:~/tmp_hiro$ ipython bag_report_sample.py
> managehost = hiro014
> ms =
> managerhost = 192.168.128.14
> exception in findRTCmanager(192.168.128.14)
> ms = None
>
> *** My sample program ***
> #!/usr/bin/env python
> import roslib; roslib.load_manifest("hrpsys")
>
> import os
> import rtm
>
> from rtm import *
> from OpenHRP import *
>
> import socket
> import time
>
> managerhost = "hiro014"
> print "managehost = ", managerhost
> ms = rtm.findRTCmanager(managerhost)
> print "ms = ", ms
>
> managerhost = "192.168.128.14"
> print "managerhost = ", managerhost
> ms = rtm.findRTCmanager(managerhost)
> print "ms = ", ms
>
> *** My Environment ***
> leus@parsnip:~$ route
> カーネルIP経路テーブル
> 受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
> default raspberry.jsk.t 0.0.0.0 UG 0 0 0 eth0
> link-local * 255.255.0.0 U 1000 0 0 eth0
> 192.168.101.0 * 255.255.255.0 U 1 0 0 eth0
> 192.168.128.0 * 255.255.255.0 U 1 0 0 eth1
>
> leus@parsnip:~$ ifconfig
> eth0 Link encap:イーサネット ハードウェアアドレス 00:1f:29:05:a4:11
> inetアドレス:192.168.101.164 ブロードキャスト:192.168.101.255 マスク:255.255.255.0
> inet6アドレス: fe80::21f:29ff:fe05:a411/64 範囲:リンク
> UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
> RXパケット:364712 エラー:0 損失:0 オーバラン:0 フレーム:0
> TXパケット:100019 エラー:0 損失:0 オーバラン:0 キャリア:0
> 衝突(Collisions):0 TXキュー長:1000
> RXバイト:91506001 (91.5 MB) TXバイト:23520376 (23.5 MB)
> 割り込み:16
>
> eth1 Link encap:イーサネット ハードウェアアドレス 00:1f:29:05:a4:10
> inetアドレス:192.168.128.254 ブロードキャスト:192.168.128.255 マスク:255.255.255.0
> inet6アドレス: fe80::21f:29ff:fe05:a410/64 範囲:リンク
> UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
> RXパケット:476946 エラー:0 損失:55804 オーバラン:0 フレーム:0
> TXパケット:399160 エラー:0 損失:0 オーバラン:0 キャリア:0
> 衝突(Collisions):0 TXキュー長:1000
> RXバイト:320400400 (320.4 MB) TXバイト:52379713 (52.3 MB)
> 割り込み:17
>
> lo Link encap:ローカルループバック
> inetアドレス:127.0.0.1 マスク:255.0.0.0
> inet6アドレス: ::1/128 範囲:ホスト
> UP LOOPBACK RUNNING MTU:16436 メトリック:1
> RXパケット:410223 エラー:0 損失:0 オーバラン:0 フレーム:0
> TXパケット:410223 エラー:0 損失:0 オーバラン:0 キャリア:0
> 衝突(Collisions):0 TXキュー長:0
> RXバイト:161057733 (161.0 MB) TXバイト:161057733 (161.0 MB)
>
> virbr0 Link encap:イーサネット ハードウェアアドレス ba:5c:0c:ca:90:a0
> inetアドレス:192.168.122.1 ブロードキャスト:192.168.122.255 マスク:255.255.255.0
> UP BROADCAST MULTICAST MTU:1500 メトリック:1
> RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
> TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
> 衝突(Collisions):0 TXキュー長:0
> RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)
>
>
>
> --
> 三宅 健司
> 東京大学 情報理工学系研究科 創造情報学専攻
> 稲葉・岡田研究室 修士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.0.1-RELESE

統計

Webサイト統計
ユーザ数:2195
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク