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

俵 崇文@AIST tawara-takafumi @ aist.go.jp
2009年 7月 30日 (木) 18:22:06 JST


清水様

俵です。

ご指南ありがとうございます。

> ConnectorProfile::ports
> を調べて希望通りの接続となっているかを
> 確かめればできます。
試しに添付ファイルのconsoleOutPortRefInfo.txt
にある通りport等の状態を出力する関数を作成して、
  #初歩的なことと存じますが、
  #この方法が正しいのか自信がありませんので
  #おかしな点がございましたらご指摘願います。
writeする直前に実行してみました。
出力結果は添付ファイルResult.txtとなりましたが、
具体的に接続状態を判別する方法がわかりませんので、
ご教示願います。


> それと、接続プログラムの、
> CORBA_SeqUtil::push_back(cprof.properties,
> NVUtil::newNV("dataport.dataflow_type",
>  "Push"));
> の所は、"Push"ではなく"push"が正しいようです。
の件ですが、
[openrtm-users 00849] Re: SimpleIO   の run.sh のエラー
のコードによると"Push"となっているので"Push"のままにいたしました。
ただし、
rtm\InPortBase.cpp(180):  coil::normalize(dflow_type);
rtm\InPortBase.cpp(240):  coil::normalize(dflow_type);
rtm\OutPortBase.cpp(379): coil::normalize(dflow_type);
rtm\OutPortBase.cpp(438): coil::normalize(dflow_type);
によりdataflow_typeプロパティは大文字、小文字が混在しても
特に問題がなさそうな気がします。
ちなみに今回は"push"に変更して実行いたしました。
以上です。
よろしくお願いします。

Masayuki Shimizu wrote 2009/07/29 12:51:
> 俵様
> 
> 静岡大 清水です。
> 
> 少し気になったのでコメントです。
> 
> OutPortにwriteする前にポートが希望通り
> 接続されていることを確認してますでしょうか。
> 
> ポート接続の確認は、少々面倒なのですが、
> PortService::get_connector_profiles()
> でConnectorProfileを全て取得し、
> 各プロファイルごとに、
> ConnectorProfile::ports
> を調べて希望通りの接続となっているかを
> 確かめればできます。
> 
> それと、接続プログラムの、
> CORBA_SeqUtil::push_back(cprof.properties,              
> NVUtil::newNV("dataport.dataflow_type",                   
>  "Push"));
> の所は、"Push"ではなく"push"が正しいようです。
> 
> 清水
> 
> --- 俵 崇文@AIST <tawara-takafumi @ aist.go.jp> wrote:
> 
>> 安藤様
>> 俵です。
>>
>> 返信ありがとうございます。
>>
>>> 要は、自作のプログラムからポートの接続をすると、
>>>
>> 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
>> _/_/_/_/_/_/_/_/_/_/_/_/_/
>>
>>
>>
> 
> 
> 
> 
> 


-- 
_/_/_/_/_/_/_/_/_/_/_/_/_/
株式会社 スプリング(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 --------------
文字コード指定の無い添付文書を保管しました...
名前: Result.txt
URL:  <http://www.openrtm.org/pipermail/openrtm-users/attachments/20090730/40a8109b/attachment-0002.txt>
-------------- next part --------------
文字コード指定の無い添付文書を保管しました...
名前: consoleOutPortRefInfo.txt
URL:  <http://www.openrtm.org/pipermail/openrtm-users/attachments/20090730/40a8109b/attachment-0003.txt>


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