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

GPS timestamp help. Android device synchronization fails in unity3d

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

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

所以在这种情况下,UTC_timestamp 表示自 1970 年 1 月 1 日以来的总秒数,00:00:00。

但是,如果我在 2 个不同的设备上请求时间戳,我会得到非常明显的差异,并且我尝试通过卫星的时间戳同步它们会失败。

我是这样测试的:

 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                                          

1) 1438782375.605

2) 1438782610.260

3) 1438782681.926

4) 1438782960.266

         DEVICE 2                                          

1) 1438782505.306

2) 1438782680.011

3) 1438782675.226

4) 1438782967.400

所以第一次启动相差 ~130 秒!!!第二次试验相差约 70 秒,第三次试验相差 6-7 秒。第四次试验相差大约 7 秒。

为什么会有如此奇怪的差异?我该怎么做才能获得最好的结果?

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

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

默认参数是:

Input.location.Start (10, 10);

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

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