機能 #3406
⑦ トピックベースのポート接続機能
100%
Description
DDSのようなトピックベースのポート接続機能を実装すること。ただし、この機能はデータポート、サービスポートにも利用できるように実装すること。
Associated revisions
[incompat,new_func,->RELENG_1_2] Now NamingManager can register a reference of Port to naming service. refs #3406
[incompat,new_func,->RELENG_1_2] Topic-based connection has been implemented. refs #3406
History
#1 Updated by miyamoto over 7 years ago
- Due date set to 03/25/2016
- Assignee set to miyamoto
- Target version set to RELEASE_1_2_0
- % Done changed from 0 to 90
- Estimated time set to 30.00 h
#2 Updated by miyamoto over 7 years ago
- File test_Manager_new.py test_Manager_new.py added
- % Done changed from 90 to 50
実装¶
Managerクラスに以下の関数を追加した。
publishPorts関数
指定のRTCが保持するポートをネーミングサービスへバインドする
subscribePorts関数
指定のRTCが保持するポートを同じトピック名のコンテキストの下にバインドしてあるポートオブジェクトと接続する
getPortsOnNameServers関数
与えられたパス以下の指定のkindのポートオブジェクトのリストを取得する
connectDataPorts関数
対象のデータポートと指定したリスト内のデータポートを接続する
connectServicePorts関数
対象のサービスポートと指定したリスト内のサービスポートを接続する
NamingManagerクラスに以下の関数、クラスを追加した。
bindPortObject関数
ポートを指定したパスでネーミングサービスへバインドする
registerPortName関数
対象のポートと名前をポート管理用オブジェクト(Port)に格納し、管理用オブジェクトをリストに追加する
unregisterPortName関数
指定の名前のポートをリストから削除する
Portクラス
ポート管理用オブジェクト
C++版でNamesがNameServerに変更されていたため、こちらでも変更を行った。
またコンストラクタ、unbindAll関数にもポートの管理用リストに関するコードを追加した。
NamingOnCorbaクラスに以下の関数を追加した。
bindPortObject
ポートを指定したパスでネーミングサービスへバインドする
CorbaNamingクラスに以下の関数を追加した。
listByKind関数
与えられたパス以下で指定のkindのオブジェクトを検索する
listBinding関数
与えられたパス以下のオブジェクトを取得する
ManagerクラスのregisterComponent関数内で登録したRTCのポートをpublishPorts関数でネームサービスにバインドして、subscribePorts関数で既にバインド済みのポートと接続する。
ポートがバインドされるパスはトピック名をtopic_test、ポート名をport0とした場合、以下のようになる。
インポートdataports.port_cxt/topic_test.topic_cxt/port0.inport
アウトポートdataports.port_cxt/topic_test.topic_cxt/port0.outport
サービスポートsvcports.port_cxt/topic_test.topic_cxt/port0.svc
トピック名はポートのpublish_topicというプロパティに設定する。
テスト¶
添付のテスト用コードでテストを行った。
テスト用コードは以下の動作を行う。
setUp関数
マネージャ初期化self.manager = OpenRTM_aist.Manager.init(sys.argv)
self.manager.setModuleInitProc(MyModuleInit)
self.manager.activateManager()
ここでTestComp10、TestComp20の2つのRTCを起動する。
TestComp10はアウトポートtopic_outとサービスポートtopic_serviceを保持しており、TestComp20はインポートtopic_inとサービスポートtopic_serviceを保持している。
つまり互いのデータポートとサービスポートが接続されていれば正常に動作しているという事になる。
test_Topic関数
データポートが接続されたかの確認ans = OpenRTM_aist.already_connected(inport, outport)
self.assertTrue(ans)
サービスポートが接続されたかの確認ans = OpenRTM_aist.already_connected(provided, required)
self.assertTrue(ans)
#3 Updated by miyamoto about 7 years ago
- % Done changed from 50 to 100
#4 Updated by n-ando almost 6 years ago
- Status changed from 新規 to 終了
[incompat,new_func,->RELENG_1_2] Topic-based connection has been implemente. refs #3406