Project

General

Profile

機能 #3406

⑦ トピックベースのポート接続機能

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

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

100%

Estimated time:
30.00 h

Description

DDSのようなトピックベースのポート接続機能を実装すること。ただし、この機能はデータポート、サービスポートにも利用できるように実装すること。

test_Manager_new.py (7.38 KB) test_Manager_new.py miyamoto, 01/14/2016 08:45 PM

Associated revisions

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

[incompat,new_func,->RELENG_1_2] Topic-based connection has been implemente. refs #3406

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

[incompat,new_func,->RELENG_1_2] Now NamingManager can register a reference of Port to naming service. refs #3406

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

[incompat,new_func,->RELENG_1_2] Topic-based connection has been implemented. refs #3406

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
  • % Done changed from 0 to 90
  • Estimated time set to 30.00 h

#2 Updated by miyamoto almost 6 years ago

実装

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

  • % Done changed from 50 to 100

#4 Updated by n-ando about 4 years ago

  • Status changed from 新規 to 終了

Also available in: Atom PDF