ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
この文書なんかを読んでいて気付いたのですが、複合コンポーネントとrtcdは混同しやすいのではないかと思いました。
まず複合コンポーネントというのはこの論文に書いてある通り「幾つかのRTコンポーネント (RTC) を合成してひとつのRTCにする手法」の事で、複数のRTCを一纏めにして指定したポートだけ公開することで内部の隠蔽ができるようになっています。
rtcdはマネージャーの起動のみを行います。
rtcdではどのDLLをロードしてRTCを起動するかはrtc.confに記述します。
単一のマネージャで複数のRTCを起動することも可能です。
同一プロセスでRTCを起動するため、通信は高速に行える等のメリットがあります。
分かりづらいと言えばマスターマネージャとスレーブマネージャが理解しづらいです。
というよりも僕もよく分かっていません。
この論文を読む限りでは、外部から操作を受け付けてスレーブマネージャにRTC起動等の要求を出すのがマスターマネージャで、マスターマネージャからの要求に従ってRTCの起動などを行うのがスレーブマネージャという認識でいいのかな?
いやでもマスターマネージャでもRTCの起動はできているように見える、というかほとんどその使われ方しかしていないように思うのですが、現状がどうなっているのかは分かりません。
ひょっとして内部的には新たにスレーブマネージャを起動してRTCを起動しているのだろうか?
見た目ではよく分かりません。
スレーブマネージャはマスターマネージャの要求がなくとも自分でRTCを起動している、というよりも現在存在するRTCのほとんどはそうなっていると思うのですが、よく分かりません。
僕はですがこのあたりでマスターマネージャとスレーブマネージャの区別が曖昧になっています。
外部から操作するとなったらマネージャの起動したプロセスでGUIも起動するという方法もありますが、基本的にはRTシステムエディタ、rtshell、rtctreeで操作することにはなるので、スレーブマネージャはマスターマネージャを経由して操作する必要があるとは思います。
・・・・が、RTシステムエディタ、rtshellでの操作方法が分かりませんでした。
仕方ないのでrtctreeを使って以下のようなプログラムを書きました。
見ての通りmanager.mgrというマスターマネージャにどのようなスレーブマネージャが登録されているか確認するためのプログラムです。
import rtctree.tree
tree = rtctree.tree.RTCTree(servers='localhost:2809')
mgr = tree.get_node(['/', 'localhost:2809' ,'manager.mgr'])
#print mgr.masters
print mgr.slaves
del tree
まずマスターマネージャでmanager.mgrを起動します。
次にサンプルのConsoleIn、ConsoleOutを起動します。
この時点でConsoleIn、ConsoleOutのRTCを起動したマネージャはスレーブマネージャとして起動してあるためmanager.mgrのスレーブとして登録されるはずです。
・・・・が、実行結果は以下の通り何故か一つしかスレーブマネージャが登録されていません。
[<rtctree.manager.Manager object at 0x02C1CF90>]
確認のためにmanager.mgrを起動したプログラムで以下の処理を追加しました。
while True:
print mgr._mgrservant.get_slave_managers()
結果は以下の通り2つのスレーブマネージャが登録されています。
[<RTM._objref_Manager instance at 0x026A5850>, <RTM._objref_Manager instance at 0x026A20F8>]
な… 何を言っているのか わからねーと思うが(ry
このネタを使うのは2週間ぐらい早かったかもしれません。
ちなみにrtctreeのプログラムでprint mgr.componentsとするとちゃんと2つのRTCが存在することが確認できたので、スレーブマネージャで起動したRTCを取得できてはいるみたいです。
どうにも僕のマスターマネージャ、スレーブマネージャに関する認識が違うのではないかと思い始めました。
前にどこかのブログでマネージャの説明をしているのを見たようなと思って探してみたらこのサイトがそうだったみたいです。
前半部分は同じ認識だと思うのですが、後半部分が一致しません。
そもそも複合コンポーネントを作成する手順は、
それからスレーブマネージャは起動した時点で対応するポート番号のマスターマネージャに登録されると思っていたので複合コンポーネントと関係はないと思うのですがもう何がなんやら分からなくなってきました。
やっぱりややこしいなあ。
誰かOpenRTM-aistのサイトのwikiに解説記事を書いてください。
だいたい誰も教えてくれないから混乱するのであって僕は悪くありません。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
まず複合コンポーネントというのはこの論文に書いてある通り「幾つかのRTコンポーネント (RTC) を合成してひとつのRTCにする手法」の事で、複数のRTCを一纏めにして指定したポートだけ公開することで内部の隠蔽ができるようになっています。
rtcdはマネージャーの起動のみを行います。
rtcdではどのDLLをロードしてRTCを起動するかはrtc.confに記述します。
単一のマネージャで複数のRTCを起動することも可能です。
同一プロセスでRTCを起動するため、通信は高速に行える等のメリットがあります。
分かりづらいと言えばマスターマネージャとスレーブマネージャが理解しづらいです。
というよりも僕もよく分かっていません。
この論文を読む限りでは、外部から操作を受け付けてスレーブマネージャにRTC起動等の要求を出すのがマスターマネージャで、マスターマネージャからの要求に従ってRTCの起動などを行うのがスレーブマネージャという認識でいいのかな?
いやでもマスターマネージャでもRTCの起動はできているように見える、というかほとんどその使われ方しかしていないように思うのですが、現状がどうなっているのかは分かりません。
ひょっとして内部的には新たにスレーブマネージャを起動してRTCを起動しているのだろうか?
見た目ではよく分かりません。
スレーブマネージャはマスターマネージャの要求がなくとも自分でRTCを起動している、というよりも現在存在するRTCのほとんどはそうなっていると思うのですが、よく分かりません。
僕はですがこのあたりでマスターマネージャとスレーブマネージャの区別が曖昧になっています。
外部から操作するとなったらマネージャの起動したプロセスでGUIも起動するという方法もありますが、基本的にはRTシステムエディタ、rtshell、rtctreeで操作することにはなるので、スレーブマネージャはマスターマネージャを経由して操作する必要があるとは思います。
・・・・が、RTシステムエディタ、rtshellでの操作方法が分かりませんでした。
仕方ないのでrtctreeを使って以下のようなプログラムを書きました。
見ての通りmanager.mgrというマスターマネージャにどのようなスレーブマネージャが登録されているか確認するためのプログラムです。
import rtctree.tree
tree = rtctree.tree.RTCTree(servers='localhost:2809')
mgr = tree.get_node(['/', 'localhost:2809' ,'manager.mgr'])
#print mgr.masters
print mgr.slaves
del tree
まずマスターマネージャでmanager.mgrを起動します。
次にサンプルのConsoleIn、ConsoleOutを起動します。
この時点でConsoleIn、ConsoleOutのRTCを起動したマネージャはスレーブマネージャとして起動してあるためmanager.mgrのスレーブとして登録されるはずです。
・・・・が、実行結果は以下の通り何故か一つしかスレーブマネージャが登録されていません。
[<rtctree.manager.Manager object at 0x02C1CF90>]
確認のためにmanager.mgrを起動したプログラムで以下の処理を追加しました。
while True:
print mgr._mgrservant.get_slave_managers()
結果は以下の通り2つのスレーブマネージャが登録されています。
[<RTM._objref_Manager instance at 0x026A5850>, <RTM._objref_Manager instance at 0x026A20F8>]
な… 何を言っているのか わからねーと思うが(ry
このネタを使うのは2週間ぐらい早かったかもしれません。
ちなみにrtctreeのプログラムでprint mgr.componentsとするとちゃんと2つのRTCが存在することが確認できたので、スレーブマネージャで起動したRTCを取得できてはいるみたいです。
どうにも僕のマスターマネージャ、スレーブマネージャに関する認識が違うのではないかと思い始めました。
前にどこかのブログでマネージャの説明をしているのを見たようなと思って探してみたらこのサイトがそうだったみたいです。
前半部分は同じ認識だと思うのですが、後半部分が一致しません。
そもそも複合コンポーネントを作成する手順は、
- どこかのマネージャで複合コンポーネントを起動する
- 複合コンポーネントに子コンポーネントを登録する
- 公開するデータポートを指定する
それからスレーブマネージャは起動した時点で対応するポート番号のマスターマネージャに登録されると思っていたので複合コンポーネントと関係はないと思うのですがもう何がなんやら分からなくなってきました。
やっぱりややこしいなあ。
誰かOpenRTM-aistのサイトのwikiに解説記事を書いてください。
だいたい誰も教えてくれないから混乱するのであって僕は悪くありません。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする