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

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


安藤様

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

> Aug 03 10:50:00 TRACE: steer: getConnectorProfiles(): size = 1
> Aug 03 10:50:00 TRACE: steer: getConnectorProfiles(): size = 1
> Aug 03 10:50:00 TRACE: vel: getConnectorProfiles(): size = 1
> Aug 03 10:50:00 TRACE: vel: getConnectorProfiles(): size = 1
> Aug 03 10:50:01 TRACE: steer: getConnectorProfiles(): size = 1
> Aug 03 10:50:01 TRACE: steer: getConnectorProfiles(): size = 1
> Aug 03 10:50:01 TRACE: vel: getConnectorProfiles(): size = 1
> Aug 03 10:50:01 TRACE: vel: getConnectorProfiles(): size = 1
>
> のように、同じ時刻でgetConnectorProfiles() が2つ連続しているので、
> それぞれwrite()の前と後であると考えられます。正しいでしょうか?>俵様
はい。その通りです。

>       if (!(conn_size > 0)) { return true; }
>
> をコメントアウトした場合どうなりますか?
動作としては現状と変わらないようです。
ログも同じ出力のようです。
 #前回の結果と同様に387〜438行目に出力を得ました。

rtm/OutPort.hによると
その後の処理で
conn_sizeが0以下の場合
m_connectors[i]->write(m_cdr);
のループ処理に至らないということで
同じ結果になると思われます。
以上です。

Ando Noriaki wrote 2009/08/03 13:02:
> 俵様
> 
> 安藤です
> 
> どのgetConnectorProfiles()の呼び出しが、writeの前か、もしくは後か
> 不明なのですが、ログを見る限り、
> 
>> grep getConnectorProfile rtc4052.log
> Aug 03 10:50:00 TRACE: steer: getConnectorProfiles(): size = 1
> Aug 03 10:50:00 TRACE: steer: getConnectorProfiles(): size = 1
> Aug 03 10:50:00 TRACE: vel: getConnectorProfiles(): size = 1
> Aug 03 10:50:00 TRACE: vel: getConnectorProfiles(): size = 1
> Aug 03 10:50:01 TRACE: steer: getConnectorProfiles(): size = 1
> Aug 03 10:50:01 TRACE: steer: getConnectorProfiles(): size = 1
> Aug 03 10:50:01 TRACE: vel: getConnectorProfiles(): size = 1
> Aug 03 10:50:01 TRACE: vel: getConnectorProfiles(): size = 1
> 
> のように、同じ時刻でgetConnectorProfiles() が2つ連続しているので、
> それぞれwrite()の前と後であると考えられます。正しいでしょうか?>俵様
> 
> この結果を見る限りでは、やはりconnectorsの数はwriteの前後でともに1のようです。
> 
> 以前、OutPort::write() の
> 
>       size_t conn_size(m_connectors.size());
>       if (!(conn_size > 0)) { return true; }
> 
> の return true でリターンしてしまうので、connectorにデータが
> 書き込まれないとおっしゃっていましたが、ためしに
> 
>       if (!(conn_size > 0)) { return true; }
> 
> をコメントアウトした場合どうなりますか?
> 
> 2009/08/03 11:14 に 俵 崇文@AIST<tawara-takafumi @ aist.go.jp> さんは書きました:
>> 安藤様
>>
>> お世話になっております。俵です。
>>
>> [openrtm-users 00891]のコードを
>> writeメソッドを挟んで実行したところ
>> 添付したログファイルの
>> 387〜438行の出力を得ました。
>> steer OutPortとvel OutPortに対するループ処理となっておりますので、
>> 似たような出力が4連続で出力されています。
>> 以上です。
>> よろしくお願いいたします。
>>
>> Ando Noriaki wrote 2009/08/03 10:09:
>>> 俵様
>>>
>>> 安藤です
>>>
>>> では、wrtie()の直線と直後にgetConnectorProfiles()を呼ぶとどうなりますか?
>>>
>>> 2009/08/03 10:03 に 俵 崇文@AIST<tawara-takafumi @ aist.go.jp> さんは書きました:
>>>> 安藤様、清水様
>>>>
>>>> お世話になっております。俵です。
>>>> 返信ありがとうございます。
>>>>
>>>> m_connectorsのサイズに関しては、
>>>> [openrtm-users 00879]で報告いたしましたとおりです。
>>>> デバッガによる追跡は何度も繰り返し行なったので
>>>> 見間違えではないと断言いたします。
>>>>
>>>> 接続処理の終わりからwriteメソッドの呼び出しの間に
>>>> 原因があるというご指摘を参考にして調査いたします。
>>>> 何か分かれば、また報告いたします。
>>>> 以上です。
>>>>
>>>> Ando Noriaki wrote 2009/07/31 18:18:
>>>>> 俵様
>>>>>
>>>>> 安藤です
>>>>>
>>>>> いただいたlogの424行目で、
>>>>> Jul 31 17:04:18 TRACE: steer: getConnectorProfiles(): size = 1
>>>>> とありますので、m_connectorsのサイズは1ですね。
>>>>>
>>>>> OutPortBase.cpp 200行目あたりで以下のようにログを出力しています。
>>>>>   ConnectorBase::ProfileList OutPortBase::getConnectorProfiles()
>>>>>   {
>>>>>     RTC_TRACE(("getConnectorProfiles(): size = %d", m_connectors.size()));
>>>>>
>>>>> デバッガでご覧になった0という数値は、本当にm_connectorsのsize()ですか?
>>>>>
>>>>> いただいたlogをgetConnectorProfilesでgrepしたのですが、
>>>>>
>>>>>> grep 'getConnectorProfiles' rtc4472.log
>>>>> Jul 31 17:04:18 TRACE: steer: getConnectorProfiles(): size = 1
>>>>> Jul 31 17:04:18 TRACE: vel: getConnectorProfiles(): size = 1
>>>>> Jul 31 17:04:19 TRACE: steer: getConnectorProfiles(): size = 1
>>>>> Jul 31 17:04:19 TRACE: vel: getConnectorProfiles(): size = 1
>>>>> Jul 31 17:04:20 TRACE: steer: getConnectorProfiles(): size = 1
>>>>> Jul 31 17:04:20 TRACE: vel: getConnectorProfiles(): size = 1
>>>>>
>>>>> このように、steerポートもvelポートもどちらも m_connectors のサイズは
>>>>> 1となっており、ログの結果からも、少なくともPortBaseのConnectorProfile、
>>>>> OutPortのOutPortConnectorの数、ともに正常なようにみえます。
>>>>>
>>>>> 他のところに原因があるのではないでしょうか?
>>>>>
>>>>>
>>>> Masayuki Shimizu wrote 2009/07/31 18:15:
>>>>> 俵様
>>>>>
>>>>> 清水です。
>>>>>
>>>>> 安藤さんが言っているように、
>>>>>>> Jul 28 15:08:10 TRACE: steer: OutPortPushConnector
>>>>>> created
>>>>>>> Jul 28 15:08:10 PARANOID: steer: connector push
>>>>>> backed: 1
>>>>> とあるので、m_connectorsのサイズがゼロという
>>>>> ことは無いように思います。
>>>>> # OutPortBase.cppのソース参照
>>>>> RTC_PARANOID(("connector push backed: %d",
>>>>> m_connectors.size()));
>>>>>
>>>>> どうやってm_connectorsのサイズを確かめてますか?
>>>>>
>>>>> 上記のログがあるのにm_connectorsのサイズが
>>>>> ゼロということは、あと考えられる可能性としては、
>>>>> 接続をした後で、何かしらの意図しない動作により
>>>>> 接続が解除されてしまっているとしか
>>>>> 考えられません。
>>>>>
>>>>> 清水
>>>>>
>>>>> 2009/07/31 17:41 に 俵 崇文@AIST<tawara-takafumi @ aist.go.jp> さんは書きました:
>>>>>> 安藤様
>>>>>>
>>>>>> お世話になっております。俵です。
>>>>>>
>>>>>> 下記コードを適応したログを添付いたします。
>>>>>> 出力タイミングは、これまでの通り
>>>>>> steerポートとvelポートのwriteメソッドの直前になります。
>>>>>>
>>>>>> 以上です。
>>>>>> よろしくお願いします。
>>>>>>
>>>>>> Ando Noriaki wrote 2009/07/31 16:29:
>>>>>>> 俵様
>>>>>>>
>>>>>>> 安藤です
>>>>>>>
>>>>>>> 前回のメールで申し上げた通り、ConnectorProfileは存在するが、
>>>>>>> m_connectorsのサイズが0ということですよね。
>>>>>>> いただいたコードと表示結果からは、ConnectorProfileは正常である
>>>>>>> ということしかわかりません。
>>>>>>> ただし、以前いただいたログには
>>>>>>> Jul 28 15:08:10 TRACE: steer: OutPortPushConnector created
>>>>>>> Jul 28 15:08:10 PARANOID: steer: connector push backed: 1
>>>>>>> とあるので、connector は生成されているっぽいです。
>>>>>>>
>>>>>>> とりあえず、OutPortのPushConnectorのProfileを
>>>>>>> 以下のようにして表示させてみていただけますか?
>>>>>>>
>>>>>>>   ConnectorBase::ProfileList prof(m_outport.getConnectorProfiles());
>>>>>>>   for (int i(0), len(prof.size()); i < len; ++i)
>>>>>>>   {
>>>>>>>     RTC_DEBUG(("ConnectorProfile::name: %s", prof[i].name));
>>>>>>>     RTC_DEBUG(("ConnectorProfile::id: %s", prof[i].id));
>>>>>>>     RTC_DEBUG(("ConnectorProfile::properties:"));
>>>>>>>     rtclog.level(Logger::RTL_DEBUG) << prof[i].properties;
>>>>>>>   }
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> 2009/07/31 15:39 に 俵 崇文@AIST<tawara-takafumi @ aist.go.jp> さんは書きました:
>>>>>>>> 安藤様、清水様
>>>>>>>>
>>>>>>>> お世話になっております。俵です。
>>>>>>>>
>>>>>>>> 助言を参考にして
>>>>>>>> PortService,ConnectorProfile,ConnectorProfile::ports
>>>>>>>> の状態を表示する関数を添付ファイルのように変更しました。
>>>>>>>> 表示結果も合わせて添付いたします。
>>>>>>>>
>>>>>>>> ConnectorProfileは結果の通り存在しますが、
>>>>>>>> m_connectorsのサイズはデバッガ上確認した場合0のままでした。
>>>>>>>> 以上です。
>>>>>>>> よろしくお願いいたします。
>>>>>>>>
>>>>>>>> Ando Noriaki wrote 2009/07/31 11:45:
>>>>>>>>> 俵様
>>>>>>>>>
>>>>>>>>> 安藤です
>>>>>>>>>
>>>>>>>>> out()関数は、オペレーションのout引数に_var型変数を渡す時に使うものです。
>>>>>>>>>
>>>>>>>>> out()を呼ぶとオブジェクトリファレンスがreleaseされてnilリファレンス
>>>>>>>>> になりますので、その後新たにオブジェクトリファレンスを代入しない限り
>>>>>>>>> omniORB: ERROR -- the application attempted to invoke an operation
>>>>>>>>>  on a nil reference.
>>>>>>>>> のようなエラーが出ます。
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 2009/07/31 11:38 に 俵 崇文@AIST<tawara-takafumi @ aist.go.jp> さんは書きました:
>>>>>>>>>> 安藤様
>>>>>>>>>> お世話になっております。 俵です。
>>>>>>>>>>
>>>>>>>>>>> portServiceList[h]->get_connector_profiles()->length();
>>>>>>>>>>> を呼ぶ前に
>>>>>>>>>>> portServiceList[h].out()
>>>>>>>>>>> を呼んでいませんか?
>>>>>>>>>> はい。呼んでおります。
>>>>>>>>>>
>>>>>>>>>> 以上です。
>>>>>>>>>>
>>>>>>>>>> Ando Noriaki wrote 2009/07/31 10:43:
>>>>>>>>>>> 俵様
>>>>>>>>>>>
>>>>>>>>>>> 安藤です
>>>>>>>>>>>
>>>>>>>>>>> portServiceList[h]->get_connector_profiles()->length();
>>>>>>>>>>> を呼ぶ前に
>>>>>>>>>>> portServiceList[h].out()
>>>>>>>>>>> を呼んでいませんか?
>>>>>>>>>>>
>>>>>> --
>>>>>> _/_/_/_/_/_/_/_/_/_/_/_/_/
>>>>>> 株式会社 スプリング(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 --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: rtc404.zip
型:         application/octet-stream
サイズ:     3900 バイト
説明:       無し
URL:        <http://www.openrtm.org/pipermail/openrtm-users/attachments/20090803/1c3f732f/attachment-0001.obj>


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