[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 メーリングリストの案内