从Android加速度计数据更改坐标系-服务器端

时间:2019-07-18 20:59:07

标签: android coordinate-systems algebra

我正在从Android设备获取原始传感器数据,以便在服务器端进行处理。我正在使用 HyperIMU 应用程序收集传感器数据并将其发送到服务器,以防万一有人希望看到它。 我对加速度计和旋转矢量数据特别感兴趣。为了估算设备的移动距离,我需要将加速度计的坐标系从设备坐标更改为地球坐标。

我知道我可以使用转换矩阵来更改协调系统。 而且我可以找到带有磁力计和重力数据的转换矩阵。

我在网上搜索时发现这是一个常见问题,但是我能找到的所有答案都是使用Android API中的getRotationMatrix()方法和“旋转矢量传感器”进行设备侧处理的(因此,无需使用磁力计和重力数据)。由于服务器端没有此方法,我要做的就是自己实现。

通过这些链接:link1link2了解到,来自Android的旋转矢量传感器是一种软件传感器,可提供四元数的3个坐标。

我从link中获悉,四元数通常是单位,因此我可以使用以下公式计算第4个元素: 对于 q =(a,b,c,d)

a = sqrt(b**2 + c**2 + d**2)

从这个link中学到,我可以通过以下方式计算旋转矩阵:

Rotation Matrix from a quaternion formula.

但是,当我最终将旋转矩阵与加速度计矢量相乘,以得到其在地球坐标系上的数据时。在将该值乘以时间的平方后,我没有得到任何接近期望值(距离)的东西。我已经进行了几次测试。

我有点迷失在代数中。 :(

我需要帮助修复我的代数并正确执行协调系统更改。另外,如果有人知道getRotationaMatrix()方法的工作原理,将非常有帮助。

TL; DR:有人知道Android SensorManager方法中的getRotationaMatrix()是如何工作的吗?

非常感谢!

0 个答案:

没有答案