GPS时间戳帮助.unity3d中Android设备同步失败

本文关键字:同步 失败 Android 时间戳 帮助 unity3d GPS | 更新日期: 2023-09-27 18:06:31

我遇到了一个问题,需要帮助来弄清楚发生了什么。这个想法是同步2个或更多的安卓设备相对于GPS位置时间戳。我听说GPS时间非常精确,不像系统时间,可能会在几秒钟内变化。然而,我得到的结果并不是我所期望的。

 void Start() {
     Input.location.Start ();
     double UTC_timestamp = Input.location.lastData.timestamp;
     Input.location.Stop ();  
 }

在本例中,UTC_timestamp表示自1970年1月1日00:00:00以来的总秒数。

但是如果我在两个不同的设备上请求时间戳,我会得到相当确定的差异,并且我试图通过卫星的时间戳同步它们失败。

我是这样测试的:

 using UnityEngine;
 using UnityEngine.UI;
 using System.Collections;
 public class GPSTime: MonoBehaviour {
     double UTC_timestamp;
     public Text txt_UTC;
     IEnumerator Start() {
         UTC_timestamp = getGPSTime ();
         while (Application.isPlaying) {
             yield return new WaitForSeconds (1);
             UTC_timestamp ++;
         }
     }
     void Update() {
         print("UTC: "+ UTC_timestamp);
         txt_UTC.text = "UTC: " + UTC_timestamp;
     }
     private double getGPSTime() {
         Input.location.Start ();
         UTC_timestamp = Input.location.lastData.timestamp;
         Input.location.Stop ();
         return UTC_timestamp;
     }
 }

我在两个不同的设备上运行它,我得到的时间戳差别很大:

因此,在三个应用程序启动中,我得到以下内容:

         DEVICE 1                                          

1438782375.605 1)

1438782610.260 2)

1438782681.926 (3)

1438782960.266 4)
         DEVICE 2                                          

1438782505.306 1)

1438782680.011 2)

1438782675.226 (3)

1438782967.400 4)所以第一次发射相差130秒!!第二次试验相差70秒,第三次试验相差6-7秒。第四次试验相差约7秒。

为什么有这样奇怪的差异?我怎么做才能得到最好的结果?

GPS时间戳帮助.unity3d中Android设备同步失败

看来我终于找到了答案。如果其他人也面临这些问题,以下是我的发现。

 Input.location.Start (); //initializer, takes two arguments

默认参数为:

Input.location.Start (10, 10);

都是float类型,首先是精度(10米),其次是设备必须移动多少才能请求卫星的脉冲(10米)。所以我在两个设备上得到如此奇怪的时间戳数字的原因是,我没有考虑到我实际上必须移动,以获得更新的时间。所以我所做的是将精度降低到100米(我不需要获得时间戳的如此高的精度,如10米)并将位移值设置为零,我得到了完美的PPS(脉冲每秒),其中两个设备同步,这正是我所需要的。

另一点需要说明的是,如果你在室内,gps信号无法很好地通过。很大程度上取决于天空是否开阔,以及你周围的建筑有多高。如果你在这种情况下遇到一些gps修复问题,这也是一个因素。但是我可以确认GPS时间确实非常准确,并且在android设备的unity引擎上运行得非常好。iOS未测试