[openrtm-users 00877] Re: OpenRTM1.0.0-RC1のOutPortに値が格納できない不具合

俵 崇文@AIST tawara-takafumi @ aist.go.jp
2009年 7月 28日 (火) 15:40:51 JST


安藤様
俵です。

返信送れて申し訳ありません。
その後試行錯誤してみたのですが、
結局狙い通りの動作がえられませんでした。
また問題点を整理するための時間が必要でした。
改めて質問させてください。

外部プロセスとコアロジックRTC(図ではSampleSV)の仲介を行なう
ControllerBridgeをOpenRTM0.4.2からOpenRTM1.0.0に
対応する過程でOutPortのバッファに値が格納できない現象に対処したいので
ご教示ください。

              torque
      ┌←───────←┐
┌──□──┐      ┌──□──┐
│  Virtual │steer │ SampleSV │
│          □→─→□          │
│  Robot   │      │          │
│          □→─→□          │
│  RTC     │ vel  │  RTC     │
└─────┘      └─────┘
□:ポート
      ControlllerBridgeの動作例

添付したファイルは上図のRTC構築時のログです。
実行例ではControlllerBridgeはSampleSVRTCとVirtualRobotRTCを
生成して対応するポートを接続します。図ではVirtualRobotRTC側の
steer OutPort、vel OutPortに値が格納できませんでした。

特にポート接続ではOpenRTMのサンプルSimpleIOの
ConnectorComp.cppを参考にして以下のコードを作成しました。
bool Controller_impl::connectPorts(Port_Service_Ptr_Type outPort,
                                    Port_Service_Ptr_Type inPort)
{
    // connect ports
    RTC::ConnectorProfile cprof;
    cprof.connector_id = "";
    cprof.name = CORBA::string_dup("connector0");
    cprof.ports.length(2);
    cprof.ports[0] = Port_Service_Type::_duplicate(inPort);
    cprof.ports[1] = Port_Service_Type::_duplicate(outPort);

#ifdef OPENRTM_VERSION_042
    CORBA_SeqUtil::push_back(cprof.properties,
               NVUtil::newNV("dataport.interface_type",
                     "CORBA_Any"));
    CORBA_SeqUtil::push_back(cprof.properties,
               NVUtil::newNV("dataport.dataflow_type",
                     "Push"));
    CORBA_SeqUtil::push_back(cprof.properties,
               NVUtil::newNV("dataport.subscription_type",
                     "Flush"));
#else
    CORBA_SeqUtil::push_back(cprof.properties,
               NVUtil::newNV("dataport.interface_type",
                     "corba_cdr"));
    CORBA_SeqUtil::push_back(cprof.properties,
               NVUtil::newNV("dataport.dataflow_type",
                     "Push"));
    CORBA_SeqUtil::push_back(cprof.properties,
               NVUtil::newNV("dataport.subscription_type",
                     "flush"));
#endif
    RTC::ReturnCode_t result = inPort->connect(cprof);
    return (result == RTC::RTC_OK);
}

サンプルConnectorCompとControlllerBridgeの主な相違点は、
1)SimpleIOでは異なるプロセスで別々のRTCを生成、
 接続もConnectorCompプロセスで行なっているが、
 ControlllerBridgeでは同じプロセスで2つのRTCを生成し、
 ポート間を接続して値を授受している。
2)接続数が複数であること
3)RTCにInPortとOutPortが混在すること
です。0.4.2を利用した場合は問題なく動作していました。
ちなみにRTSystemEditorで動作を追った場合、各RTCの登録、
ポート間接続時のライン描画を確認しました。
以上です。
よろしくお願いいたします。

Ando Noriaki wrote 2009/07/24 10:38:
> 俵様
> 
> 安藤です
> 
> お世話になっております。
> 
> 申し訳ございませんが、下記のメールはご質問でしょうか?
> 意図がよくつかめませんでした。
> 
> 2009/07/24 10:11 に 俵 崇文@AIST<tawara-takafumi @ aist.go.jp> さんは書きました:
>> 安藤様
>>
>> 俵です。
>>
>> 早速の返信ありがとうございます。
>>
>> 仕様変更により接続するまでバッファが無い旨了解いたしました。
>>
>> 1)RTC::PortBase::connectの戻り値がtrueである。
>> 2)RTCSystemEditorでは動作確認時に接続ラインが描画表示される。
>> 3)ログにはnotify_connect()以下の接続の処理が記録されている
>> 等の理由により接続は成功していると当方では判断していました。
>>
>> ログからは読み取れませんでしたが、
>> 未接続の段階でwriteメンバを呼び出してしまっている
>> というご指摘については調査してみます。
>>
>> 以上です。
>> よろしくお願いいたします。
>>
>> Ando Noriaki wrote 2009/07/23 14:05:
>>> 俵さま
>>>
>>> 安藤です
>>>
>>> 1.0からは、バッファはコネクタに属する構造に変更されました。
>>> したがって、接続するまではバッファが存在せずOutPortにwrite
>>> しても値はどこにも格納されません。
>>> このような仕様で不都合が生じるようでしたら、どのようなケースで
>>> 問題になるのか利用例を教えていただけますでしょうか。
>>> よろしくお願いいたします。
>>>
>>>
>>> 2009/07/23 13:52 に 俵 崇文@AIST<tawara-takafumi @ aist.go.jp> さんは書きました:
>>>> 産総研 知能システム研究部門 ヒューマノイド研究グループ
>>>> にてお世話になっております 俵です。
>>>>
>>>> 現在OpenHRP3.1.0β2ベースで可能であればOpenRTM0.4.2への
>>>> 互換性を保ったままOpenRTM1.0.0-RC1への対応をしております。
>>>>
>>>> OpenRTM1.0.0-RC1に対応した場合、
>>>> bool OutPort<DataType>::write(DataType& value)
>>>> の処理中m_connectorsのサイズが0による理由で
>>>> バッファに値を格納できない現象に遭遇しております。
>>>>
>>>> 初期化方法に問題があると疑って動作を追っているのですが、
>>>> ログなどによると
>>>> Jul 23 10:56:41 PARANOID: steer: connector push backed: 1
>>>> Jul 23 10:56:41 DEBUG: steer: publishInterface() successfully finished.
>>>> Jul 23 10:56:41 PARANOID: steer: 0 connectors are existing
>>>> と一見m_connectorsコンテナにコネクタインスタンスが
>>>> 格納されるているようです。
>>>>
>>>> このような場合の対処方法についてご教示ください。
>>>> 動作時のログも添付いたします。
>>>> よろしくお願いします。
>>>>
>>>> --
>>>> _/_/_/_/_/_/_/_/_/_/_/_/_/
>>>> 株式会社 スプリング(http://www.spring.cc/)
>>>> つくば事業所 俵 崇文
>>>> 俵 崇文@スプリング<tawara @ spring-inc.co.jp>
>>>> 俵 崇文@AIST<tawara-takafumi @ aist.go.jp>
>>>> 事業所 TEL:029-871-7710
>>>> 事業所 FAX:029-830-7037
>>>> _/_/_/_/_/_/_/_/_/_/_/_/_/
>>>>
>>>
>>>
>>
>> --
>> _/_/_/_/_/_/_/_/_/_/_/_/_/
>> 株式会社 スプリング(http://www.spring.cc/)
>> つくば事業所 俵 崇文
>> 俵 崇文@スプリング<tawara @ spring-inc.co.jp>
>> 俵 崇文@AIST<tawara-takafumi @ aist.go.jp>
>> 事業所 TEL:029-871-7710
>> 事業所 FAX:029-830-7037
>> _/_/_/_/_/_/_/_/_/_/_/_/_/
>>
>>
> 
> 
> 


-- 
_/_/_/_/_/_/_/_/_/_/_/_/_/
株式会社 スプリング(http://www.spring.cc/)
つくば事業所 俵 崇文
俵 崇文@スプリング<tawara @ spring-inc.co.jp>
俵 崇文@AIST<tawara-takafumi @ aist.go.jp>
事業所 TEL:029-871-7710
事業所 FAX:029-830-7037
_/_/_/_/_/_/_/_/_/_/_/_/_/
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: rtc2980.zip
型:         application/octet-stream
サイズ:     3533 バイト
説明:       無し
URL:        <http://www.openrtm.org/pipermail/openrtm-users/attachments/20090728/ae8ccd77/attachment-0001.obj>


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