[openrtm-users 00804] Re: EC の実装に関して
Masayuki Shimizu
masayuki.shimizu @ aist.go.jp
2009年 5月 29日 (金) 12:02:52 JST
安藤様
丁寧な解説ありがとうございます。
私の理解が間違っていたようです。
Periodicは定期的な周期実行用、
EvtDrivenは不定期なオンデマンド実行用、
という風に解釈していたのですが、
RTC仕様では違うようですね。
リアルタイム処理をやっている私からすると、
一般的なPeriodic/EvtDrivenと定義が
若干異なると感じるのですが、
仕様がそうであればそう理解することにします。
ただ、それでも、ExtTrigECのrateという概念は、
私には理解しがたいです。
清水
--- Ando Noriaki <n-ando @ aist.go.jp> wrote:
> 清水さま
>
> 安藤です
>
> > 前々から気になっていたのですが、
> > 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 メーリングリストの案内