【问题标题】:How to improve accuracy of accelerometer and compass sensors?如何提高加速度计和罗盘传感器的精度?
【发布时间】:2011-09-29 14:08:01
【问题描述】:

我正在创建一个增强现实应用程序,当手机面向兴趣点时,它可以简单地显示一个文本视图(gps 位置存储在手机上)。文本视图绘制在屏幕上的兴趣点位置。

它工作正常,问题是指南针和加速度计非常“变体”,并且由于传感器的不准确性,文本视图不断地左右上下移动。

有办法解决吗?

【问题讨论】:

标签: android accelerometer augmented-reality compass-geolocation


【解决方案1】:

我们的问题是一样的。当我创建简单的增强现实项目时,我也遇到了同样的问题。解决方案是使用exponential smoothing 或移动平均功能。我推荐指数平滑,因为它只需要存储一个先前的值。示例实现如下:

private float[] exponentialSmoothing( float[] input, float[] output, float alpha ) {
        if ( output == null ) 
            return input;
        for ( int i=0; i<input.length; i++ ) {
             output[i] = output[i] + alpha * (input[i] - output[i]);
        }
        return output;
}

Alpha 是平滑因子 (0

就我而言,我使用加速度计 alpha 值 = 0.2 和磁力计 alpha 值 = 0.5。物体会更稳定,运动也很好。

【讨论】:

  • 请问,这个 input[i] 是加速度计的 x,y,z 值吗?
  • @DawoodAwan 不,他们 input[] 是“onSensorChanged”事件的“event.values”参数。
【解决方案2】:

如果您想更进一步,您应该查看用于定向数据或传感器融合的低通滤波器。

祝你的应用好运。

JQCorreia

【讨论】:

【解决方案3】:

我用一个简单的技巧解决了它。这会稍微延迟您的结果,但它们可以避免指南针和加速度计的不准确性。

创建最后一个 N 值的历史记录(因此,将值保存到数组中,递增索引,当您到达 N 时再次从零开始)。然后,您只需使用存储值的算术平均值。

【讨论】:

  • 您好,感谢您的建议,我会尝试的。顺便说一下,为了比较你的代码,请问你有这样做的代码示例吗?
  • 我很久以前为 iPhone 做过,所以很遗憾没有 ;-) 但它很简单。您只需构建数组的总和,除以 N 并使用此值代替您从指南针或加速度计获得的直接值。
  • 谢谢,我测试了它,它工作了一点,但文本视图仍在向各个方向移动一些像素:/
  • 您永远找不到完美的值,因为您的指南针和加速度计远非完美。您可以增加N 并选择您对延迟/视图跳转比率满意的值。
  • 请注意,您所做的是输入信号的低通滤波器。
【解决方案4】:

陀螺仪传感器读数的集成可以极大地提高最终方向估计的稳定性。 如果您的设备有陀螺仪,请查看steady compass 应用程序,如果您没有陀螺仪,请查看视频。

可以使用互补滤波器以相当简单的方式集成陀螺仪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    相关资源
    最近更新 更多