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秒。
为什么有这样奇怪的差异?我怎么做才能得到最好的结果?
看来我终于找到了答案。如果其他人也面临这些问题,以下是我的发现。
Input.location.Start (); //initializer, takes two arguments
默认参数为:
Input.location.Start (10, 10);
都是float类型,首先是精度(10米),其次是设备必须移动多少才能请求卫星的脉冲(10米)。所以我在两个设备上得到如此奇怪的时间戳数字的原因是,我没有考虑到我实际上必须移动,以获得更新的时间。所以我所做的是将精度降低到100米(我不需要获得时间戳的如此高的精度,如10米)并将位移值设置为零,我得到了完美的PPS(脉冲每秒),其中两个设备同步,这正是我所需要的。
另一点需要说明的是,如果你在室内,gps信号无法很好地通过。很大程度上取决于天空是否开阔,以及你周围的建筑有多高。如果你在这种情况下遇到一些gps修复问题,这也是一个因素。但是我可以确认GPS时间确实非常准确,并且在android设备的unity引擎上运行得非常好。iOS未测试