[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 メーリングリストの案内