gpt4 book ai didi

java - SensorEvent.timestamp 和 Location.getElapsedRealtimeNanos() 时间戳延迟偏移

转载 作者:行者123 更新时间:2023-12-01 11:29:42 25 4
gpt4 key购买 nike

我目前正在从加速度计、磁力计和陀螺仪获取时间戳,并在 Android 设备上与 GPS 位置执行传感器融合。我使用 SensorEvent.timestamp 获取传感器时间戳和 Location.getElapsedRealtimeNanos() .

我的代码如下:

传感器时间戳

public void onSensorChanged( SensorEvent event ) {
if( event.sensor.getType() == Sensor.TYPE_ACCELEROMETER )
System.out.println( "Acc:" + event.timestamp );
}

GPS 时间戳

public void onLocationChanged( Location loc ) {
System.out.println( loc.getElapsedRealtimeNanos() );
}

我的问题是时间戳偏移了某个任意数量。我知道这一点是因为所有 GPS 值都通过与其余传感器的一些偏移量聚集在一起。有时这种偏移以分钟为单位,有时以小时为单位,有时领先,有时滞后。为什么我的实现中存在这种延迟以及如何修复它?

这是我正在讨论的聚类的快速绘图。我对时间戳进行了排序,并且尖锐分离后的时间戳都是与 GPS 测量相关的时间戳。

enter image description here

日志中,数据是按顺序输出的。消息类型 1 和 4 与传感器读数相关,而 -1 与 GPS 相关。如您所见,时间戳不是单调的。其余 GPS 时间戳与传感器的偏移量类似。请注意,此数据点来自另一个数据集。

enter image description here

我使用以下代码来输出时间。

System.out.println( SystemClock.elapsedRealtimeNanos() );

检查钩子(Hook)中的系统时钟后,GPS时间戳是一致的。然而,传感器明显偏离系统时钟。第一列是系统时钟,第二列是相应事件对象的时间戳,第三列时间戳是消息类型(-1 表示 GPS,其他是 IMU 传感器)。

enter image description here

我研究过的事情

我还发现 GPS 时钟同步大约落后 10-15 秒,但由于我使用的是启动时间,所​​以这应该不是问题。

我已经调查过这个SO question但我认为它不适用,因为该问题的延迟似乎是一致的(100 毫秒),而且相对于我所经历的情况,延迟幅度很小。

尽管我很想使用 SystemClock.elapsedRealtime()在这些事件 Hook 中,我知道测量传感器和调用事件之间存在延迟。我不想在我的模型中引入任何延迟/不确定性。

经过几个小时的挖掘,我还发现了很多 Android 错误,这些错误已经有几年了,而且大多数都被标记为过时的。我真的很困惑。任何关于这个问题的线索都将不胜感激。

最佳答案

答案很简单,SensorEvent.timestamp 有一个任意零引用:

It turns out after a bit of Googling (tip o' the hat to StackOverflow, as usual) that the timestamp one receives isn't based off of any particular 0-point defined in the Android OS or the API; it's an arbitrary per-sensor value intended to allow for different measurements from the same sensor to be compared, not for the measurements to be compared to other timestamped events. It's a known issue (bug concerning the documentation; bug concerning the behavior), but as of right now it's the way of the world for Android developers.

来源: http://fixermark.blogspot.ca/2014/06/quirkiness-of-android-sensor-library.html

我的解决方案是通过添加 SystemClock.elapsedRealtimeNanos() 来估计偏移量进入日志并估计每个传感器的延迟/偏移。

关于java - SensorEvent.timestamp 和 Location.getElapsedRealtimeNanos() 时间戳延迟偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30516208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com