加速度计重力部件

时间:2010-06-07 01:30:46

标签: android algorithm physics accelerometer

我知道这个问题肯定已经在很多时候解决了,如果你知道它们的存在,请赐教。谢谢。

快速破解: 我想从3轴加速度计计算这3个轴中每一个的重力分量。 我使用了2轴自由体图来计算出世界X-Z,Y-Z和X-Y轴上的加速度计的重力分量。但是解决方案似乎略有偏差,对于极端情况只有1个加速度计轴暴露于重力时是可以接受的,但对于45度的俯仰和滚动,总的幅度大于重力(由Xa ^ 2 + Ya ^获得) 2 + Za ^ 2 = g ^ 2; Xa,Ya和Za是X,Y和Z轴上的加速度计读数。)

更多细节: 该设备是Nexus One,除了3轴加速度计外,还有一个用于方位角,俯仰和滚转的磁场传感器。

在世界轴上(Z与重力方向相同,X或Y指向北极,不要认为这很重要吗?),我认为我的设备上有一个音高(P) YZ轴和XZ轴上的滚动(R)。有了这个,我用简单的trig得到: 罪(R)= AX / GXZ COS(R)=了Az / GXZ 谈(R)= AX /了Az

还有另一组音高,P。

现在我将重力定义为在世界轴上有3个分量,Gxz只能在X-Z轴上测量,Gyz用于Y-Z,Gxy用于X-Y轴。 GXZ ^ 2 + GYZ ^ 2 + GXY ^ 2 = 2 * G ^ 2 2G是因为重力在这个定义中有效地包括两次。

哦,X-Y轴产生更具异国情调的东西......如果需要,我会解释。

从这些方程式中我得到了Az的公式,并删除了tan操作,因为我不知道如何处理tan90计算(它是无穷大?)。

所以我的问题是,有人知道我是做对了还是做错了还是能指出我正确的方向?

谢谢! DVD

5 个答案:

答案 0 :(得分:5)

根据我的理解,您知道设备的俯仰和偏航(来自磁力计),并希望使用此信息计算每个(设备)坐标轴的重力分量?

作为一名物理学家,我是用Euler角度而不是俯仰 - 摇摆,但是看http://en.wikipedia.org/wiki/Yaw,_pitch,_and_roll我会按如下方式计算: 假设您的设备最初沿全局坐标系定向,因此重力为gvec:={0,0,-g}(在本地框架中)。现在我们必须计算gvec的局部坐标,因为我们经历了偏航 - 俯仰 - 滚动(如你所述,偏航没有做任何事情)。 对我来说,这对于旋转矩阵来说是最简单的:我们必须改变角度的符号,因为gvec保持不变。我会用Mathematica做这个,因为那是我的锤子,这是一个钉子

yaw = RotationMatrix[-yawangle,{0,0,1}];
pitch = RotationMatrix[-pitchangle, {0,1,0}];
roll = RotationMatrix[-rollangle,{1,0,0}];
gvec={0,0,-g}
yaw.gvec
pitch.yaw.gvec
roll.pitch.yaw.gvec

输出是偏航前,{偏航,俯仰和翻滚之后gvec的本地坐标(下面的最后一行应该是你的答案):

{0,0,-g}
{0,0,-g}
{g Sin[pitchangle],0,-g Cos[pitchangle]}
{g Sin[pitchangle],-g Cos[pitchangle] Sin[rollangle],-g Cos[pitchangle] Cos[rollangle]}

答案 1 :(得分:1)

我希望我知道,因为我也对这个问题感兴趣。

开始研究的好地方是http://www.diydrones.com/。那边的人已经在飞机自动驾驶仪的背景下解决了这个问题。有大量高质量的开源代码链接到该网站,以及所涉及的数学讨论。

答案 2 :(得分:1)

我意识到这个帖子已经过时但是如果其他人正在使用它:在你的上一个回复中,你表明你仍然会看到一些偏差,特别是在更大的角度。我经历了同样的事情,但当我添加校准程序以捕获加速度计在平面上的读数并使所有后续读数相对于平面读数时,它消失了。

答案 3 :(得分:0)

谢谢Janus! 关于旋转矩阵,你的解释对我有所启发。最后一行确实解决了我的问题!

现在我只需要修改我的自由体图来找出我做错了什么......我已经发现我不应该有重力的XY分量,因为重力与XY轴正交。

再次感谢!

编辑:跟进这一点,最后一行: {g Sin [pitchangle], - g Cos [pitchangle] Sin [rollangle], - g Cos [pitchangle] Cos [rollangle]}

我找到了代替-g Cos [pitchangle] Sin [rollangle] 来自我的自由体图的Sin [roll]更接近于实际的加速度。

我现在无法理解的是最后一个组件-g Cos [pitchangle] Cos [rollangle] 现在它非常适合小俯仰和滚转角度,它可以在俯仰或滚转角度下工作,而另一个则保持在0,但当俯仰和滚动不再是一个小角度(比如40度)时,偏差变得很大。 实际上我也意识到在nexus上实现了45度和45度的音高,手机的Z轴读数为0,X和Y均为6.8级加速度。 而旋转矩阵乘以45匝和45匝距的结果公式将是0.5重力。

方向传感器输出有问题吗?或者这是俯仰和滚动应该如何工作?

有谁知道如何解释这个问题?

谢谢!

答案 4 :(得分:0)

从加速度传感器获取重力矢量并不容易,您需要另外一个传感器,如陀螺仪(如果可用),以从加速度计读数中获取正确的重力部分。

问候 导航器