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

Masayuki Shimizu masayuki.shimizu @ aist.go.jp
2009年 6月 1日 (月) 12:46:13 JST


安藤様

下記の説明でさらに疑問点が出てきたので
教えてください。

ExtTrigECを駆動するリソースは、
周期的なタイミングリソース(周期タイマなど)
に限定されていて、
それ以外では駆動してはいけないという
ことでしょうか?
実装を見る限りではそういう制限はないように
思っていたのですが。

私が議論していたExtTrigECの使い方は、
例えば、GUIパネルのボタンをクリックした
ときに駆動する、というような、
不定期のイベントに同期するケースです。
もちろん、OpenHRPのように、
周期的に駆動されるものに関しては、
rateも意味を持ちますし、
安藤様の説明に何ら異論はありません。

しかし、ユーザインタフェースRTCのように、
ユーザからの不定期なコマンドイベントに
同期して動作するものを作ろうと思うと、
ExtTrigECのような任意のタイミングで
ECを駆動できるものが必要ですし、
そういう用途にExtTrigECが使われることも
想定していると私は考えていました。
なので、その場合はrateの意味が
わかりづらい、と言ったつもりでした。

上記のような、不定期イベントに同期させたい
場合は、ExtTrigECを使ってはいけない、
という理解でよろしいでしょうか?
また、そうだとすると、不定期イベント同期型の
RTCはどのECを使うのがよいのでしょうか?
RTC仕様を読んでないので、
変なことを言っていたら指摘してください。

清水

--- Ando Noriaki <n-ando @ aist.go.jp> wrote:

> 安藤です
> 
> どちらの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 メーリングリストの案内