2

我正在使用 TYPE_MAGNETIC_FIELD/TYPE_ACCELEROMETER 传感器来创建指南针。

我调用 getRotationMatrix 然后 remapCoordinateSystem (总是横向)交换轴然后 getOrientation 然后我取我当前需要的轴索引 0 然后我调用 toDegrees 然后我将它设为 0-360 范围

价值=(价值+ 360)% 360;

现在一切都很好,除了它波动有点大,所以我去搜索上帝(谷歌)并查找低通滤波器分配和大多数不工作那么好,但我发现一个几乎工作。

newval = oldVal + ALPHA * (newval-oldVal);

阿尔法约0.2-0.5

所以现在在 180(-180 旋转)它快速跳到 0,然后它转到 181(-179 旋转)但是如果我移除过滤器它不会这样做。

过滤器有什么问题或者我该如何解决这个问题。

Android 2.2 所以没有 TYPE_LINEAR_ACCELERATION 或 TYPE_ORIENTATION(已弃用)

谢谢

4

1 回答 1

0

您遇到的问题是方向角是周期性的。180 度旋转与 -180 度相同(如所指出的)也与 540 度相同等。因此,虽然低通滤波器的算法没有改变,但您需要的数字字段必须是周期性的才能给您好的答案。你得到一个代表你的方向的旋转矩阵,这些矩阵构成了一个非常好的数字系统。因此,如果您对旋转矩阵执行所有过滤算法,然后仅在最后一分钟转换为角度,您的过滤器将正常工作。

于 2012-11-08T19:30:30.713 回答