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

Masayuki Shimizu masayuki.shimizu @ aist.go.jp
2009年 8月 3日 (月) 17:34:07 JST


俵様

清水です。

不可解ですね。

OutPortBaseのm_connectorsはサイズ1なのに、
その継承クラスのOutPortでは
m_connectorsのサイズはゼロになっている
みたいですね。

論理的に考えられる可能性としては、
OutPortBaseクラスのm_connectorsと
OutPortクラスのm_connectorsが
違うオブジェクトになっている
ぐらいでしょうか。

OutPortBaseクラスのm_connectors参照を
取り出すメソッドがあるようなので、
それのサイズを確認してみてはどうでしょうか。
OutPortBase::connectors();

また、これを使って、
OutPort::write()のコネクタサイズ取得部を
size_t conn_size(connectors().size())
とすればサイズは必ず一致するはずですが、
どうでしょうか。

清水

--- 俵 崇文@AIST <tawara-takafumi @ aist.go.jp> wrote:

> 安藤様
> 
> お世話になっております。俵です。
> 
> > 念のため、OutPort.h の write()
> の後半を以下のように書き換えて
> > ログを見てみてはどうでしょうか?
> 添付ファイルrtc248.zip
> の出力を得ました。
> 387〜446行目にあります通り
> conn_size, connectos.size()
> は0のようです。
> 
> 
> >
> あと、ためしにコンポーネントのソースを送ってみてもらえ
ますか?
> 主要なソースコードを抜粋してcore_source.zipとして添付
いたします。
> 
> サンプルRTCのコードは、
> SampleSV/SampleSV.cpp
> にて定義されています。
> 
> RTCの生成、接続、外部プロセスとのやり取りを行なう。
> ControllerBridgeは
> ControllerBridgeディレクトリ以下のコードにて記述されて
います。
> 接続部分は、
> ControllerBridge/Controller_impl.cpp
> の340行目の関数
> bool Controller_impl::connectPorts
> にて行なっています。
> 
> 一連のログ出力とwriteメソッドは
> ControllerBridge/VirtualRobotPortHandler.cpp
> 150行目の
> SensorStateOutPortHandler::writeDataToPort
> 関数にて行なっております。
> 
> OpenHRP3.1ソースコード全体を
> 網羅的にご覧になる場合は、
> RedmineのOpenHRP3プロジェクトから
> リポジトリのページを表示して
> 3.1/branches/TRY-warataka/r1122
> を参照してください。
> 以上です。
> よろしくお願いいたします。
> 
> Masayuki Shimizu wrote 2009/08/03 15:12:
> > 俵様
> > 安藤様
> > 
> > 清水です。
> > 
> > ログを見る限りでは、m_connectorsのサイズは
> > やはり1のように思われます。
> > 
> > ただ、コネクタのwrite()は
> > 呼ばれてないようですね。
> > 
> > コネクタタイプがPushであれば、
> > OutPortのwriteから
> > OutPortPushConnector::write()が呼ばれ、
> > ログに「write()」と残るはずです。
> > どうもそれが見当たらないので、
> > コネクタのwriteまで辿り着いてない
> > と思われます。
> > 
> > 不可解な挙動ですが、OutPort::write()
> > から動きを丹念にトレースしていけば、
> > 原因がつかめると思います。
> > 
> > # 安藤様へ
> > Pull型のOutPortBase::createConnector()
> > ですが、ログ出力が"OutPortPushConnector created"
> > となってますが、"Pull"でなくてよいのでしょうか。
> > 
> > あと、OutPortPullConnectorのオペレーションには
> > ログ出力が無いので、今回のように挙動を
> > トレースする際に困るように思います。
> > 
> > 清水
> > 
> > --- Ando Noriaki <n-ando @ aist.go.jp> wrote:
> > 
> >> 俵様
> >>
> >> 安藤です
> >>
> >>> rtm/OutPort.hによると
> >>> その後の処理で
> >>> conn_sizeが0以下の場合
> >>> m_connectors[i]->write(m_cdr);
> >>> のループ処理に至らないということで
> >>> 同じ結果になると思われます。
> >>> 以上です。
> >> Aug 03 10:50:00 TRACE: steer:
> >> getConnectorProfiles(): size = 1
> >>
> >> でも、ログ↑にあるように、m_connectors.size()
> >> は1を返していますよね。
> >>
> >> write()関数の先頭部分で
> >> size_t conn_size(m_connectors.size());
> >>
> のように代入しているので、conn_sizeは1になりそうな気が
> > しますが。
> >> 念のため、OutPort.h の write()
> >> の後半を以下のように書き換えて
> >> ログを見てみてはどうでしょうか?
> >>
> >>       bool result(true);
> >>    RTC_PARANOID(("0: conn_size = %d",
> >> conn_size));
> >>    RTC_PARANOID(("0: connectos.size() = %d",
> >> m_connectors.size()));
> >>       for (size_t i(0), len(conn_size); i < len;
> >> ++i)
> >>         {
> >>           ReturnCode ret;
> >>           ret = m_connectors[i]->write(m_cdr);
> >>       RTC_PARANOID(("1: conn_size = %d",
> >> conn_size));
> >>       RTC_PARANOID(("1: connectos.size() =
> %d",
> >> m_connectors.size()));
> >>           if (ret != PORT_OK)
> >>             {
> >>               result = false;
> >>               if (ret == CONNECTION_LOST)
> >>                 {
> >>                  
> disconnect(m_connectors[i]->id());
> >>                 }
> >>             }
> >>         }
> >>    RTC_PARANOID(("2: conn_size = %d",
> conn_size));
> >>    RTC_PARANOID(("2: connectos.size() = %d",
> >> m_connectors.size()));
> >>       return result;
> >>
> >>
> >>
> あと、ためしにコンポーネントのソースを送ってみてもらえ
> > ますか?
> >> -- 
> >> 安藤慶昭@独立行政法人産業技術総合研究所 研究員
> >>                   知能システム研究部門
> >> 統合知能研究グループ
> >>                   〒305-8568
> 茨城県つくば市梅園1-1-1
> >> 中央第2
> >>                   TEL: 029-861-5981 FAX:
> >> 029-862-6631
> >>                   n-ando @ aist.go.jp,
> n-ando @ ieee.org
> >>
> >>
> > 
> > 
> > 
> > 
> > 
> 
> 
> -- 
> _/_/_/_/_/_/_/_/_/_/_/_/_/
> 株式会社 スプリング(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 メーリングリストの案内