使用陀螺仪和加速度计获取方向

Posted

技术标签:

【中文标题】使用陀螺仪和加速度计获取方向【英文标题】:Obtaining orientation using gyroscope and accelerometer 【发布时间】:2013-03-07 15:00:57 【问题描述】: 我想监控设备在 2 轴上的方向:非常简单:哪条方向向下。 它必须在较长的时间段(12 小时)内保持准确性 它将受到围绕所有轴的旋转和加速度的影响

该设备将是带有标准陀螺仪/加速度计的 android 手机。使用这两种传感器类型,是否可以满足上述要求?

到目前为止我的想法:单独的加速度计无法实现这一点,因为给定任何一组瞬时值,不可能将重力和空间加速度分量分开。我无法理解陀螺仪如何帮助解决这个问题。是否有任何巧妙的公式/算法可以解决这个问题?

谢谢

【问题讨论】:

尝试用谷歌搜索“加速度计陀螺仪数据融合”。这是 IMU 中非常常见的任务,并且绝对可行。 (在我的脑海中,你可以设置一个卡尔曼滤波器/只在加速度计上做一个 HPF,在陀螺仪上做一个 LPF,但我手头没有任何实现细节)。 【参考方案1】:

结合加速度计和陀螺仪数据的一种简单方法是使用互补滤波器。这样,您就不会遇到陀螺仪漂移和加速度计噪声的问题。它也比卡尔曼滤波器更容易理解和使用。

您将使用积分计算陀螺仪的角度。对于加速度计,您将使用 tan2 函数来确定重力矢量的位置。然后互补滤波器将这两个角度组合如下:

角度 = 0.98*(角度 + 陀螺数据*dt) + 0.02*accAngle

请注意,您如何只获取加速度计数据的一小部分(刚好足以补偿漂移)。因此,您将使用陀螺仪数据进行快速变化,但从长远来看,您将继续遵循加速度计角度计算的平均值,以免漂移。

我希望这会有所帮助。如果您需要更多信息和 C 代码示例,我写了一篇关于它的文章 here

【讨论】:

以上是关于使用陀螺仪和加速度计获取方向的主要内容,如果未能解决你的问题,请参考以下文章

使用加速度计和陀螺仪获取手机在太空中的大致位置

使用加速度计陀螺仪和磁电机获取位置的库

Unity 3D中加速度计和陀螺仪的传感器融合

CoreMotion框架--加速计和陀螺仪

硬件架构设计 | 惯性导航系统

使用加速度计、陀螺仪和指南针计算设备在 3D 世界中的运动