[openrtm-users 02391] Re: ECから時刻をとれるようにする

池添明宏 ikezoe @ sec.co.jp
2012年 1月 11日 (水) 12:49:06 JST


池添です。

私も若干コンセプトは違うのですが、後者の方針のようなものを試験的に
実装したことがあります。(C++ではないのですが)

そのときは、時間とスレッドの動きを管理するスケジューラクラスを、
ECとRTCから参照するようなモデルとしました。
# このため、ECとRTCが同一メモリ上にないと動作しません・・・

スケジューラは、実際の時間のものと論理時間のものを切り替えられる
ようにしました。
論理時間のスケジューラは、例えば、スケジューラの時間を10秒進めると、
1秒周期のECの周期処理が10回動作するような仕組みになっています。
周期の異なる複数のECを、1つのスケジューラで制御することも可能です。

ちなみに、データポートのコールバックやセンサ用の受信スレッドと、ECの
スレッドを同期させることも考えているので、スケジューラは時間だけでなく
スレッドも併せて管理するような構成としています。


参考になるかどうか分かりませんが、以上です。



(2012/01/10 13:26), Ando Noriaki wrote:
> 安藤です
> 
> コメントありがとうございます。
> 
> まず、coil::gettimeofday が論理時間を返すという機能を持つに当たって、
> これがRTMに依存するということはありません。
> 
> 一般的な要求として、複数のノード間で時間を同期させたいということが
> あると思います。その際、coilレベルで、ノード間の時刻同期をさせることを
> 考えていました。(まだ実装はしていませんが。)
> 
> この考え方を拡張して、coil::gettimeofdayを複数のクロックソースから
> 時刻を取得する機能を持たせたいと思っています。
> 
> なので、まず1.については、この論理時間ECは、シミュレータ等の特殊な
> 用途で利用するためのもので、かつ論理時間は単一のアプリケーションが
> 全てを管理するので問題なし、という前提です。
> また、3.については、coilの論理時間クロックソースの機能にECが
> アクセスするだけですので、coilがRTMに依存することにはなりません。
> 
> 2.については、前者も後者も実現できますね。一応、こういうインターフェースを
> 考えていますので。
> 
> interface LogicalTimeTriggeredEC
>   : RTC::ExecutionContext
> {
>     void tick(in long sec, in long usec);
>     void get_time(out long sec, out long usec);
> };
> 
> 
> あと、ECにクロックを持たせる機能後者の方が美しいとのことですが、
> 実際インターフェースをどうするか考えると、あまり美しくはできないことが
> 分かると思います。
> RTC内のロジックがEC依存になってしまう恐れがあり、また最悪、
> RTC::ExecutionContext (LogicalTimeTriggeredECではなく) に
> get_time() オペレーションを追加しないと、希望のことが実現できないように思います。
> #ECは同一メモリ空間内にあるとは限りませんので。。。
> 
> まぁ、菅さんがおっしゃるようにECから時刻を取得するというのは正しいと言えば正しいのですが、
> gettimeofdayで取得する時刻とECの時刻が違うというのも、変な気もします。
> とりあえず、いまは前者を実装していますが、後者についても考え中ということで。。。。
> 
> 他にご意見のある方、よろしくお願いします。
> 
> 
>> 安藤先生,岡田先生,皆さま:
>> 菅です.お世話になっております.
>>
>> 前者はプロセス内部のグローバル時間を変更するEC,
>> 後者はEC内部にクロックを持ち,ECから時刻を取得する,
>> と判断します.
>>
>> これについては,後者がよいかと思いました.
>> 理由はぱっと考えると以下の二点.
>>
>> 1.同一プロセス内でECを多数使う場合に,後者の方が混乱しないのでは?
>> 2.ECにアクセスして,他のプロセスからRTC内部の時刻にアクセスできそう
>> 3.coilがRTMに依存するモデルは美しくない
>>
>> ECで時刻を取得できるとなれば,利用したい場面が増えてくると思いますが,
>> 問題が切り分けやすそうな後者の方が魅力を感じます.
>> また,僕はRTC内では出来るだけcoilのオペレーションを使っていますが,
>> ECでcoil内部の値がすり替わるというのは,
>> coilがRTMに依存するということでしょうから,
>> coilを独立したモジュールとして開発していた意味もなくなってしまうのではないですか?
>>
>> 僕の感覚だと,「美しくない」です.
>>
>>
>> ではでは
>>
>> 2012年1月10日10:38 Ando Noriaki<n-ando @ aist.go.jp>:
>>> 岡田先生、皆様
>>>
>>> 安藤です
>>>
>>> 我々も、とある用途でそういった仕様のECを検討しています。
>>>
>>> 具体的に言いますと、現在のECのトリガオペレーション tick() の代わりに
>>> tick (in long sec, in long usec) を使ってアプリケーション側から
>>> 時刻を与えられるようにし、ECは与えられた時刻を論理クロック
>>> (グローバルに1個、論理時間を保持するだけのもの) に書き込み、
>>> coil::gettimeofday() が返す値に反映させる、というものです。
>>> #添付のホワイトボードの図を参照ください。
>>>
>>> もう一つ考えているのは、この論理クロックをEC内部に持たせ、
>>> RTObject_implにECの時刻を取得するメンバ関数を追加するというものです。
>>>
>>> 最初の方法は、クロックを論理クロックに切り替えたあとは、
>>> すべてcoil:gettimeofday で取得した時刻が論理時間に切り替わるので、
>>> 例えば、ログに記録される時刻もすべて論理時間と同じになるので、
>>> 挙動とログを照らし合わせるときなどは便利ですが、そのたgettimeofday
>>> に依存してロジックを組んでいる場合、そこでおかしな現象が起こる可能性もあります。
>>>
>>> 後者は、ECに論理時間を取得しに行くロジックだけ、論理時間を元に
>>> 動作するのでわかりやすいといえばわかりやすいですが、他の時刻は
>>> 実際のクロックのままです。
>>>
>>> 今のところ、前者の実装を行なっているところですが、みなさんでなにか
>>> アイディアがおありの方がいらっしゃいましたら、コメントいただければ幸いです。
>>>
>>> よろしくお願いします。
>>>
>>>
>>> 2012年1月6日18:10 Kei Okada<k-okada @ jsk.t.u-tokyo.ac.jp>:
>>>> 岡田です.度々お騒がせしております.
>>>>
>>>> ECから時刻をとれるようにする,という機能があると以下の状況で
>>>> 便利かと思いましたので,よろしくご検討いただければ幸いです.
>>>>
>>>>>>>> シミュレータと実機で同じコンポーネントを使うような状況で,
>>>> コンポーネント内で,例えば実行周期を確認する為などの場合で,
>>>> シミュレータではシミュレーションの時刻を知りたく,実機では実時刻を
>>>> 知りたい場合,ECから現在の時刻をとれるような機能があれば,
>>>> コンポーネントでonExecuteが呼ばれる度にこれを参照する,という
>>>> プログラムがかけそうです
>>>> _______________________________________________
>>>> openrtm-users mailing list
>>>> openrtm-users @ openrtm.org
>>>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>>>
>>>
>>>
>>> --
>>> 安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
>>>     統合知能研究グループ 主任研究員, 博士(工学)
>>>     〒305-8568 つくば市梅園1-1-1 中央第2
>>>     e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
>>>     OpenRTM-aist: http://www.openrtm.org
>>>
>>> Noriaki Ando, Ph.D.
>>>     Senior Research Scientist, RT-Synthesis R.G., ISRI, AIST
>>>     AIST Tsukuba Central 2, Tsukuba, Ibaraki 305-8568 JAPAN
>>>     e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
>>>     OpenRTM-aist: http://www.openrtm.org
>>>
>>> _______________________________________________
>>> openrtm-users mailing list
>>> openrtm-users @ openrtm.org
>>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>>>
>>
>>
>>
>> --
>> ///////////////////////////////////////////////////////////////////
>> // Yuki Suga, Ph.D.
>> // URL: http://www.ysuga.net/?lang=en
>> // E-mail: ysuga @ ysuga.net
>> ///////////////////////////////////////////////////////////////////
>> _______________________________________________
>> openrtm-users mailing list
>> openrtm-users @ openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-users
> 
> 
> 


-- 

----------------------------------------------
株式会社セック 開発本部 第四開発部
池添 明宏 ikezoe @ sec.co.jp
〒158-0097 東京都世田谷区用賀4-10-1 SBSビル
TEL: 03-5491-4404 FAX: 03-5491-4771
----------------------------------------------

======================================================================
この電子メールの内容および添付されている情報は、機密情報であると同時に、
宛先として意図した特定の受信者のみに送信いたしております。当方の誤送信
等により、心当たりのない方が受信された場合は、大変お手数ですが、受信さ
れましたメール内容は削除していただきますようお願いいたします。
======================================================================


openrtm-users メーリングリストの案内