[openrtm-users 00880] Re: OpenRTM1.0.0-RC1 の OutPort に値が格納できない不具合
Masayuki Shimizu
masayuki.shimizu @ aist.go.jp
2009年 7月 29日 (水) 12:51:47 JST
俵様
静岡大 清水です。
少し気になったのでコメントです。
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
> _/_/_/_/_/_/_/_/_/_/_/_/_/
>
>
>
openrtm-users メーリングリストの案内