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

标签 android iphone matrix rotation accelerometer

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

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

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

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

例子:

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

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

我需要这个旋转矩阵来实现设备的任意旋转。我知道不可能从重力矢量计算围绕 z 轴的旋转,但只要 x 和 y 旋转被取反,我就没问题。

非常感谢您的帮助

最佳答案

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

关于android - 使用加速度计计算旋转矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8451710/

相关文章:

iphone - 核心数据切片绘图样式

iphone:如何获取应用程序文档文件夹中具有给定扩展名的所有文件的列表?

matlab - 对二维矩阵中的 block 求和 - MATLAB

java - 如何在android中获取当前年份?

java - 错误 java.lang.RuntimeException : Unable to start activity

JavaScript - touchstart 不适用于 iPhone

python - 使用 numpys np.fromfunction 评估 Python lambda 函数

r - rowSums(X %*% C * X) 的语义是什么

android - 如何让左边的drawable粘在文本上

Android LocationListener 从 GPS 切换到网络