首页 文章

使用3轴加速度计和陀螺仪获得方向

提问于
浏览
0

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

我想获得一些有关设备方向的信息,即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),但它们在分子/分母中包含根方块,因此有关坐标系的正确象限的信息丢失了 .

1 回答

  • 3

    你问的问题是一个相当频繁的问题,并且相当复杂,有许多不同的解决方案 . 虽然 Headers 只提到了一个加速度计,但你的帖子的主体提到了一个陀螺仪,所以我假设你有两个 . 此外,还有许多步骤可以使低成本的加速度计和陀螺仪工作,其中之一是进行电压 - 测量转换 . 我不会介绍那部分内容 .

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

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

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

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

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

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

    Thirdly, 如您所说,您可以使用免费滤波器或卡尔曼滤波器变体(扩展卡尔曼滤波器,误差状态卡尔曼滤波器,间接卡尔曼滤波器)通过融合来自加速度计,陀螺仪和磁力计的数据来精确跟踪设备的姿态 . 我建议Madgwick描述的免费过滤器,用C,C#和MATLAB here实现 . 如果您想跟踪设备的位置,并且有一个额外的传感器(如GPS),则需要卡尔曼滤波器变体 .

    对于我的一些示例代码,使用加速度计仅获得欧拉角俯仰和滚动,请参见my answer to this other question .

相关问题