Project

General

Profile

機能 #3412

⑬ 名前付けポリシー機能の拡張

Added by n-ando almost 6 years ago. Updated about 3 years ago.

Status:
終了
Priority:
通常
Assignee:
Start date:
12/22/2015
Due date:
03/25/2016
% Done:

100%

Estimated time:
30.00 h

Description

「名前ベースのコンポーネント」機能を実現するために、異なるプロセスで起動した同一コンポーネントでも、マスターの配下にある他のコンポーネントの名前を見て、インスタンス番号を付ける機能を実装する。また、コンポーネント自身もINS機能を利用して、カテゴリ名、インスタンスIDをObjectIdとして起動するように、新たなPOA上でのアクティブ化、名前付けなどを実装すること。

test_NumberingPolicy_node.py (2.58 KB) test_NumberingPolicy_node.py miyamoto, 02/25/2016 02:25 PM
test_NumberingPolicy_ns.py (2.57 KB) test_NumberingPolicy_ns.py miyamoto, 02/25/2016 02:25 PM

Associated revisions

Revision 658 (diff)
Added by miyamoto over 5 years ago

[incompat,new_func,new_file,->RELENG_1_2] add NumberingPolicyBase.py, NodeNumberingPolicy.py, and NamingServiceNumberingPolicy.py. refs #3412

Revision 693 (diff)
Added by miyamoto over 5 years ago

[compat,->RELENG_1_2] refs #3412

History

#1 Updated by miyamoto almost 6 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 over 5 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 over 5 years ago

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 5 years ago

  • % Done changed from 30 to 100

#5 Updated by n-ando over 4 years ago

  • % Done changed from 100 to 90

これちゃんと動いてる?>NodeUniquePolicy

#6 Updated by n-miyamoto almost 4 years ago

  • Status changed from 新規 to 解決
  • % Done changed from 90 to 100

#7 Updated by n-miyamoto about 3 years ago

  • Status changed from 解決 to 終了

Also available in: Atom PDF