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

Ando Noriaki n-ando @ aist.go.jp
2013年 8月 27日 (火) 10:41:25 JST


中岡さん

安藤です

ご報告ありがとうございます。これについては、修正する方向でチケットを発行しました。
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


More information about the openrtm-users mailing list