[openrtm-users 00801] Re: EC の実装に関して

Ando Noriaki n-ando @ aist.go.jp
2009年 5月 29日 (金) 08:36:56 JST


清水さま

安藤です

> 前々から気になっていたのですが、
> ExecutionContext(EC)の実装に関してです。
>
> ECは確か、PeriodicとEventDrivenタイプが
> あったと思います。
> 現在の実装では、ECの基底として、
> ExecutionContextBaseクラスがあり、
> その派生としてPeriodicECクラスがあります。
> (1.0.0でもEvtDrivenは実装はないようですね。)

EventDrivenのECはFSMコンポーネント用のECでして、
FSMコンポーネントの実相がないのでEventDrivenのECはまだありません。

> 一般的な実装方法では、
> Periodic&EvtDrivenの両方に共通な機能の実装を
> ExecutionContextBaseクラスで行い、
> Periodic/EvtDrivenで異なる機能を
> それぞれの派生クラスで実装すると思います。

ExecutionContextBaseはただのインターフェースのつもり
だったので何も実装していません。
#なぜかtick()には空の実装がありますが。

> ECの機能を考えると、
> add_component, remove_component, etc.
> のメソッドは両タイプに共通と考えられるので、
> 基底クラスで実装すべきではないでしょうか?

EventDrivenECとPeriodicECでは、それぞれ
扱うコンポーネントの型が違うので、add_component
remove_componentは共通にしないほうがいいと思います。
もし共通にすると、BaseクラスではRTObjectでRTCのリストを
もちつつ、PeriodicECではDataflowComponentのリストを、
EventDrivenECではFsmComponentのリストをそれぞれ二重に
持つことになるので冗長ですね。

> また、これに関連して、
> ExtTrigECはPeriodicタイプではなくて、
> EvtDrivenに属するもののように感じるのですが、
> どうなのでしょうか?
> (実際、ExtTrigの場合はset_rate()などは
> 実質無効なオペレーションですよね。)

ExtTrigECはOpenHRPのために拡張した特殊なECで
これはPeriodicECです。onExecute()も実行されます。
#EventDrivenECではonExecute()は実行されない。

また、シミュレータの内部時間を表現するのに、ExtTrigECの
rateも使用するので、set_rate()、get_rate() もそれぞれ
意味のある関数です。


-- 
安藤慶昭@独立行政法人産業技術総合研究所 研究員
                  知能システム研究部門 統合知能研究グループ
                  〒305-8568 茨城県つくば市梅園1-1-1 中央第2
                  TEL: 029-861-5981 FAX: 029-862-6631
                  n-ando @ aist.go.jp, n-ando @ ieee.org



openrtm-users メーリングリストの案内