【问题标题】:Get Accelero, Gyro and Magneto in same time Android在 Android 中同时获取 Accelero、Gyro 和 Magneto
【发布时间】:2014-12-16 15:44:47
【问题描述】:

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

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

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

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

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

谢谢,

蒂博

【问题讨论】:

    标签: android android-sensors sensor-fusion


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回答,但我不会再采样一次,SensorManager 做得很好。你是对的,实际上不可能将它们全部放在一起,但似乎 SensorManager 之前将它们合并(因为所有 3 个传感器的 event.timestamp 相同)然后独立广播它们(因为 onSensorChanged() 模式)。我正在寻找一种方法来检索这三重奏,然后再将它们分开。
    • 对不起,我会更新我的答案以反映 Android 目前无法做你想做的事。相反,您需要编写非常少量的代码来完成我所描述的操作。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-08
      • 1970-01-01
      • 2012-04-29
      • 2011-03-16
      • 2020-12-02
      • 2016-11-04
      相关资源
      最近更新 更多