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

俵 崇文@AIST tawara-takafumi @ aist.go.jp
2009年 7月 29日 (水) 11:40:10 JST


安藤様
俵です。

返信ありがとうございます。

> 要は、自作のプログラムからポートの接続をすると、
> OutPortからInPortへデータがいかないということでよろしいでしょうか?
はい。

> 「OutPortに値が格納できない」というのがどういう現象を指しているのですか。
具体的にはVirtualRobotRTCが持つ
RTC::OutPort<RTC::TimedDoubleSeq> インスタンス
からRTC::OutPort<RTC::TimedDoubleSeq>::write()の実行を
デバッガで追ったところrtm/OutPort.hの170行目
virtual bool write(DataType& value)
{
  if (m_OnWrite != NULL)
  {
    (*m_OnWrite)(value);
  }
  // check number of connectors
  size_t conn_size(m_connectors.size());
  if (!(conn_size > 0)) { return true; }

で戻ってしまう現象です。
SimpleIOだと同様にデバッグで追ってもそのまま戻らず実行されたので、
m_connectorsのサイズが0によることが原因で
バッファに値が書き込まれていないと判断いたしました。

> これらのポートをRTSystemEditorで接続するとどうなりますか?
手動で接続することはできましたが、
その後続行すると自動接続時と同様の動作になりました。

以上です。よろしくお願いします。

Ando Noriaki wrote 2009/07/29 9:49:
> 俵様
> 
> 安藤です
> 
> 要は、自作のプログラムからポートの接続をすると、
> 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
>> _/_/_/_/_/_/_/_/_/_/_/_/_/
>>
> 
> 
> 


-- 
_/_/_/_/_/_/_/_/_/_/_/_/_/
株式会社 スプリング(http://www.spring.cc/)
つくば事業所 俵 崇文
俵 崇文@スプリング<tawara @ spring-inc.co.jp>
俵 崇文@AIST<tawara-takafumi @ aist.go.jp>
事業所 TEL:029-871-7710
事業所 FAX:029-830-7037
_/_/_/_/_/_/_/_/_/_/_/_/_/




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