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

3 個の投稿 / 0 new
最終投稿
nakaoka
オフライン
Last seen: 4年 11ヶ月 前
登録日: 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の両方にしておくべきかと思います。)

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

未定義
Ando Noriaki
オフライン
Last seen: 1年 9ヶ月 前
登録日: 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
オフライン
Last seen: 4年 11ヶ月 前
登録日: 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
>

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2195
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク