[openrtm-users 00732] Re: コンポーネントの複数起動に関して

Masayuki Shimizu masayuki.shimizu @ aist.go.jp
2009年 1月 14日 (水) 01:20:16 JST


静岡大の清水です。

私も現状の名前bindの仕方には少々問題が
あると思っているので、議論させてください。

まず、現時点での対処法ですが、
スタティックに名前を決めたいようなので、
以下のような方法はいかがでしょう。

--------------------------------------
1.立ち上げるRTCの数の分だけ
confファイルを用意する。
(例)RTCを2つあげるのであれば、
rtc0.conf, rtc1.confをつくる。

2.それぞれのconfファイルにスタティックかつ
グローバルに固有なネーミングフォーマットを書く。
(例)
[rtc0.conf]
naming.formats: %h.cxt0/%n.rtc
[rtc1.conf]
naming.formats: %h.cxt1/%n.rtc

3.それぞれのRTCをconfファイル指定で起動する。
$ MyComp -f rtc0.conf
$ MyComp -f rtc1.conf

上記のようにすると、
ネームサーバには次のように登録されるはずです。
hostname.cxt0/MyComp0.rtc
hostname.cxt1/MyComp0.rtc
同じRTCのバインド名でも、コンテキストが異なるため
上書きはされないはずです。
また、プロセス番号等の動的に決まるパラメータ
も入っていないので、RTCLINKでも使えると思います。
--------------------------------------

以上のような方法でも、RTCを何個あげるかが
あらかじめ決まってないといけないので、
汎用な方法とは言えません。

以前から,スマートかつ汎用な名前決定ルールを
考えているのですが、なかなか良い解決法が
思いつきません。悩んでいる問題点は次のようなものです。

1)同じRTCを複数起動する場合、
ネームサーバごとにスタティックかつ
グローバルに固有な名前が自動的に
決まらないといけない(RTCLINKで再呼び出しするため)が、
RTC自体はローカルなプロセスレベルで起動・管理
されるため、どうやってグローバルに固有な名前を
きめるのか。また、この場合のグローバルとは
どのレベルにするのが良いのか。
最も上位を取ると、全世界レベルになってしまうが、
そうすると、UUIDのような長い名前が必要になってしまう。

2)RTCをある名前(仮に、MyComp0.rtcとする)で
登録しようとしたとき、あるネームサーバでは
MyComp0.rtcが無いため登録可能であるが、
別のネームサーバでは既にMyComp0.rtcが使われている
ので別の名前にしなければならない場合、
どうするのがよいのか。
ネームサーバごとに別々の名前で登録してもよいが、
同じCORBAオブジェクトに対して、複数の別名が
付くことになるので、ユーザが混乱したり
副作用が起きたりしないか。

少し長くなってしまいましたが、
名前決定法について良いお知恵をお持ちでしたら
ご教示頂けると助かります。
解決法さえ示して頂ければ
0.4系で実装してみたいと思います。

清水

--- Yuki Suga <ysuga @ suou.waseda.jp> wrote:

> RTミドルウェア開発者の皆様:
> 初めて投稿します.早稲田大学の菅です.
> いつも大変お世話になっております.
> 
> 
> コンポーネントの複数起動について皆様のご意見を頂きたく
,
> メールを差し上げました.
> 現在のOpenRTM-aist
> 0.4.2で,同一のコンポーネントを同一マシン上で,
> 複数のプロセスとして起動すると,ネームサーバー上の名前
が,
> ○○Component0.rtcのように同一のものとして
> 上書きされてしまう問題があります.
> 
> 
> これについてはすでに,
> 1.同一プロセス内で複数のコンポーネントを起動する方法
> (メーリス内208番の記事参照)
> 2.rtc.confに%pとしてプロセスIDを付加する方法(同554
番)
> が議論されていますが,それぞれに大きな問題があると思い
ます.
> 
> 
> 1.同一プロセス内で複数のコンポーネントを起動
> ・プロセス起動時に挿入されている枚数を決定する必要があ
る.
> ・プロセス実行中にコンポーネントの数を変更できる?
> 
> 2.rtc.confでプロセスIDを名前に入れる
> ・次回起動時にプロセスIDが変更されるので,
> RTC-LINKなどでSystemEditorを保存しても,
> 前回起動したときのシステムを再現できない.
> 
> 
> ということで,非常に困っています.
> 1.の方法が現在取れる方法として妥当かと思います.
> プロセス実行中に無理やりにコンポーネント数を増やしたり
減らしたり
> できるかもしれません.
> 何よりSystemEditorのシステム図保存が使えないのはかなり
不便です.
> 
> 
> そこで,OpenRTMメーリスのメンバーの皆様で,
> ほかに方法をご存知でしたらお教えいただけませんでしょう
か?
> また,次期OpenRTM-1.0ヴァージョンでは,
> このあたりの使い勝手はどうなりますでしょうか?
> 
> 
> よろしくお願いします.
> 
> 
> 
> ---
> 菅 佑樹
> 早稲田大学創造理工学部総合機械工学科
> 菅野研究室 助手
> E-mail: ysuga @ suou.waseda.jp
> URL: http://www.ysuga.net/robot
> This mail is written by Thunderbird 2.0
> 
> 




openrtm-users メーリングリストの案内