加速度计重力部件

Dvd*_*Dvd 7 algorithm android physics accelerometer

我知道这个问题肯定已经好几次解决了,如果你知道它们的存在,请赐教.谢谢.

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

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

在世界的轴上(Z与重力方向相同,X或Y指向北极,不要认为这很重要吗?),我认为我的设备在YZ轴上有一个间距(P),和XZ轴上的辊(R).由此我使用简单的触发得到:Sin(R)= Ax/Gxz Cos(R)= Az/Gxz Tan(R)= Ax/Az

还有另一组音高,P.

现在我将重力定义为在世界轴上有3个分量,Gxz只能在XZ轴上测量,Gyz用于YZ,Gxy用于XY轴.Gxz ^ 2 + Gyz ^ 2 + Gxy ^ 2 = 2*G ^ 2 2G是因为重力在该定义中有效地包括两次.

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

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

所以我的问题是,任何人都知道我是否正确/错误或能够指出我正确的方向?

谢谢!DVD

Jan*_*nus 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
Run Code Online (Sandbox Code Playgroud)

输出是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]}
Run Code Online (Sandbox Code Playgroud)


NXT*_*NXT 1

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

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