7

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

快速总结:我想从 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 个分量,一个只能在 XZ 轴上测量的 Gxz,一个 Gyz 代表 YZ,一个 Gxy 代表 XY 轴。Gxz^2+Gyz^2+Gxy^2=2*G^2 2G 是因为重力在这个定义中有效地包含了两次。

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

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

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

谢谢!DVD

4

5 回答 5

5

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

作为一名物理学家,我从小就使用欧拉角而不是俯仰角滚动,但是查看http://en.wikipedia.org/wiki/Yaw,_pitch,_and_roll我会计算如下:假设您的设备最初是沿全局坐标系定向的,因此重力是gvec:={0,0,-g}(在局部坐标系中)。现在我们必须在通过 yaw-pitch-roll 时计算 gvec 的局部坐标(正如你提到的,yaw 没有做任何事情)。对我来说,这对于旋转矩阵来说是最简单的:我们必须改变角度的符号,因为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-07T02:59:17.470 回答
1

我意识到帖子很旧,但万一其他人正在使用它:在您最后的回复中,您表示您仍然看到一些偏差,尤其是在较大的角度下。我遇到了同样的情况,但是当我添加一个校准例程以在平面上捕获加速度计的读数并相对于平面读数进行所有后续读数时,它就消失了。

于 2014-01-10T19:53:53.270 回答
1

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

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

于 2010-06-07T02:04:05.223 回答
0

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

关于导航器

于 2012-01-23T21:50:08.420 回答
0

谢谢杰纳斯!你的解释有点启发了我关于旋转矩阵的问题。最后一行确实解决了我的问题!

现在我只需要修改我的自由体图来找出我做错了什么......我已经发现我不应该有重力的 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.8ish。而旋转矩阵乘法在 45 滚动和 45 俯仰时得到的公式将是 0.5 重力。

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

有谁知道如何解释这个?

谢谢!

于 2010-06-11T11:20:18.023 回答