[openrtm-users 02895] Re: ExtTrigExecutionContext, SynchExtTriggerEC の deactivate_component()

Shin'ichiro Nakaoka s.nakaoka @ aist.go.jp
2013年 8月 27日 (火) 13:36:26 JST


安藤さん

回答いただきありがとうございました。

なるほど、trunk版では同期か非同期かを選択できるようになっているのです
ね。これで非同期に設定しておいて、deactivate_component()を呼び出した後に
呼び出し側からtick()を入れれば大丈夫そうですね。

この版がリリースされましたら、そのように対応したいと思います。
それまではChoreonoid用の実行コンテキストでしのぐことにします。

(08/27/13 10:41), Ando Noriaki wrote:
> 中岡さん
> 
> 安藤です
> 
> ご報告ありがとうございます。これについては、修正する方向でチケットを発行しました。
> http://redmine.openrtm.org/issues/2808
> 
> 実は、この件に関しては、deactivateを修正するならactivate/resetも修正する必要もあり、
> また、いろいろとまじめに直そうとするとインターフェースが変わってしまうので、
> branchでの修正をためらっておりました。
> 
> ちなみに、trunk版ではこの件については修正が行われています。
> コンポーネントの設定ファイル、
> 
> http://svn.openrtm.org/OpenRTM-aist/trunk/OpenRTM-aist/etc/component.conf
> 
> において
> 
> exec_cxt.sync_transition: YES/NO
> exec_cxt.sync_activation: YES/NO
> exec_cxt.sync_deactivation: YES/NO
> exec_cxt.sync_reset: YES/NO
> 
> というオプションが指定できるようになっており、ECの状態遷移を
> 同期的に行うか非同期的に行うか選択できるようになっています。
> また、同期の場合の遷移のタイムアウトも指定できるようになっています。
> 
> この実装に関して、とくに今回のケースですと waitForDeactivated 関数
> あたりがそれにあたると思うのですが、問題があるようでしたらお知らせください。
> http://svn.openrtm.org/OpenRTM-aist/trunk/OpenRTM-aist/src/lib/rtm/ExecutionContextBase.cpp
> 
> 
> 2013年8月26日 17:39 中岡 慎一郎 <s.nakaoka @ aist.go.jp>:
>>
>> 産総研の中岡です。
>>
>> 以前静岡大の清水さんが本MLにポストされた02356の投稿を見つけたのですが、
>> そこでSynchExtTriggerECのdeactivate_component()の挙動に関する指摘があり
>> ました。
>>
>> 具体的にはExtTrig系のECでは deactivate_component()内にてtick()を行わない
>> と、状態遷移が行われずにタイムアウトするまで処理がブロックしてしまうとい
>> うものです。
>>
>> これについてはバージョン1.1.0-RC3に関する指摘だったようなのですが、
>> 1.1.0-RELEASEについても修正がされていないようです。
>>
>> 実は開発中のChoreonoidでRTCを用いたシミュレーションを行なっていると、
>> コンポーネントのdeactivate時に一定の時間固まる症状が出まして、
>> これをなんとかしたく思って上記の投稿を見つけた次第です。
>> (Windowsだと場合によってはRTCひとつをdeactivateするのに何秒も固まってし
>> まいます…。)
>>
>> とりあえずChoreonoidにおいて以下のようなdeactivate_componentをもつECを
>> 作って動かしたところ、固まる症状がなくなりました。
>>
>> RTC::ReturnCode_t
>> ChoreonoidExecutionContext::deactivate_component(RTC::LightweightRTObject_ptr
>> comp) throw (CORBA::SystemException)
>> {
>>     RTC_TRACE(("deactivate_component()"));
>>
>>     CompItr it = std::find_if(m_comps.begin(), m_comps.end(),
>> find_comp(comp));
>>     if(it == m_comps.end()) {
>>         return RTC::BAD_PARAMETER;
>>     }
>>     if(!(it->_sm.m_sm.isIn(RTC::ACTIVE_STATE))){
>>         return RTC::PRECONDITION_NOT_MET;
>>     }
>>
>>     it->_sm.m_sm.goTo(RTC::INACTIVE_STATE);
>>
>>     tick();
>>
>>     if(it->_sm.m_sm.isIn(RTC::INACTIVE_STATE)){
>>         RTC_TRACE(("The component has been properly deactivated."));
>>         return RTC::RTC_OK;
>>     }
>>
>>     RTC_ERROR(("The component could not be deactivated."));
>>     return RTC::RTC_ERROR;
>> }
>>
>> ただ、やはりOpenRTM-aist本体でこの修正がなされていることが望ましいので、
>> 今後のリリースで修正をお願いできますでしょうか(ExtTrigExecutionContext,
>> SynchExtTriggerECの両方にしておくべきかと思います。)
>>
>> 以上よろしくお願い致します。
>>
>> --
>> 中岡 慎一郎 <s.nakaoka @ aist.go.jp>
>> 産業技術総合研究所 知能システム研究部門
>> ヒューマノイド研究グループ
>>
>> _______________________________________________
>> openrtm-users mailing list
>> openrtm-users @ openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-users
> _______________________________________________
> openrtm-users mailing list
> openrtm-users @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users
> 


-- 
Shin'ichiro Nakaoka <s.nakaoka @ aist.go.jp>


More information about the openrtm-users mailing list