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

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


安藤様

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

[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
_/_/_/_/_/_/_/_/_/_/_/_/_/
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: rtc4052.zip
型:         application/octet-stream
サイズ:     3667 バイト
説明:       無し
URL:        <http://www.openrtm.org/pipermail/openrtm-users/attachments/20090803/cc947336/attachment-0001.obj>


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