1

这是我关于 SO 的第一篇文章。我还没有为嵌入式系统开发太多代码,但我遇到的问题很少,需要更高级程序员的帮助。我使用以下设备:-带有 LPC1768 (Cortex M3) MCU 的 LandTiger 板,-带有 ADXL345 加速度计(3 轴)的 Digilent pmodACL,-带有 L3G4200D 陀螺仪(3 轴)的 Digilent pmodGYRO。

我想获得一些有关设备方向的信息,即 X、Y 和 Z 轴上的旋转角度。我已经读过,为了实现这一点,我需要使用卡尔曼滤波器或其更简单的形式(即互补滤波器)组合来自加速度计和陀螺仪的数据。我想知道是否可以仅使用陀螺仪和加速度计(没有磁力计)的测量数据从全范围(0-360 度)计算滚动、俯仰和偏航。我还找到了一些数学公式(http://www.ewerksinc.com/refdocs/Tilt%20Sensing%20with%20LA.pdfhttp://www.freescale.com/files/sensors/doc/app_note/AN3461 .pdf),但它们在分子/分母中包含平方根,因此有关坐标系正确象限的信息会丢失。

4

1 回答 1

5

您提出的问题是一个相当频繁的问题,并且相当复杂,有许多不同的解决方案。虽然标题只提到了一个加速度计,但你的帖子正文提到了一个陀螺仪,所以我假设你两者都有。此外,要让低成本的加速度计和陀螺仪工作,还有许多步骤,其中之一就是进行电压到测量值的转换。我不会介绍那部分。

首先我会回答你的问题。您问是否可以通过“计算”陀螺测量值来估计设备在欧拉角中的姿态(方向)。

简短的回答:是的,您可以将缩放的陀螺仪测量值相加,以获得对设备旋转的非常嘈杂的估计(实际弧度转动,而不是姿态),但是一旦您旋转超过一个轴,它就会失败。这对于大多数应用程序来说是不够的。

我将为您提供一些一般建议、具体知识和一些我以前使用过的示例代码。

首先,您不应该尝试通过编写程序并使用 IMU 进行测试来解决此问题。您应该首先使用经过验证的库编写模拟,然后验证您的算法/程序,然后才尝试使用 IMU 实现它。

其次,你说你想“从全范围(0-360度)计算滚动,俯仰和偏航”。据此,我假设您的意思是您希望能够确定代表设备相对于外部静止东北向下 (NED) 框架的姿态的欧拉角。你的陈述让我觉得你不熟悉态度的表示,因为据我所知,没有欧拉角表示,所有 3 个角度都在 0-360 范围内。

您要使用设备姿态的应用程序将很重要。如果您使用欧拉角,当在滚动或俯仰轴上进行较大(大于约 50 度)旋转时,由于所谓的万向节锁定,您将无法准确跟踪设备的姿态。如果您需要跟踪此类运动,则需要使用四元数或方向余弦矩阵 (DCM) 表示姿态。

第三,正如您所说,您可以使用互补滤波器或卡尔曼滤波器变体(扩展卡尔曼滤波器、误差状态卡尔曼滤波器、间接卡尔曼滤波器)通过融合来自加速度计、陀螺仪和磁力计。我建议使用 Madgwick 描述的 Complimentary Filter,它在此处用 C、C# 和 MATLAB 实现。如果您想跟踪设备的位置,并且有一个额外的传感器(例如 GPS),则需要使用卡尔曼滤波器变体。

对于我的一些示例代码,仅使用加速度计来获得欧拉角俯仰和滚动,请参阅我对其他问题的回答

于 2015-01-09T10:49:31.757 回答