【发布时间】:2011-11-08 14:44:24
【问题描述】:
我正在使用 Android 设备来获取航向(方位角或偏航角)。
Android API 使用加速度计值 + 磁场来计算矩阵旋转,然后从该矩阵中提取方位角(又名 SensorManager.getOrientation(...))但结果非常不准确!特别是如果手机受到一些磁性物质的干扰。
然后我有陀螺仪,如果我整合陀螺波谷时间的值,我可以得到一个实际的角度,但大家都知道:p,这可能会漂移......甚至在 10 秒后艰难的我不移动10°的角度漂移......
所以这里我一方面是加速 + 磁电机的结果,它在磁场附近非常糟糕 另一方面,我有陀螺仪的结果非常好,但随着时间的推移会漂移......
所以我的问题是,有没有一种简单或聪明的方法可以将这两个结果组合在一起以获得一种“稳健”的航向估计?我说简单,因为我知道有卡尔曼滤波器。 .但即使很难,我也读了50次理论,我什么也不懂:)。
谢谢!
【问题讨论】:
-
不推荐使用 TYPE_ORIENTATION 是有原因的,那就是它非常不准确 :) 您应该只使用陀螺仪来检测运动,而不是静态位置。加速度计更适合此目的,尽管您将不得不做一些触发。您能否编辑您的问题以明确您想要做什么?您还可以查看文档 - developer.android.com/reference/android/hardware/…
-
我同意这一点。至于“有没有一种简单或聪明的方法将这两个结果结合在一起?”这已经由传感器管理器完成,请查看 Pheonixblade9 引用的文档。
-
传感器管理器没有结合陀螺仪和加速度计。它使用加速度计和磁场来计算旋转矩阵并从中获取航向(又名 SensorManager.getOrientation(..))。所以参考Pheonix所说的,我的问题是如何将SensorManager.getOrientation的结果与陀螺仪的综合值结合起来。
-
合并如何???完全不清楚你想做什么。如果要添加它们,请尝试将它们添加在一起。那应该“将它们结合起来”:P /sarcasm
-
我想我不确定为什么 OP 不只使用传感器管理器 - 我自己从 Android 教程中获得非常准确的读数从来没有遇到过问题。我看不出这里有什么问题或目的
标签: android orientation accelerometer gyroscope azimuth