使用加速度计计算旋转矩阵

Posted

技术标签:

【中文标题】使用加速度计计算旋转矩阵【英文标题】:Compute rotation matrix using the accelerometer 【发布时间】:2011-12-09 21:07:16 【问题描述】:

我目前面临一个更数学的问题。我正在开发一个对 X 和 Y 轴加速度感兴趣的应用程序。换句话说,我想跟踪左右来回的加速度。

如果设备朝上放在桌子上,则所需方向上的所有加速度都在这些轴的加速度值中可见。出现问题是设备未放置在这样的位置,并且围绕 X 或 Y 轴(俯仰、滚动)有一定的旋转。

我需要一个旋转矩阵 (Rm),我可以将它与测量加速度 (x) 向量相乘,以获得一个新的校准向量 (x'),其他类可以使用:x' = Rm * x强>。这应该根据参考向量 (0,0,-1) 和设备的当前重力向量计算得出。

我知道它与欧拉角有关,但我不知道如何计算这些并用这些创建我的旋转矩阵。我也知道 CMAttitude 类中有一个旋转矩阵,但我想更深入地了解这些矩阵是如何计算的。

例子:

想象一下,您想搞清楚自己的自行车刹车力度。如果您的 iPhone 安装在自行车上,显示屏指向上方,您可以在加速度矢量的 y 值中读取加速度。您项目中的其他类假定制动时的加速度始终可以在此值中看到。

问题是当 iPhone 以纵向视图放置时,显示屏指向您。然后制动不会增加 y 值,而是增加 z 值。因此,您必须将加速度值绕 x 轴旋转 -90 度。

我需要这个旋转矩阵来进行设备的任意旋转。我知道不可能从重力向量计算绕 z 轴的旋转,但只要 x 和 y 旋转被否定我就可以了。

非常感谢您的帮助

【问题讨论】:

我建议您重新标记此问题,以便向更广泛的受众开放。这并不是真正的 iPhone 受限问题,但例如 android 编码人员也可以很好地回答。 【参考方案1】:

我认为以下链接应该会有所帮助 Transforming iPhone Accelerometer Data to Automobile Axes 注意旋转矩阵有错误,元素rm11应该是cos"Beta"*cos"gamma"而不是cos"alpha"*cos"gamma"

【讨论】:

Batti,您链接的页面受密码保护。您可以访问它并且可以在其他地方发布吗? 没关系。 DeviceMotion relative to world - multiplyByInverseOfAttitude 展示了如何将设备相对加速度值转换为 ios5 及更高版本的地球相对加速度值。【参考方案2】:

要计算欧拉角,您需要计算参考矢量和当前重力矢量之间的角度。

http://chemistry.about.com/od/workedchemistryproblems/a/scalar-product-vectors-problem.htm

之后旋转矩阵就很简单了。 http://en.wikipedia.org/wiki/Rotation_matrix

请注意,我确信在 ios 和 android 中有很多简单的方法可以做到这一点,而无需手动进行这些计算。这个答案就是几何的结果。

【讨论】:

感谢您的回答。我需要否定围绕 x 和 y 轴的旋转,以便所有加速度(左、右、后、前)都显示在加速度矢量的 x 和 y 值中,并且不包含在 z 值中。所以我需要一个 x 旋转的角度和一个 y 旋转的角度,并将两者结合到一个旋转矩阵中。我不知道如何仅通过这些向量之间的角度来实现这些。旋转矩阵会是什么样子? 你能多描述一下你想要做什么吗?我的意思是大局。 我不允许发布任何图片

以上是关于使用加速度计计算旋转矩阵的主要内容,如果未能解决你的问题,请参考以下文章

加速度计磁力计求初始姿态角

OpenGL:切换和反转轴

MATLAB 优化:加速大型矩阵的计算

使用加速框架的矩阵乘法和逆问题

使用原始加速度计和磁力计数据计算磁航向

如何用MATLAB核心运行Python代码来加速计算?