清水さま
安藤です
> 前々から気になっていたのですが、
> 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() もそれぞれ
意味のある関数です。
OpenRTM-aist開発者の皆様
前々から気になっていたのですが、
ExecutionContext(EC)の実装に関してです。
ECは確か、PeriodicとEventDrivenタイプが
あったと思います。
現在の実装では、ECの基底として、
ExecutionContextBaseクラスがあり、
その派生としてPeriodicECクラスがあります。
(1.0.0でもEvtDrivenは実装はないようですね。)
一般的な実装方法では、
Periodic&EvtDrivenの両方に共通な機能の実装を
ExecutionContextBaseクラスで行い、
Periodic/EvtDrivenで異なる機能を
それぞれの派生クラスで実装すると思います。
ECの機能を考えると、
add_component, remove_component, etc.
のメソッドは両タイプに共通と考えられるので、
基底クラスで実装すべきではないでしょうか?
また、これに関連して、
ExtTrigECはPeriodicタイプではなくて、
EvtDrivenに属するもののように感じるのですが、
どうなのでしょうか?
(実際、ExtTrigの場合はset_rate()などは
実質無効なオペレーションですよね。)
以上、間違ってたら指摘してください。
静岡大 清水