0

我正在使用 Android 上的加速度计、陀螺仪和磁场进行传感器融合。感谢 SensorsManager,我可以注意到这些传感器的每个新价值。

实际上,我的 Nexus 5 就是这种情况(我不确定其他 Android 设备),加速度、旋转速率和磁场是同时采样的。我们可以使用 event.timestamp 来验证它。

在其他系统(如 iOS、xSens...)上,Sensor SDK 会同时提供带有这 3 个向量的通知。

当然,当我收到一个加速度(t)时,我可以用数组编写几行代码来等待rotationRate(t)和磁场(t)。但是,如果有一种方法可以直接访问这 3 个向量,那么知道这可能会非常有趣!

另一个与传感器数据相关的问题:Android 团队是否建议设备构造函数按时间顺序提供数据?

谢谢,

蒂博

4

2 回答 2

1

简短的回答,不,Android 没有提供一种在读取所有传感器读数时获取它们的方法。

此外,您使用 SensorManager 观察到的行为,即来自不同传感器的读数恰好具有相同的时间戳,表明它们是一起读取的 - 不应依赖。没有文档可以保证这种行为(此外,这可能是您的测试和更新配置的一个怪癖),因此依赖它可能会在未来的一些更新中咬住您(并且尝试利用这一点可能更多比我在下面概述的方法更难正确或快速)。

通常,除非所有结果都由同一个传感器生成,否则不可能“同时”获得所有结果。此外,几乎所有传感器都很嘈杂,因此如果您尽可能快地读取它们,您已经需要进行一些平滑处理。

因此,您可以做的是非常快速地对它们进行采样,然后以特定的时间间隔,报告来自所有传感器的最新样本(或一些考虑到采样时间和报告时间之间的增量的平滑值)。这是一个微不足道的额外代码,尤其是当您已经在平滑嘈杂的传感器数据时。

于 2014-12-16T16:58:11.537 回答
0

对于这个特定的问题,有一个解决方法。当多个注册的侦听器同时存在于一个活动中时,这些事件的时间戳可能会产生误导。但是您可以将多个片段对象放入具有不同上下文的所述活动中。然后听这些片段中的每个传感器。通过这种方法,传感器读取时间戳变得可靠。

如果您了解并发性,或者在并行线程中收听......

于 2019-01-23T21:54:04.653 回答