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 尚未测试。
我遇到了问题,需要帮助才能弄清楚发生了什么。这个想法是根据 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 尚未测试。