[openrtm-users 02356] PeriodicECのdeactivate_component()の挙動

2 posts / 0 new
Last post
Masayuki Shimizu
Offline
Last seen: Never ago
Joined: 2011-10-28 12:20
[openrtm-users 02356] PeriodicECのdeactivate_component()の挙動

OpenRTM-aist開発者

静岡大の清水です。

PeriodicECのdeactivate_component()の挙動が、
バージョン1.1.0-RC3で、これまでの非同期からタイムアウト付き同期に
変更になっているようですが、これで困ったことが起きたのでご報告です。

当方では、OpenHRP3で行っているように、複数コンポーネントを、
SynchExtTriggerEC(実装名:OpenHRPExecutionContext)を使って同期させています。

バージョン1.0.0までは、PeriodicECのactivate/deactivate_component()メソッドは、
コンポーネントの実際の状態遷移とは非同期となっていたので、
activate/deactivate_component()の呼び出しは即座に返ってきました。

SynchExtTriggerECの場合は、その後で実際の状態遷移を起こすために、
tick()メソッドを明示的に呼び出しています。

ところが、deactivate_component()が実際の状態遷移と同期になっていると、
tick()の呼び出し元がdeactivate_component()の呼び出し元でもあるため、
永遠に実際の状態遷移は起きず、タイムアウトエラーとなります。

この問題への対処法は、2つあると思います。
(1) ECのdeactivate_component()内でtick()をコールする。
 PeriodicEC()のtick()実装は何もしないので、これによる問題は起きないはず。

(2) SynchExtTriggerECのdeactivate_component()を非同期呼び出しとして実装する。
 これは、1.0.0までの実装と同じ。

ちなみに、私は(2)の方法で問題を回避し、上手く動きました。

ここで、上記のどちらを採用するかは、RTCの仕様に依ると考えます。
RTCの仕様書では、deactivate_component()の挙動は、
状態遷移と同期なのか非同期なのか、どちらなのでしょうか。
(すいません。仕様書に詳しくないので。)

もし同期呼び出しなら、1.1.0の実装をPeriodicECには採用し、
SynchExtTriggerECのdeactivate_component()の実装ではtick()を呼ぶように
変更するのが妥当かと思います。
もし非同期なら、1.0.0までの実装を継承し、1.1.0の実装は元に戻すべきと思います。

この問題に対処しておかないと、OpenHRP3でバージョン1.1.0を採用した
時に困ることになると思いますので、よろしくご検討をお願いいたします。

清水
--------------------
Masayuki Shimizu
Assistant Professor
Dept. of Mechanical Engineering, Shizuoka Univ.
3-5-1, Johoku, Naka-ku, Hamamatsu 432-8561, JAPAN
TEL/FAX: +81-53-478-1061
Email: tmsimiz@ipc.shizuoka.ac.jp
_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

Undefined
root
Offline
Last seen: 2 days 3 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 02377] PeriodicECのdeactivate_component()の挙動

清水先生

安藤です

ご報告ありがとうございます。
OpenHRPECについては、ご指摘の(1)の通り、deactivate_component内で
tick()を呼ぶのが正しいと思います。

以前、小田桐さんが指摘されたように、deactivate_componentとon_deactivated
が非同期なのは少々問題があるので、PeriodicECではこれらが同期するように
実装しなおしました。

OpenHRP3ではPeriodicECのdeactivate_componentの実装をもはや
継承すべきでないので、ご指摘の(1)の方法で修正したいと思います。

ありがとうございました。

> OpenRTM-aist開発者
>
> 静岡大の清水です。
>
> PeriodicECのdeactivate_component()の挙動が、
> バージョン1.1.0-RC3で、これまでの非同期からタイムアウト付き同期に
> 変更になっているようですが、これで困ったことが起きたのでご報告です。
>
> 当方では、OpenHRP3で行っているように、複数コンポーネントを、
> SynchExtTriggerEC(実装名:OpenHRPExecutionContext)を使って同期させています。
>
> バージョン1.0.0までは、PeriodicECのactivate/deactivate_component()メソッドは、
> コンポーネントの実際の状態遷移とは非同期となっていたので、
> activate/deactivate_component()の呼び出しは即座に返ってきました。
>
> SynchExtTriggerECの場合は、その後で実際の状態遷移を起こすために、
> tick()メソッドを明示的に呼び出しています。
>
> ところが、deactivate_component()が実際の状態遷移と同期になっていると、
> tick()の呼び出し元がdeactivate_component()の呼び出し元でもあるため、
> 永遠に実際の状態遷移は起きず、タイムアウトエラーとなります。
>
> この問題への対処法は、2つあると思います。
> (1) ECのdeactivate_component()内でtick()をコールする。
>  PeriodicEC()のtick()実装は何もしないので、これによる問題は起きないはず。
>
> (2) SynchExtTriggerECのdeactivate_component()を非同期呼び出しとして実装する。
>  これは、1.0.0までの実装と同じ。
>
> ちなみに、私は(2)の方法で問題を回避し、上手く動きました。
>
> ここで、上記のどちらを採用するかは、RTCの仕様に依ると考えます。
> RTCの仕様書では、deactivate_component()の挙動は、
> 状態遷移と同期なのか非同期なのか、どちらなのでしょうか。
> (すいません。仕様書に詳しくないので。)
>
> もし同期呼び出しなら、1.1.0の実装をPeriodicECには採用し、
> SynchExtTriggerECのdeactivate_component()の実装ではtick()を呼ぶように
> 変更するのが妥当かと思います。
> もし非同期なら、1.0.0までの実装を継承し、1.1.0の実装は元に戻すべきと思います。
>
> この問題に対処しておかないと、OpenHRP3でバージョン1.1.0を採用した
> 時に困ることになると思いますので、よろしくご検討をお願いいたします。
>
> 清水
> --------------------
> Masayuki Shimizu
> Assistant Professor
> Dept. of Mechanical Engineering, Shizuoka Univ.
> 3-5-1, Johoku, Naka-ku, Hamamatsu 432-8561, JAPAN
> TEL/FAX: +81-53-478-1061
> Email: tmsimiz@ipc.shizuoka.ac.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

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