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

Ando Noriaki n-ando @ aist.go.jp
2009年 8月 3日 (月) 10:09:12 JST


俵様

安藤です

では、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
> _/_/_/_/_/_/_/_/_/_/_/_/_/
>
>



-- 
安藤慶昭@独立行政法人産業技術総合研究所 研究員
                  知能システム研究部門 統合知能研究グループ
                  〒305-8568 茨城県つくば市梅園1-1-1 中央第2
                  TEL: 029-861-5981 FAX: 029-862-6631
                  n-ando @ aist.go.jp, n-ando @ ieee.org



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