[openrtm-users 00474] 同一PORT同士の多重接続について

Yusuke Nakajima y.nakajima @ aist.go.jp
2008年 6月 11日 (水) 19:25:21 JST


産総研の中島です。


仕様通りかもしれませんが、報告まで。

(1)同一のデータPORT同士を多重に接続してしまった場合、
  INPORT側で「isNew() -> read() -> データを取得」 
  という操作を行うと、データ取得時にエラーとなり、
  onAbort(),onError()となる現象がありました。

(2) (1)において、InPORT側のRTC内でCallBackを入れると、
 エラーは起こらず、データの取得が可能である。

(3)同一のサービスPORT同士を多重に接続してしまった場合
 特に問題なく、そのまま処理は行われる。

--

(最近リリースされた、「OpenRTM-aist-0.4.2」と「OpenHRP-3.0.0-RC4」を使
 用して、SamplePDとVirtualRobotの間のデータポートをRtcLink上で接続した
 上で、GrxUIでシミュレーションをスタートすると、ロボット崩れ落ちる現象があり、
 この原因が、「OpenHRP-3.0.0-RC3」まではOpenHRP3と接続されるRTCも端末上
 でマニュアル起動が必要であったものが、「OpenHRP-3.0.0-RC4」では、別の
 手法で起動されるようになり不要となったにも関わらず誤ってRTCを起動して
 いたために、すでにリンクがはられたデータポート間に、さらにリンクをはっ
 てしまい、「2重接続」をしていたことが分かりました。

 操作時に注意すべきことで済むことですが、RtcLinkで同一PORT同士をいくつ
 でも接続可能であり、rtclinkファイルとしても保存可能であり、また、見た
 目には、複数接続されていることは分からない状態ではあります。 )

--

「OpenRTM-aist-0.4.2」と「OpenHRP-3.0.0-RC4」でのみ起きる現象かどうか確
かめるために、以下の環境で、RtcLink上で多重にPORTを接続して、調査した
結果を示します。

<環境>
OS: Ubuntu7.10
OpenRTM: 0.4.1 C++
OpenHRP3: RC3 C++
eclipse: 3.2
rtclink: 0.4.1

<調査内容>
  コンポーネントTestAとTestBにデータPORT,サービスPORTを用意し
 PORTを複数接続し、TestA --> TestBの方向にデータを送信する。

----
(1)同一のデータPORT同士を多重に接続した場合

  <rtc-linkの接続手段(ドラッグして線を結ぶ方向)>
   (a)TestAdataPORT --> TestBdataPORT
      connectProfile Name:[TestAdataPORT_TestBdataPORT]

   (b)TestAdataPORT --> TestBdataPORT
      connectProfile Name:[TestAdataPORT_TestBdataPORT]

   (c)TestBdataPORT --> TestAdataPORT
      connectProfile Name:[TestBdataPORT_TestAdataPORT]

   (a)と(b)の組み合わせ、(a)と(c)の組み合わせで、
  プロジェクトを保存した時の「〜〜.rtclink」ファイルの
  XML記述は異なるが、双方とも同様にエラーとなりデータ取得不可。



(2)同一のデータPORT同士を多重に接続した場合(InPORT側にCallbackを実装)

  (1)と同様の2種類の接続で確認したところ、callbackで呼ばれるた時に、
 受け取ったデータをデバッグしてみたところ、同じデータを2つ取得して
 はおらず、どちらかの接続からのデータのみ取得し、エラーは発生せず。

  (Callbackを入れると、データが取れるようになる理由は不明。)



(3)同一のサービスPORT同士を多重に接続した場合
     (InventGUI -> Obstacle start()を呼ぶ場合)

どのような方向の接続の仕方でも、幾つ同じ接続を行っても、
コンシューマからプロバイダを呼ぶのは1度のみ、エラーは発生せず。


以上です。



openrtm-users メーリングリストの案内