[openrtm-users 02889] ExtTrigExecutionContext, SynchExtTriggerEC の deactivate_component()

3 posts / 0 new
Last post
nakaoka
Offline
Last seen: 4 years 11 months ago
Joined: 2011-07-25 18:26
[openrtm-users 02889] ExtTrigExecutionContext, SynchExtTriggerEC の deactivate_component()

産総研の中岡です。

以前静岡大の清水さんが本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の両方にしておくべきかと思います。)

以上よろしくお願い致します。

Undefined
Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 02892] ExtTrigExecutionContext, SynchExtTriggerE

中岡さん

安藤です

ご報告ありがとうございます。これについては、修正する方向でチケットを発行しました。
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 中岡 慎一郎 :
>
> 産総研の中岡です。
>
> 以前静岡大の清水さんが本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の両方にしておくべきかと思います。)
>
> 以上よろしくお願い致します。
>
> --
> 中岡 慎一郎
> 産業技術総合研究所 知能システム研究部門
> ヒューマノイド研究グループ
>
> _______________________________________________
> 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

nakaoka
Offline
Last seen: 4 years 11 months ago
Joined: 2011-07-25 18:26
[openrtm-users 02895] ExtTrigExecutionContext, SynchExtTriggerE

安藤さん

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

なるほど、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 中岡 慎一郎 :
>>
>> 産総研の中岡です。
>>
>> 以前静岡大の清水さんが本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の両方にしておくべきかと思います。)
>>
>> 以上よろしくお願い致します。
>>
>> --
>> 中岡 慎一郎
>> 産業技術総合研究所 知能システム研究部門
>> ヒューマノイド研究グループ
>>
>> _______________________________________________
>> 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
>

Log in or register to post comments

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK