安卓如何计算旋转矢量?



Android文档在这里说(只需阅读前4-5行(旋转矢量传感器是基于软件的。但大多数 Android 设备实际上都有 3 个传感器,即加速度计、陀螺仪和磁力计。因此,必须有一种转换算法,将来自这些实际传感器的数据转换为虚拟旋转矢量传感器。但是我找不到任何文章或源代码,在那里我可以看到用于计算旋转矢量的算法。如果有人在这方面有任何经验,也许他可以指出我正确的方向。

我需要它来知道是否有必要从旋转矢量传感器获取旋转数据,或者我可以使用基于硬件的传感器自己计算它。

通过以下 url 访问的实现使用扩展卡尔曼滤波器,这是一种融合加速度计、陀螺仪和(可选(磁力计数据的标准方式:

https://android.googlesource.com/platform/frameworks/native/+/refs/heads/master/services/sensorservice/Fusion.cpp

关键方法是predictupdate,对应于卡尔曼滤波的各个阶段。输出是四元数(可通过getAttitude方法获取(,这是表示 3D 方向的便捷方法。术语"旋转矢量"只是Android用于四元数的别名。

传感器融合的其他替代方案包括Madgwick和Mahony滤波器。那里有很多资源(甚至许多开放实现(。

最新更新