将"SensorEvent.timestamp"与"System.nanoTime()"或"SystemClock.elapsedRealtimeNanos()"同步



问题:

我需要将一些使用System.nanoTime()时间戳的数据集与另一个使用SensorEvent.timestamp时间戳的时间集同步。

描述:

我正在研究一架四旋翼飞机的系统识别。数据采集使用安卓API进行。我的系统的输入是脉宽调制(PWM(,它使用频率为200 Hz的System.nanoTime()进行时间戳。

该系统的输出是Androids的传感器测量值,这些测量值使用SensorEvent.timestamp进行时间标记。

我查看了许多在线资源,但遗憾的是没有帮助。我可以随时访问SensorEvent.timestamp吗?这样我就可以用这个时钟给输入打时间戳了?

恐怕这个问题有点复杂。SensorEvent.timestamp在某个时候从System.nanoTime()切换到SystemClock.elapsedRealtimeNanos(),但就设备和API级别而言,尚不清楚这是何时发生的。事实上,它似乎完全依赖于制造商:https://code.google.com/p/android/issues/detail?id=56561

此外,这些时钟相对于不同的事件或时间点计数,并且nanoTime()不一定在深度睡眠模式中继续计数;Android:深度睡眠的时间间隔(System.nanoTime((,System.currentTimeMillis((,SystemClock.elapedRealtimeNanos(((

我们发现解决这个问题的唯一方法是尽可能原子化地定期记录System.currentTimeMillis()System.nanoTime()SystemClock.elapsedRealtimeNanos(),并使用SensorEvent.timestampSystem.nanoTime()SystemClock.elapsedRealtimeNanos()之间的偏移量来确定传感器使用的是哪一个。一旦你有了它,你就可以获得每个传感器事件的绝对时间戳,将SensorEvent.timestampSystem.nanoTime()SystemClock.elapsedRealtimeNanos()之间的增量(分别(添加到System.currentTimeMillis()中。它并不完美,可能会偏离几毫秒,但它已经和我们能得到的一样好了

希望能有所帮助!

相关内容

  • 没有找到相关文章

最新更新