プロジェクト

全般

プロフィール

調査 #943

[RTM-1.0.0-RC1]データポートのTimeStampにCPU時刻が自動付与によるシミュレータ側の影響

匿名ユーザー が14年以上前に追加. 14年以上前に更新.

ステータス:
終了
優先度:
高め
担当者:
対象バージョン:
-
開始日:
2009/09/25
期日:
進捗率:

100%

予定工数:

説明

OpenRTM-1.0.0-RC1-C++を使ってますが、データポート型のデータ(例えばTimedDooubleSeqなど)
にある「tm.sec」「tm.nsec」について、0.4.2では空だったものが、1.0.0ではCPU時刻が自動で
付与されているようです。

仕様でしょうか?

実時間で処理する際、特にロボット実機で処理する際には何ら不都合はないのですが、
OpenHRP3のようにシミュレータを使う際に、シミュレーション時刻の取得が出来ないので
不都合が生じてます。

ちなみに、自分で自作RTCのデータ送信元にてtm.secなどの値を入れて送信すると、
受信側では、CPU時刻に上書きされているようです。

どのタイミングでCPU時刻がつけられているのでしょうか?
複数台PCに分散したRTCでNW上でやりとりする場合、もしPCの時刻がNTPなどで一致させて
いない場合、どうなるでしょうか?

自動で、どのタイミングでついているか分かりませんが、0.4.2では、よく
受け取り側でデータ順が入れ替わって取得することがありました。
その際、自作RTCで付与したtimestampにてソートをして正確性を保ってましたが、データの入れ替わりが1.0.0系でも起きる場合の弊害などが懸念される。

自動付与、手動付与の選択が可能、もしくは、手動付与がされていない場合
(tmがnullの時)だけ自動付与などはどうでしょう。

とりあえずの報告です。

履歴

#1 匿名ユーザー が14年以上前に更新

  • 優先度通常 から 高め に変更

新たな問題が見つかりました。「バグ」です。

テスト用RTCを3つ用意し、RTCa->RTCb->RTCcとデータポートでやりとりし、RTCaでテスト用のデータに内部でtimestampを付与したものを送信するテストを実施。

RTCbでRTCaからのデータを受信すると、内部で付与したtimestampは無視されCPU自国が付与されている。

これをそのまま内部でコピーしたものをRTCcに送信すると、本来変更されてはならないtimestamp値が、RTCcで受信した際には新たなCPU時刻になっている。

つまり、唯一のデータの時刻データが、例えばスルーさせるだけのRTCなどを挟んだ際に、
その時の送信時刻で再上書きされている。

単純に送信時にCPU時刻を付与するというロジックでは、問題あり。

#2 匿名ユーザー が14年以上前に更新

バグではなく、仕様とのこと。
(OpenRTM-ML00961参照)

#3 n-ando14年以上前に更新

  • ステータス新規 から 終了 に変更
  • 担当者n-ando にセット

タイムスタンプの自動打刻は行わないように変更し、ユーザが打刻するための関数テンプレートを新たに定義した。
この関数テンプレートを使用するには、データポートのデータ型がメンバRTC::Time tmを持つ必要がある。

#4 n-ando14年以上前に更新

  • 進捗率0 から 100 に変更

他の形式にエクスポート: Atom PDF