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

时间:2011-12-09 21:07:16

标签: android iphone matrix rotation accelerometer

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

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

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

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

示例:

想象一下,你想弄清楚你的自行车刹车有多难。如果您的iPhone安装在自行车上并且显示屏指向笔直,您可以读取加速度矢量y值的加速度。您项目中的其他类别假设制动时的加速度始终可以在此值中看到。

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

我需要这个旋转矩阵来任意旋转设备。我知道不可能从重力矢量计算绕z轴的旋转,但是当x和y旋转被否定时,我很好。

非常感谢你的帮助

2 个答案:

答案 0 :(得分:1)

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

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

之后旋转矩阵非常简单。 http://en.wikipedia.org/wiki/Rotation_matrix

注意我确信有很多简单的方法可以在ios和android中执行此操作,而无需手动进行这些计算。这个答案就是几何的运作方式。

答案 1 :(得分:1)

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