[openrtm-users 02971] Re: ルータのLAN側にあるRTCの操作

Ando Noriaki n-ando @ aist.go.jp
2013年 11月 22日 (金) 11:53:16 JST


安藤です

> ・CORBAエンドポイントはORB一つに対して一つのIPアドレス+ポートの
> 割り当てが必要で、それをcorba.endpoints のオプションで行う。
> これはエンドポイントを実際に作成するため、既にそれが存在していればNG
> (複数のORBで同じエンドポイントを共有できない)。
> そのため、ORBの数だけエンドポイントが必要になる。
> ルータ越えをする場合は、ORBの数だけ(RTCマネージャのプロセス数だけ)
> ポートフォワードを設定する必要がある。
> なお、一つのORBですべてのRTC, EC, Port等のCORBAオブジェクトを
> 扱うようにすれば(同一プロセス上ですべてのCORBAサーバントを動かせば)、
> 一つのポートフォワードでも実行可能。

そうですね。たいていの実装ではORBはシングルトンですので、ORB=プロセス
と考えていいと思います。ORBが接続を受け付ける端点をエンドポイントと呼んでいて
corba.endpoints がその設定を行うオプションです。

> ・実際のエンドポイントに到達できるためには、それが同じサブネット上に
> なければならない。しかし今回のようにルータでポートフォワードをしている場合は、
> 同一サブネット上に存在するポートフォワードのIPアドレス+ポートを
> IIOPアドレスに加えてあげればよい。
> この操作をするオプションが、corba.alternate_iiop_addresses である。

同一サブネット上になくてもいいですが、ip reachable である必要があります。
NATの内側はそのままではip unreachable ですので、ポートフォワードが必要で
見かけ上のIPアドレス・ポートが変わるので、corba.alternate_iiop_addresses で
そのIPアドレス・ポート番号をIORに含めてやる、といったところです。

これであとはUPnP対応のルータであればminiupnpcなどを使って自動でポート
フォワーディングを設定してあげるようにすれば比較的簡単にルータ内のRTCの
操作ができるようになります、が、まだそこまではできていません。
http://miniupnp.free.fr/
http://d.hatena.ne.jp/konbunori/20110328/1301250660

> 以上の理解で間違っていればご指摘ください。
> この仕組みさえ分かっていれば、rtc.confの設定は容易にできますね。
> また一つ勉強になりました。
>
> これに関して問題があるとすればRTSEの反応の遅さですかね。
> JavaのCORBA実装のせいのようですが、
> あまりにも遅すぎて実用性に欠けるような気がします
> (RTCをダイアログに表示させるのに1分ぐらい待たされるのはちょっとしんどい)。

試しに、RTSEの設定でタイムアウトを少し短めにしてみてください。
ウィンドウ→設定→RT Name Service View の「同期」でタイムアウト待ち時間
がデフォルトで1秒になっているところを50msくらいにしてみてください。
これで少しましになったような気がします。

> RTCの操作には、omniORBで自作プログラムを組むか、
> 原さんが開発しているエディタ(CORBAはRtORBでしょうか)を
> 使った方がよさそうですね。

rtshellもomniORBpyなので、マルチプロファイルに対応しています。
あと、RtORBはマルチプロファイルには対応していなかったように思いますので、
どうなるかはわかりません。


More information about the openrtm-users mailing list