[openrtm-users 00960] OpenRTM-aist-1.0.0-RC1 (C++) DataPort型データのTimeStamp不具合

7 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 1日 11時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00960] OpenRTM-aist-1.0.0-RC1 (C++) DataPort型データのTimeStamp不具合

産総研の中島です。

OpenRTM-aist-1.0.0-RC1 (C++) をUbuntu8.04環境で使用していますが、
データポート送信における、タイムスタンプの扱いに不具合があるよう
ですので報告します。

DataPort型データを送信する際に、例えば「Timed〜〜」型で定義していると、
「tm」がも送信されますが、0.4.2では確か「空っぽ」でユーザーが自らセット
する仕様だったと思いますが、1.0.0では、自動でCPU時刻が付与されているようです。

これは仕様でしょうか?またどのタイミングの時刻でしょうか?

上記を踏まえて、利用していると以下2点問題があります。

===

【1】同一データを複数のRTC間を経由する際のタイムスタンプの上書き

 テスト用に、RTCを3つ用意し、「testA」->「testB」->「testC」
という順に、「testA」で作成したデータを送信し、「testB」で受信し、
そのまま送信用にコピーし再送信、「testC」で受信という一連の処理を
する場合をテストしました。
「testA」内部で"tm.sec","tm.nsec"に値を入れて送信しても、「testB」で受信
し、中身を見ると、"tm.sec","tm.nsec"はCPU時刻にて上書きされています。
(どのタイミングでの時刻か不明ですが・・)
さらに、上書きされたデータを「testB」が「testC」に送信し、「testC」が受
信し、中身を見ると、"tm.sec","tm.nsec"は「testB」で見た時刻とは異なり、
新たに時刻が上書きされていることが判明しています。
つまり、唯一のでデータが送信の度に変更されてしまっている状態。

【2】シミュレータ(OpenHRP3など)との兼ね合い

0.4.2までは、自動付与がないため、OpenHRP3からシミュレーション上の時刻を
タイムスタンプとして取得可能でしたが、現在公開中のOpenHRP3.1.0_beta3では、
どうやら、この時刻もCPU時刻に上書きされているようです。
つまり、シミュレーション上の正確なデータを取得不可となっている状態。

===

この辺り、影響が大きいと思われますので、対応をお願いいたします。

以上

未定義
root
オフライン
Last seen: 1日 11時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00961] OpenRTM-aist-1.0.0-RC1 (C++) DataPort型デー

中島様、金広様、OpenRTM MLの皆様

産総研 安藤です

これに関しては、MLに参加していただいている皆さんにも
お聞きしたいトピックです。ぜひご意見ください。

> 産総研の中島です。
>
> OpenRTM-aist-1.0.0-RC1 (C++) をUbuntu8.04環境で使用していますが、
> データポート送信における、タイムスタンプの扱いに不具合があるよう
> ですので報告します。

> DataPort型データを送信する際に、例えば「Timed〜〜」型で定義していると、
> 「tm」がも送信されますが、0.4.2では確か「空っぽ」でユーザーが自らセット
> する仕様だったと思いますが、1.0.0では、自動でCPU時刻が付与されているようです。
>
> これは仕様でしょうか?またどのタイミングの時刻でしょうか?

ドキュメントに書いてないので、不具合といわれるとそうなのかもしれませんが、
私としては仕様のつもりでした。申し訳ございません。
基本的に、データポートのデータのタイムスタンプは、
「OutPortに対してwrite()された時刻」というルールになっております。

OutPort.h の write() の中で以下のように時刻を代入しております。

// set timestamp
coil::TimeValue tm(coil::gettimeofday());
value.tm.sec = tm.sec();
value.tm.nsec = tm.usec() * 1000;

> 上記を踏まえて、利用していると以下2点問題があります。
>
> ===
>
> 【1】同一データを複数のRTC間を経由する際のタイムスタンプの上書き
>
> テスト用に、RTCを3つ用意し、「testA」->「testB」->「testC」
> という順に、「testA」で作成したデータを送信し、「testB」で受信し、
> そのまま送信用にコピーし再送信、「testC」で受信という一連の処理を
> する場合をテストしました。
> 「testA」内部で"tm.sec","tm.nsec"に値を入れて送信しても、「testB」で受信
> し、中身を見ると、"tm.sec","tm.nsec"はCPU時刻にて上書きされています。
> (どのタイミングでの時刻か不明ですが・・)
> さらに、上書きされたデータを「testB」が「testC」に送信し、「testC」が受
> 信し、中身を見ると、"tm.sec","tm.nsec"は「testB」で見た時刻とは異なり、
> 新たに時刻が上書きされていることが判明しています。
> つまり、唯一のでデータが送信の度に変更されてしまっている状態。

これは、
「testA」->「testB」->「testC」
という構成において、testBのInPortとOutPortは、データが唯一のものである
という前提を知る由もないので致し方ないのではないでしょうか?
そもそも、testBはInPortから来たデータに何か処理を施して、OutPort
から出すわけですので、その時点で元々のデータとは異なるデータになるので
おっしゃるような「唯一のデータ」というのは前提として正しくはないと思います。

また、たとえば下の例のように、

「testA」-->「testB」->「testC」
「testA’」-/

testBがtestA, testA' からのデータを受け取り
testCにデータを出力する場合、testCに出力されるデータのタイムスタンプ
はtestAのタイムスタンプでしょうか?testA'のタイムスタンプでしょうか?

中島さんのあげられたフィルタ型のRTCは代表的なタイプですが、
それ以外の入出力のRTCも存在するので、上記のような前提を設ける
のは難しいかと思います。

> 【2】シミュレータ(OpenHRP3など)との兼ね合い
>
> 0.4.2までは、自動付与がないため、OpenHRP3からシミュレーション上の時刻を
> タイムスタンプとして取得可能でしたが、現在公開中のOpenHRP3.1.0_beta3では、
> どうやら、この時刻もCPU時刻に上書きされているようです。
> つまり、シミュレーション上の正確なデータを取得不可となっている状態。
>
> ===
>
> この辺り、影響が大きいと思われますので、対応をお願いいたします。

具体的にはどのようにすればよろしいでしょうか?

タイムスタンプに関する仕様は、使用状況によってさまざまなものが
要求されることは理解しています。しかしながら、OpenHRPやその他
タイムスタンプを前提としたアプリケーションでは、すべてのRTCが
統一されたルールに従う必要があります。でないと、RTCの再利用性が
なくなってしまいますので。

たとえば、上記の例 「testA」-->「testB」->「testC」 では、
testA のみがタイムスタンプを打刻し、testBとtestCは打刻しない
という2つのルールが存在します。
そこに、タイムスタンプを打刻するtestBとほぼ同等のtestB'というRTCを
代わりに挿入すると、上記の前提が崩れてしまいます。

OpenHRPの構造として、ここのルールを統一することは不可能でしょうか?>金広さん
たとえば、上記のタイムスタンプの時刻を与えている coil::gettimeofday() を
シミュレータが乗っ取り、任意の時刻を返すようにできるだけではだめですか?

OutPortにwrite()された時点の「時刻を打刻する」というのは、
ある意味簡潔で、比較的誰でも納得できる妥当なルールかなと
思うのですがいかがでしょうか?

あとは、データポート接続時に、OutPort側もしくはInPort側でタイムスタンプを
打刻する・しないを選択できるようにするという手もあります。
実装はできないことはないですが、いちいち指定するのはめんどうですよね。
デフォルトを打刻するにしておいて、打刻しない場合のみ指定する、
ということにしておく手も考えられますが。

ご意見などいただけましたら幸いです。

root
オフライン
Last seen: 1日 11時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00962] OpenRTM-aist-1.0.0-RC1 (C++) DataPort型デー

安藤様、皆様:

産総研の原です。
DataPortのTimeStamp に関してなのですが、そもそも
DataPortで送受信されるTimeが
RTCを使ったシステムでどのように使われるかという統一見解がない
のが問題なのでは
ないでしょうか?
DataPortを流れるデータが、デスクトップのアプリのイベントのよ
うなものであると考えると、
イベント発生時の時間を保持すべきではないでしょうか。
これは、センサーでのイベント発生時刻を保持するということであ
り、この発生時刻が重要な
場面はロボットのシステムでは、非常に多くあると思います。(セ
ンサーフュージョンを行う
場合に、センシングデータの同時性が重要になりますので)
安藤さんのおっしゃるような、Timeの使い方をする場合に
は、どちらかというと通信部分の
ヘッダーに書くべきのような気がしますが、いかがでしょうか?

On 2009/09/28, at 12:35, Ando Noriaki wrote:

> 中島様、金広様、OpenRTM MLの皆様
>
> 産総研 安藤です
>
> これに関しては、MLに参加していただいている皆さんにも
> お聞きしたいトピックです。ぜひご意見ください。
>
>> 産総研の中島です。
>>
>> OpenRTM-aist-1.0.0-RC1 (C++) をUbuntu8.04環境で使用
>> していますが、
>> データポート送信における、タイムスタンプの扱いに不具合があ
>> るよう
>> ですので報告します。
>
>> DataPort型データを送信する際に、例えば「Timed〜〜」
>> 型で定義していると、
>> 「tm」がも送信されますが、0.4.2では確か「空っ
>> ぽ」でユーザーが自らセット
>> する仕様だったと思いますが、1.0.0では、自動でCPU
>> 時刻が付与されているようです。
>>
>> これは仕様でしょうか?またどのタイミングの時刻でしょうか?
>
> ドキュメントに書いてないので、不具合といわれるとそうなのか
> もしれませんが、
> 私としては仕様のつもりでした。申し訳ございません。
> 基本的に、データポートのデータのタイムスタンプは、
> 「OutPortに対してwrite()された時刻」というルー
> ルになっております。
>
> OutPort.h の write() の中で以下のように時刻を代入して
> おります。
>
> // set timestamp
> coil::TimeValue tm(coil::gettimeofday());
> value.tm.sec = tm.sec();
> value.tm.nsec = tm.usec() * 1000;
>
>
>> 上記を踏まえて、利用していると以下2点問題があります。
>>
>> ===
>>
>> 【1】同一データを複数のRTC間を経由する際のタイムス
>> タンプの上書き
>>
>> テスト用に、RTCを3つ用意し、「testA」-
>> >「testB」->「testC」
>> という順に、「testA」で作成したデータを送信し、
>> 「testB」で受信し、
>> そのまま送信用にコピーし再送信、「testC」で受信とい
>> う一連の処理を
>> する場合をテストしました。
>> 「testA」内部で"tm.sec","tm.nsec"に値を入れて
>> 送信しても、「testB」で受信
>> し、中身を見ると、"tm.sec","tm.nsec"はCPU時刻
>> にて上書きされています。
>> (どのタイミングでの時刻か不明ですが・・)
>> さらに、上書きされたデータを「testB」が
>> 「testC」に送信し、「testC」が受
>> 信し、中身を見ると、"tm.sec","tm.nsec"は
>> 「testB」で見た時刻とは異なり、
>> 新たに時刻が上書きされていることが判明しています。
>> つまり、唯一のでデータが送信の度に変更されてしまっている状態。
>
> これは、
> 「testA」->「testB」->「testC」
> という構成において、testBのInPortとOutPort
> は、データが唯一のものである
> という前提を知る由もないので致し方ないのではないでしょうか?
> そもそも、testBはInPortから来たデータに何か処理
> を施して、OutPort
> から出すわけですので、その時点で元々のデータとは異なるデー
> タになるので
> おっしゃるような「唯一のデータ」というのは前提として正しく
> はないと思います。
>
> また、たとえば下の例のように、
>
> 「testA」-->「testB」->「testC」
> 「testA’」-/
>
> testBがtestA, testA' からのデータを受け取り
> testCにデータを出力する場合、testCに出力されるデータ
> のタイムスタンプ
> はtestAのタイムスタンプでしょうか?testA'のタイ
> ムスタンプでしょうか?
>
> 中島さんのあげられたフィルタ型のRTCは代表的なタイプで
> すが、
> それ以外の入出力のRTCも存在するので、上記のような前提
> を設ける
> のは難しいかと思います。
>
>> 【2】シミュレータ(OpenHRP3など)との兼ね合い
>>
>> 0.4.2までは、自動付与がないため、OpenHRP3からシミュ
>> レーション上の時刻を
>> タイムスタンプとして取得可能でしたが、現在公開中の
>> OpenHRP3.1.0_beta3では、
>> どうやら、この時刻もCPU時刻に上書きされているようです。
>> つまり、シミュレーション上の正確なデータを取得不可となって
>> いる状態。
>>
>> ===
>>
>> この辺り、影響が大きいと思われますので、対応をお願いいたし
>> ます。
>
> 具体的にはどのようにすればよろしいでしょうか?
>
> タイムスタンプに関する仕様は、使用状況によってさまざまなものが
> 要求されることは理解しています。しかしながら、OpenHRP
> やその他
> タイムスタンプを前提としたアプリケーションでは、すべての
> RTCが
> 統一されたルールに従う必要があります。でないと、RTCの
> 再利用性が
> なくなってしまいますので。
>
> たとえば、上記の例 「testA」--
> >「testB」->「testC」 では、
> testA のみがタイムスタンプを打刻し、testBとtestC
> は打刻しない
> という2つのルールが存在します。
> そこに、タイムスタンプを打刻するtestBとほぼ同等の
> testB'というRTCを
> 代わりに挿入すると、上記の前提が崩れてしまいます。
>
> OpenHRPの構造として、ここのルールを統一することは不可能で
> しょうか?>金広さん
> たとえば、上記のタイムスタンプの時刻を与えている
> coil::gettimeofday() を
> シミュレータが乗っ取り、任意の時刻を返すようにできるだけで
> はだめですか?
>
> OutPortにwrite()された時点の「時刻を打刻する」というのは、
> ある意味簡潔で、比較的誰でも納得できる妥当なルールかなと
> 思うのですがいかがでしょうか?
>
> あとは、データポート接続時に、OutPort側もしくは
> InPort側でタイムスタンプを
> 打刻する・しないを選択できるようにするという手もあります。
> 実装はできないことはないですが、いちいち指定するのはめんど
> うですよね。
> デフォルトを打刻するにしておいて、打刻しない場合のみ指定する、
> ということにしておく手も考えられますが。
>
> ご意見などいただけましたら幸いです。

root
オフライン
Last seen: 1日 11時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00963] OpenRTM-aist-1.0.0-RC1 (C++) DataPort型デー

安藤様、皆様

産総研の中島です。

現状の仕様であることを了解しました。

私の説明の「唯一」という表現は良くなかったかもしれないので、
少し具体的に追記します。
原さんのセンサーでのイベント発生時刻の説明に近いのですが、
私の方では、移動台車ロボットをRTCで動かす際に、ローカライズ
するために、ある時刻での車輪の「エンコーダ値+timestamp」を
DataPortで送信し、次のRTCでそのエンコーダ値からオドメトリで
「位置姿勢(X,Y,Theta)+timestamp(コピー)」を算出し、それを次のRTCに送信
し、速度制御してロボットを動かすという処理を複数のRTC群で行ってますが、
データの中身は違えど同じ「timestamp」に紐づくデータであり、timestampが変
更されてはマズイということで、前回メールの例に書きました。
(唯一という書き方で逆に混乱させてしまい申し訳有りません。)

素人考えで、例えば、送信時に「Time tm」部をチェックして、Nullだったら、
送信時刻を付与し、もし既に何らかの時刻(OpenHRP3側で付けたり、RTC内部で
オリジナルルールに基づいた時刻など)が付与されていれば、そのままいじらず
送信するのはどうかな、と思ってました。

ただし、やはり統一性を考えると良くないのかもしれません。

原さんもお書きのようにヘッダのように別のところに送信時刻を付けるか、
もしくは、仕様通り「tm」部には自動で送信時刻を入れて、イベント発生時刻な
どの意味でのtimestampは別途ユーザが独自型のDataタイプをIDL作って、その中
に「long timestamp_sec」「long timestamp_nsec」宣言して、そこを利用する
などと考えていました。

良案は思い浮かびませんが、仕様が決定されていて、周知されていることが先決
かと思います。

> 安藤様、皆様:
>
> 産総研の原です。
> DataPortのTimeStamp に関してなのですが、そもそも
> DataPortで送受信されるTimeが
> RTCを使ったシステムでどのように使われるかという統一見解がない
> のが問題なのでは
> ないでしょうか?
> DataPortを流れるデータが、デスクトップのアプリのイベントのよ
> うなものであると考えると、
> イベント発生時の時間を保持すべきではないでしょうか。
> これは、センサーでのイベント発生時刻を保持するということであ
> り、この発生時刻が重要な
> 場面はロボットのシステムでは、非常に多くあると思います。(セ
> ンサーフュージョンを行う
> 場合に、センシングデータの同時性が重要になりますので)
> 安藤さんのおっしゃるような、Timeの使い方をする場合に
> は、どちらかというと通信部分の
> ヘッダーに書くべきのような気がしますが、いかがでしょうか?
>
>
>
> On 2009/09/28, at 12:35, Ando Noriaki wrote:
>
> > 中島様、金広様、OpenRTM MLの皆様
> >
> > 産総研 安藤です
> >
> > これに関しては、MLに参加していただいている皆さんにも
> > お聞きしたいトピックです。ぜひご意見ください。
> >
> >> 産総研の中島です。
> >>
> >> OpenRTM-aist-1.0.0-RC1 (C++) をUbuntu8.04環境で使用
> >> していますが、
> >> データポート送信における、タイムスタンプの扱いに不具合があ
> >> るよう
> >> ですので報告します。
> >
> >> DataPort型データを送信する際に、例えば「Timed〜〜」
> >> 型で定義していると、
> >> 「tm」がも送信されますが、0.4.2では確か「空っ
> >> ぽ」でユーザーが自らセット
> >> する仕様だったと思いますが、1.0.0では、自動でCPU
> >> 時刻が付与されているようです。
> >>
> >> これは仕様でしょうか?またどのタイミングの時刻でしょうか?
> >
> > ドキュメントに書いてないので、不具合といわれるとそうなのか
> > もしれませんが、
> > 私としては仕様のつもりでした。申し訳ございません。
> > 基本的に、データポートのデータのタイムスタンプは、
> > 「OutPortに対してwrite()された時刻」というルー
> > ルになっております。
> >
> > OutPort.h の write() の中で以下のように時刻を代入して
> > おります。
> >
> > // set timestamp
> > coil::TimeValue tm(coil::gettimeofday());
> > value.tm.sec = tm.sec();
> > value.tm.nsec = tm.usec() * 1000;
> >
> >
> >> 上記を踏まえて、利用していると以下2点問題があります。
> >>
> >> ===
> >>
> >> 【1】同一データを複数のRTC間を経由する際のタイムス
> >> タンプの上書き
> >>
> >> テスト用に、RTCを3つ用意し、「testA」-
> >> >「testB」->「testC」
> >> という順に、「testA」で作成したデータを送信し、
> >> 「testB」で受信し、
> >> そのまま送信用にコピーし再送信、「testC」で受信とい
> >> う一連の処理を
> >> する場合をテストしました。
> >> 「testA」内部で"tm.sec","tm.nsec"に値を入れて
> >> 送信しても、「testB」で受信
> >> し、中身を見ると、"tm.sec","tm.nsec"はCPU時刻
> >> にて上書きされています。
> >> (どのタイミングでの時刻か不明ですが・・)
> >> さらに、上書きされたデータを「testB」が
> >> 「testC」に送信し、「testC」が受
> >> 信し、中身を見ると、"tm.sec","tm.nsec"は
> >> 「testB」で見た時刻とは異なり、
> >> 新たに時刻が上書きされていることが判明しています。
> >> つまり、唯一のでデータが送信の度に変更されてしまっている状態。
> >
> > これは、
> > 「testA」->「testB」->「testC」
> > という構成において、testBのInPortとOutPort
> > は、データが唯一のものである
> > という前提を知る由もないので致し方ないのではないでしょうか?
> > そもそも、testBはInPortから来たデータに何か処理
> > を施して、OutPort
> > から出すわけですので、その時点で元々のデータとは異なるデー
> > タになるので
> > おっしゃるような「唯一のデータ」というのは前提として正しく
> > はないと思います。
> >
> > また、たとえば下の例のように、
> >
> > 「testA」-->「testB」->「testC」
> > 「testA’」-/
> >
> > testBがtestA, testA' からのデータを受け取り
> > testCにデータを出力する場合、testCに出力されるデータ
> > のタイムスタンプ
> > はtestAのタイムスタンプでしょうか?testA'のタイ
> > ムスタンプでしょうか?
> >
> > 中島さんのあげられたフィルタ型のRTCは代表的なタイプで
> > すが、
> > それ以外の入出力のRTCも存在するので、上記のような前提
> > を設ける
> > のは難しいかと思います。
> >
> >> 【2】シミュレータ(OpenHRP3など)との兼ね合い
> >>
> >> 0.4.2までは、自動付与がないため、OpenHRP3からシミュ
> >> レーション上の時刻を
> >> タイムスタンプとして取得可能でしたが、現在公開中の
> >> OpenHRP3.1.0_beta3では、
> >> どうやら、この時刻もCPU時刻に上書きされているようです。
> >> つまり、シミュレーション上の正確なデータを取得不可となって
> >> いる状態。
> >>
> >> ===
> >>
> >> この辺り、影響が大きいと思われますので、対応をお願いいたし
> >> ます。
> >
> > 具体的にはどのようにすればよろしいでしょうか?
> >
> > タイムスタンプに関する仕様は、使用状況によってさまざまなものが
> > 要求されることは理解しています。しかしながら、OpenHRP
> > やその他
> > タイムスタンプを前提としたアプリケーションでは、すべての
> > RTCが
> > 統一されたルールに従う必要があります。でないと、RTCの
> > 再利用性が
> > なくなってしまいますので。
> >
> > たとえば、上記の例 「testA」--
> > >「testB」->「testC」 では、
> > testA のみがタイムスタンプを打刻し、testBとtestC
> > は打刻しない
> > という2つのルールが存在します。
> > そこに、タイムスタンプを打刻するtestBとほぼ同等の
> > testB'というRTCを
> > 代わりに挿入すると、上記の前提が崩れてしまいます。
> >
> > OpenHRPの構造として、ここのルールを統一することは不可能で
> > しょうか?>金広さん
> > たとえば、上記のタイムスタンプの時刻を与えている
> > coil::gettimeofday() を
> > シミュレータが乗っ取り、任意の時刻を返すようにできるだけで
> > はだめですか?
> >
> > OutPortにwrite()された時点の「時刻を打刻する」というのは、
> > ある意味簡潔で、比較的誰でも納得できる妥当なルールかなと
> > 思うのですがいかがでしょうか?
> >
> > あとは、データポート接続時に、OutPort側もしくは
> > InPort側でタイムスタンプを
> > 打刻する・しないを選択できるようにするという手もあります。
> > 実装はできないことはないですが、いちいち指定するのはめんど
> > うですよね。
> > デフォルトを打刻するにしておいて、打刻しない場合のみ指定する、
> > ということにしておく手も考えられますが。
> >
> > ご意見などいただけましたら幸いです。

root
オフライン
Last seen: 1日 11時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00967] OpenRTM-aist-1.0.0-RC1 (C++) DataPort型デ

安藤様

> 素人考えで、例えば、送信時に「Time tm」部をチェックして、Nullだったら、
> 送信時刻を付与し、もし既に何らかの時刻(OpenHRP3側で付けたり、RTC内部で
> オリジナルルールに基づいた時刻など)が付与されていれば、そのままいじらず
> 送信するのはどうかな、と思ってました。

OMGにおけるロボットの位置情報標準であるRoLoにおけるタイムスタンプも
? Timestamp ? specifies time at occurring measurement for current position and orientation. It is compati
ble to POSIX time which is the time elapsed since midnight Coordinated Universal Time (UTC) of Janu
ary 1, 1970. A timestamp consists of two integers of elapsed seconds and nanoseconds which is compati
ble to standard UNIX C time_t data structure.
と定義されています。

ということで、先の中島さんからの提案、
ユーザー(RTC作成者)がつけたタイムスタンプを
上書きしない仕様への変更に一票投じます。

喜多

root
オフライン
Last seen: 1日 11時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00978] OpenRTM-aist-1.0.0-RC1 (C++) DataPort型デー

OpenRTM MLの皆様

安藤です

タイムスタンプの件は、現在のところいろいろと使い方があるようで、
フレームワーク側で強制的に打刻すると問題になる場合もあるようですので、

・フレームワーク側ではタイムスタンプを打刻しない
・タイムスタンプを打刻する関数を追加する

という方向にしようと思います。

その変更部分のパッチをお送りします。必要なかたはご利用ください。
変更は OutPort.h のみですので、OutPort.h を入れ替えるだけでも結構です。

2009年9月30日12:56 Nobuyuki Kita :
> 安藤様
>
>> 素人考えで、例えば、送信時に「Time tm」部をチェックして、Nullだったら、
>> 送信時刻を付与し、もし既に何らかの時刻(OpenHRP3側で付けたり、RTC内部で
>> オリジナルルールに基づいた時刻など)が付与されていれば、そのままいじらず
>> 送信するのはどうかな、と思ってました。
>
> OMGにおけるロボットの位置情報標準であるRoLoにおけるタイムスタンプも
> ? Timestamp ? specifies time at occurring measurement for current position and orientation. It is compati
> ble to POSIX time which is the time elapsed since midnight Coordinated Universal Time (UTC) of Janu
> ary 1, 1970. A timestamp consists of two integers of elapsed seconds and nanoseconds which is compati
> ble to standard UNIX C time_t data structure.
> と定義されています。
>
> ということで、先の中島さんからの提案、
> ユーザー(RTC作成者)がつけたタイムスタンプを
> 上書きしない仕様への変更に一票投じます。
>
> 喜多

root
オフライン
Last seen: 1日 11時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00964] OpenRTM-aist-1.0.0-RC1 (C++) DataPort型デー

安藤様,

金広@産総研です.

本来シミュレーション時には全てのRTコンポーネントがシミュレーション世界の
時計に基づいたタイムスタンプを取り扱えるようにすべきところですが,
これまでのところOpenHRPではシミュレートされたセンサ情報をデータポートから
出力する際に,シミュレーション世界での時刻をタイムスタンプとして
付けているだけです.

coil::gettimeofday()を乗っ取ることが出来れば,シームレスに全てのRTCの時計を
切り替えることが出来そうです.coil::gettimeofdayをすり替えることは簡単に
可能でしょうか?

Timed〜のタイムスタンプにいつの時刻を付与するかはまた別問題ですが,これは
皆さんがタイムスタンプをどのように使われているのか聞いてみるのがよさそうです.

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2195
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク