機能 #3412
⑬ 名前付けポリシー機能の拡張
100%
Description
「名前ベースのコンポーネント」機能を実現するために、異なるプロセスで起動した同一コンポーネントでも、マスターの配下にある他のコンポーネントの名前を見て、インスタンス番号を付ける機能を実装する。また、コンポーネント自身もINS機能を利用して、カテゴリ名、インスタンスIDをObjectIdとして起動するように、新たなPOA上でのアクティブ化、名前付けなどを実装すること。
History
#1 Updated by miyamoto almost 8 years ago
- Due date set to 03/25/2016
- Assignee set to miyamoto
- Target version set to RELEASE_1_2_0
- Estimated time set to 30.00 h
#2 Updated by n-ando almost 8 years ago
- NamingPolicyBase基底クラスを用意する
- Policyのファクトリを用意する
typedef ::coil::GlobalFactory<NamingPolicyBase> NamingPolicyFactory;
- いくつかのNamingPolicyを作る
- プロセス間でインスタンス番号をシーケンシャルに振るポリシー
- ネームサービス上でユニークになるようにシーケンシャルに番号を振るポリシー
- rtc.conf に manager.components.naming_policy:
- ex: process_unique: プロセス内でユニークになるようにインスタンス名にシーケンシャルに番号をふる (現在のデフォルト)
- ex: node_unique: ノード内でユニークになるようにインスタンス名にシーケンシャルに番号をふる
- ex: ns_unique: ネーミングサービス上でユニークになるようにry
- Manager:registerFactory() 内で、コンポーネントのファクトリを登録する際に、rtc.confで指定されたポリシーをインスタンス化し、FactoryCXX に渡す。
#3 Updated by miyamoto almost 8 years ago
- File test_NumberingPolicy_node.py test_NumberingPolicy_node.py added
- File test_NumberingPolicy_ns.py test_NumberingPolicy_ns.py added
- % Done changed from 0 to 30
NumberingPolicyBase.py、NodeNumberingPolicy.py、NamingServiceNumberingPolicy.pyを追加した。
NumberingPolicyBase.pyにはNumberingPolicyBaseクラス、NumberingPolicyFactoryクラスを定義している。
これに伴いNumberingPolicyクラスはNumberingPolicyBaseクラスを継承するように変更した。
ManagerクラスのregisterFactory関数でFactoryPythonクラスの初期化時にmanager.components.naming_policyで指定したポリシーを渡すように変更した。
manager.components.naming_policyはprocess_unique、node_unique、ns_uniqueから選択可能であり、デフォルトではprocess_uniqueを設定してある。
NodeNumberingPolicyクラスではmanager.components.naming_policyをnode_uniqueに指定したときのポリシーを定義してある。
マスターマネージャ、スレーブマネージャからRTCを検索して、名前がユニークになるように番号を振る。
起動したマネージャがスレーブマネージャの場合は登録されているマスターマネージャからスレーブマネージャのリストを取得してRTCの検索を行う。登録されているマスターマネージャが存在しない場合はプロセス内で起動したマネージャでのみ検索を行う。
RTCの存在確認には#3411で実装したManager.idlのget_components_by_nameを使用する。
以下のコードでテストを行った。
このテスト用コードでは2つのプロセスでRTCを起動し、それぞれマスターマネージャ、スレーブマネージャが起動するようにしている。
self.queue = multiprocessing.Queue()
self.outport_process = multiprocessing.Process(target=runTestComp2, args=(self.queue,))
self.outport_process.start()
time.sleep(1)
sys.argv.extend(['-o','manager.components.naming_policy:node_unique'])
self.manager = OpenRTM_aist.Manager.init(sys.argv)
self.manager.setModuleInitProc(TestComp1ModuleInit)
self.manager.activateManager()
comp = self.manager.getComponent("TestComp11")
self.assertTrue(comp is not None)
NamingServiceNumberingPolicyクラスではmanager.components.naming_policyをns_uniqueに指定したときのポリシーを定義してある。
ネーミングサービスから一致するインスタンス名のRTCを検索して、ユニークな名前を付けるように番号を振る。
以下のコードでテストを行った。
self.queue = multiprocessing.Queue()
self.outport_process = multiprocessing.Process(target=runTestComp2, args=(self.queue,))
self.outport_process.start()
time.sleep(1)
sys.argv.extend(['-o','manager.components.naming_policy:ns_unique'])
self.manager = OpenRTM_aist.Manager.init(sys.argv)
self.manager.setModuleInitProc(TestComp1ModuleInit)
self.manager.activateManager()
comp = self.manager.getComponent("TestComp11")
self.assertTrue(comp is not None)
#4 Updated by miyamoto over 7 years ago
- % Done changed from 30 to 100
#6 Updated by n-miyamoto almost 6 years ago
- Status changed from 新規 to 解決
- % Done changed from 90 to 100
#7 Updated by n-miyamoto about 5 years ago
- Status changed from 解決 to 終了
[incompat,new_func,new_file,->RELENG_1_2] add NumberingPolicyBase.py, NodeNumberingPolicy.py, and NamingServiceNumberingPolicy.py. refs #3412