我正在创建一个增强现实应用程序,当手机面对兴趣点时(手机上存储了gps位置),它可以简单地显示文本视图。 textview被绘制在屏幕上的兴趣点位置。
它工作正常,问题是指南针和加速度计非常“变化”,并且textview不断地左右上下移动,因为传感器的空置性。
有办法解决吗?
答案 0 :(得分:8)
我们的问题是一样的。当我创建简单的增强现实项目时,我也遇到了同样的问题。解决方案是使用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 <=α<= 1)。如果设置alpha = 1,则输出将与输入相同(根本不平滑)。如果设置alpha = 0,输出将永远不会改变。要消除噪音,您可以简单地平滑加速度计和磁力计值。
在我的情况下,我使用加速度计alpha值= 0.2和磁力计alpha值= 0.5。物体将更加稳定,运动非常好。
答案 1 :(得分:3)
如果你想更进一步,你应该看一下你的方向数据或传感器融合的低通滤波器。
祝你好运。
JQCorreia
答案 2 :(得分:1)
我用一个简单的技巧解决了它。这会稍微延迟你的结果,但它们可以避免指南针和加速度计的不准确。
创建最后N
个值的历史记录(因此,当您再次从零开始N
时,将值保存到数组,增加索引)。然后,您只需使用存储值的算术平均值。
答案 3 :(得分:0)
陀螺仪传感器读数的集成可以极大地改善最终估计方向的稳定性。 如果您的设备有陀螺仪,请查看steady compass应用程序,或者如果您没有陀螺仪,请查看视频。
陀螺仪的集成可以使用互补滤波器以相当简单的方式完成。