0

问题:

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

描述:

我正在研究四轴飞行器的系统识别。数据采集​​是使用 Android API 完成的。System.nanoTime()我的系统的输入是脉冲宽度调制 (PWM),它使用200 Hz 的频率加上时间戳。

系统的输出是 Androids 的传感器测量值,这些测量值使用SensorEvent.timestamp.

我检查了许多在线资源,但不幸的是没有帮助。我可以随时访问SensorEvent.timestamp,以便使用此时钟对输入进行时间戳记吗?

4

1 回答 1

3

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

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

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

希望有帮助!

于 2016-12-08T22:47:23.023 回答