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

Ando Noriaki n-ando @ aist.go.jp
2009年 6月 1日 (月) 09:55:53 JST


安藤です

どちらのECも時間によりトリガされることを意図しているので、
本質的には変わりはありません。つまり、

1) 通常のPeriodicECは絶対時間により周期実行がトリガされる、
2) ExtTrigECは外部にある系共通の時計により周期実行がトリガされる

ということです。ExtTrigECはイベント駆動ではなく、時間駆動のECです。

シミュレータの中では、物理現象も、それを制御する制御系も、
すべてのものがシミュレータの時間により進みますが、
このとき、1周期がたとえ1分かかっても、1usで済んでも、
シミュレータが(というかシミュレータのスケジューラが)1msである
いえば、すべてのものは1周期が1msのつもりで計算を行います。
ですので、ECのrateはたとえExtTrigECでも意味を持ちます。


> 安藤様
>
> 丁寧な解説ありがとうございます。
>
> 私の理解が間違っていたようです。
> 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
>>
>>
>
>



-- 
安藤慶昭@独立行政法人産業技術総合研究所 研究員
                  知能システム研究部門 統合知能研究グループ
                  〒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 メーリングリストの案内