同时获取Accelero,Gyro和Magneto Android

时间:2014-12-16 15:44:48

标签: android android-sensors sensor-fusion

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

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

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

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

与传感器数据相关的其他问题: 是否有从Android团队到设备构造者的建议按时间顺序提供数据?

谢谢,

蒂博

2 个答案:

答案 0 :(得分:1)

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

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

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

因此,您可以做的是非常快速地对它们进行采样,然后以特定的时间间隔报告来自所有传感器的最新样本(或一些平滑的值,用于说明采样时间和报告时间之间的差值)。这是一个微不足道的额外代码,特别是如果您已经平滑了噪声传感器数据。

答案 1 :(得分:0)

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

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