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

俵 崇文@AIST tawara-takafumi @ aist.go.jp
2009年 8月 3日 (月) 16:31:42 JST


安藤様

お世話になっております。俵です。

> 念のため、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
_/_/_/_/_/_/_/_/_/_/_/_/_/
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: core_source.zip
型:         application/octet-stream
サイズ:     55681 バイト
説明:       無し
URL:        <http://www.openrtm.org/pipermail/openrtm-users/attachments/20090803/18d1722f/attachment-0002.obj>
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: rtc248.zip
型:         application/octet-stream
サイズ:     3731 バイト
説明:       無し
URL:        <http://www.openrtm.org/pipermail/openrtm-users/attachments/20090803/18d1722f/attachment-0003.obj>


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