[openrtm-users 02878] Re: マネージャーが使うポート番号について
Ando Noriaki
n-ando @ aist.go.jp
2013年 8月 22日 (木) 10:44:29 JST
安藤です
あまりビギナーな質問ではないので、usersにも転送します(笑
> 岡田です.
>
> 初歩的な質問でbeginnersに連絡したほうがいいのかもしれないのですが,
> OpenRTMのマネージャーが使うポートはデフォルトで2810になっているとおもうのですが,
> こちらでRTCを別のポート(例えば-ORBInitRef
> NameService=corbaloc:iiop:localhost:5005/NameServiceとオプションをつけて5005で立ち上げる)場合にはポートは幾つかになるでしょうか?
このオプションは、orb->resolve_initial_references("NameService") という
呼び出しの時に返すオブジェクトリファレンスを与えるためのオプションです。
OpenRTM-aistではネームサービスのリファレンス取得やその他のサービスの
リファレンス取得に resolve_initial_references は使っていないので、
このオプションはシステムの挙動に影響を与えません。
もし、ORBのポートを含むエンドポイントを指定したい場合は rtc.conf の
corba.endpointsオプションで与えると、希望するIPアドレスおよびポートで
ORBを起動することができます。
> 例えばこちらのクライアントソフト(hrpsysのrtm.py)で以下のようなコードがあるのですが,ここの2810は替えるべきでしょうか?そのままでいいでしょうか?
>
>
> 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
このコードはマスタマネージャのリファレンスを取得しているようですので、
もし、マスターマネージャのポート番号を変更したならこの2810は変更する必要があります。
ただ、OpenRTM-aist内部ではマスタマネージャのポート番号を2810以外に設定する方法は
用意されていなかったと思います。(ちょっと確信がありませんが、、、)
エンドポイントの指定とマスターかどうかの指定はマスターの指定が優先されるためです。
> ついでに,これもよくわかっていないんですが,複数のRTCをプロセスとして立ち上げると
> それぞれのRTCがマネージャをもっていると思うのですが,普通は問題ないのですが,
> 特定のユーザだけ,2個目のRTCを立ち上げた時に以下のエラーが出るんですが,
> これはどういう状況だかわかったりしますでしょうか?
>
> omniORB: Failed to bind to address :: port 2810. Address in use?
> omniORB: Error: Unable to create an endpoint of this description: giop:tcp::2810
これは、2個目のマスターマネージャを起動しているためかと思います。
そのプロセスがマスターになる条件は、
1. (スタンドアロンコンポーネントの場合) オプションに-d がついている
2. rtc.conf で manager.is_master: YES が指定されている
の2つです。これを満たすプロセスを2つ以上起動すると、ポート番号が被るので
おそらくこのようなエラーが出ると思います。
> _______________________________________________
> openrtm-users mailing list
> openrtm-users @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users
More information about the openrtm-users
mailing list