我知道这个问题已经在某个地方解决了很多次了,如果你知道它们的存在,请告诉我,谢谢。
快速总结:我想从一个3轴加速度计上计算这3个轴上的重力分量。我使用了两个轴的自由体示意图来计算出加速度计在世界X-Z,Y-Z和X-Y轴上的重力分量。但解决方案似乎有点偏差,对于只有一个加速度计轴暴露在重力下的极端情况,它是可以接受的,但对于两个45度的俯仰和侧滚,合并的总震级大于重力(由Xa^2+Ya^2+Za^2=g^2获得;Xa,Ya和Za是X,Y和Z轴上的加速度计读数)。
更多细节:该设备是Nexus One,除了三轴加速度计外,还具有方位、俯仰和滚动磁场传感器。
在世界轴上(Z与重力方向相同,X或Y指向北极,不认为这有多大关系吗?),我假设我的设备在Y-Z轴上有一个间距(P),在X-Z轴上有一个滚动(R)。然后,我使用简单的trig得到: Sin(R)=Ax/Gxz Cos(R)=Az/Gxz Tan(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
发布于 2010-06-07 10:59:17
正如我理解你的问题,你知道你的设备(从磁力仪)的俯仰和偏航,并想使用这些信息来计算沿每个(设备)坐标轴的重力分量?
作为一名物理学家,我是从欧拉角而不是俯仰-偏航-滚动的角度长大的,但看看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]}发布于 2010-06-07 10:04:05
我希望我知道,因为我也对这个问题感兴趣。
http://www.diydrones.com/是一个开始研究的好地方。那里的人已经在飞机自动驾驶的背景下解决了这个问题。有大量高质量的开源代码链接到该站点,以及涉及到的数学讨论。
发布于 2014-01-11 03:53:53
我知道这个帖子是旧的,但以防其他人在使用它:在你的最后一个回复中,你表明你仍然看到一些偏差,特别是在更大的角度下。我也有过同样的经历,但当我添加了一个校准程序来捕捉平坦表面上的加速度计读数,并进行与平坦表面读数相关的所有后续读数时,它就消失了。
https://stackoverflow.com/questions/2986628
复制相似问题