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

Ando Noriaki n-ando @ aist.go.jp
2009年 7月 29日 (水) 09:49:26 JST


俵様

安藤です

要は、自作のプログラムからポートの接続をすると、
OutPortからInPortへデータがいかないということでよろしいでしょうか?
「OutPortに値が格納できない」というのがどういう現象を指しているのですか。

これらのポートをRTSystemEditorで接続するとどうなりますか?


2009/07/28 15:40 に 俵 崇文@AIST<tawara-takafumi @ aist.go.jp> さんは書きました:
> 安藤様
> 俵です。
>
> 返信送れて申し訳ありません。
> その後試行錯誤してみたのですが、
> 結局狙い通りの動作がえられませんでした。
> また問題点を整理するための時間が必要でした。
> 改めて質問させてください。
>
> 外部プロセスとコアロジック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
> _/_/_/_/_/_/_/_/_/_/_/_/_/
>



-- 
安藤慶昭@独立行政法人産業技術総合研究所 研究員
                  知能システム研究部門 統合知能研究グループ
                  〒305-8568 茨城県つくば市梅園1-1-1 中央第2
                  TEL: 029-861-5981 FAX: 029-862-6631
                  n-ando @ aist.go.jp, n-ando @ ieee.org



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