3

Android 開発 (最新の SDK) ではGpsStatus.NmeaListener、時間を同期するために を使用して NMEA メッセージを解析しています。

コールバックで、 onNmeaReceived(long timestamp, String nmea)GPRMC メッセージの nmea 文字列を解析します。次に、システム クロックと GPRMC メッセージから解析された時間とのオフセットを計算します。

現在、Android フレーム作業で NMEA メッセージが受信された瞬間とコールバックの処理の間に遅延があります。これにより、計算している実際のオフセットが変動します。

私の推測ではtimestamp、NMEA メッセージに沿って送信されるのは、NMEA メッセージが受信された瞬間のシステム クロック時刻です。これが正しい場合、このタイムスタンプを使用して、コールバック処理のレイテンシを補うことができます。

私の測定では、timestamp時間はコールバックでキャプチャされたシステム クロック時間onNmeaReceivedと約 10 ~ 30 ミリ秒の差があります。
と解析された GPRMC メッセージから得られた時間との差/オフセットは、timestamp7200092ms のオーダーです (GPS とシステム時間の差は 2 時間)。

したがって、これtimestampは GPS ベースの時刻ではなく、メッセージを受信したシステム クロックの時刻であると言えます。

Web をかなり検索しましたが、このタイムスタンプに関する情報を見つけることができないようです。このタイムスタンプについて詳しく教えてくれるリソースを持っている人はいますか? このタイムスタンプは正確には何を表していますか? それはどの瞬間に記録されますか?

4

1 に答える 1

2

Hanno Binder のコメントのおかげで、次の回答にたどり着きました。

NMEA コールバックについては、Android Location Engine のソース コードで説明されています。ここでは、android フレームワークがロケーション エンジン (GL エンジン) から受信したイベントを処理するときにtimestamp、コールバック内の が記録されることが示されています。onNmeaReceived(long timestamp, String nmea)Android GPS アーキテクチャの概要については、greatanjum による XDA の GPS アーキテクチャの概要 を参照してください。

gettimeofday() メソッドを使用して (sys/time.h> で指定されているように) としてtimestamp記録されます。struct timeval

timestampと GPRMC 時間の間の 200 オフセットの標準偏差を10 台の Nexus 7 (2012) デバイスで測定すると、記録されたオフセットの平均標準偏差は 6.95 ミリ秒になります。

于 2015-07-20T17:23:55.683 に答える