加速度计重力组件

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

快速破解:我想从三轴加速计计算这三个轴上的重力分量。 我已经使用了2轴自由体图来计算世界XZ,YZ和XY轴上的加速度计重力分量。 但是解决scheme似乎稍微偏离了一些情况,对于极端情况,只有一个加速度计轴受到重力的影响是可以接受的,但是对于45度的俯仰和滚动,总的合成幅度大于重力(由Xa ^ 2 + Ya ^ 2 + Za ^ 2 = g ^ 2; Xa,Ya和Za是在其X,Y和Z轴上的加速度计读数。

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

在世界轴线(Z方向与重力方向一致,X或Y指向北极方向,不要以为这很重要?),我假设我的装置在YZ轴上有一个节距(P)和XZ轴上的卷(R)。 我用这个简单的trig来得到:Sin(R)= Ax / Gxz Cos(R)= Az / Gxz Tan(R)= Ax / Az

还有另外一组音调P

现在我定义了重力在世界轴上有三个分量,一个只能在XZ轴上测量的Gxz,一个在YZ上的Gyz,在XY轴上的Gxy。 Gxz ^ 2 + Gyz ^ 2 + Gxy ^ 2 = 2 * G ^ 2因为重力在这个定义中被有效地包含了两次。

哦,XY轴产生更奇特的东西…我会解释如果需要以后。

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

所以我的问题是,任何人都知道我是否做了这个对错,或能够指出我正确的方向?

谢谢! DVD

Solutions Collecting From Web of "加速度计重力组件"

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

作为一个物理学家,我用欧拉angular代替俯仰偏转滚动,但看看http://en.wikipedia.org/wiki/Yaw,_pitch,_and_roll我会计算如下:假设你的设备最初是沿全局坐标系定位的,所以重力是gvec:={0,0,-g} (在本地帧中)。 现在我们必须计算gvec的本地坐标,因为我们正在经过偏航俯仰摇摆(偏航不会像你所说的那样做任何事情)。 对我来说,这是最简单的旋转matrix:我们必须改变angular度的标志,因为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]} 

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

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

我意识到post是旧的,但如果其他人正在使用它:在你最后的回应,你表示,你仍然看到一些偏差,尤其是在较大的angular度。 我经历过同样的情况,但是当我添加一个校准程序来捕捉加速度计在平面上的读数并且相对于平坦表面读数进行所有后续读数时,它就消失了。

谢谢Janus! 你的解释让我对旋转matrix有了启发。 最后一行确实解决了我的问题!

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

再次感谢!

编辑:跟进,最后一行:{g Sin [pitchangle], – g cos [pitchangle] Sin [rollangle], – g Cos [pitchangle] Cos [rollangle]}

我发现,而不是-g Cos [pitchangle] Sin [rollangle] Sin [roll]从我的自由体图更接近于实际的加速度。

现在我不能理解的是最后一个组件–gCos [pitchangle] Cos [rollangle]现在对于小的俯仰angular和侧倾angular来说是完美的,并且对于俯仰或滚转angular而言,它可以很好地工作,而另一个保持在0,但是当俯仰和滚动不再是一个小angular度(比如说40度)时,偏差变得显着。 实际上,我也意识到要在联系人上实现45个滚动和45个音调,手机将具有0个Z轴读数,X和Y都在6.8个加速度上。 而从45°和45°的旋转matrix乘法得到的公式是0.5重力。

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

有谁知道如何解释这个?

谢谢!

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

作为导航