[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 メーリングリストの案内