【发布时间】:2013-08-07 01:49:36
【问题描述】:
我希望通过以下方法获取我手机的当前方向:
- 首先通过
getRotationMatrix()和getOrientation()获取初始方向(方位角)。 - 添加陀螺仪读数随时间的积分以获取当前方向。
手机方向:
手机的 x-y 平面与地平面平行固定。即,处于“边走边发短信”的方向。
“getOrientation()”返回:
Android API 让我可以轻松地从getOrientation() 获取方向,即方位角、俯仰角、滚动角。
请注意此方法总是返回其值在以下范围内:[0, -PI]和[o, PI].
我的问题:
由于陀螺仪读数的集成,用dR表示,可能相当大,所以当我做CurrentOrientation += dR时,CurrentOrientation可能会超过[0, -PI]和[o, PI] 范围。
需要进行哪些操作才能始终在[0, -PI] 和[o, PI] 范围内获取当前方向?
我在 Python 中尝试过以下方法,但我非常怀疑它的正确性。
rotation = scipy.integrate.trapz(gyroSeries, timeSeries) # integration
if (headingDirection - rotation) < -np.pi:
headingDirection += 2 * np.pi
elif (headingDirection - rotation) > np.pi:
headingDirection -= 2 * np.pi
# Complementary Filter
headingDirection = ALPHA * (headingDirection - rotation) + (1 - ALPHA) * np.mean(azimuth[np.array(stepNo.tolist()) == i])
if headingDirection < -np.pi:
headingDirection += 2 * np.pi
elif headingDirection > np.pi:
headingDirection -= 2 * np.pi
备注
这不是那么简单,因为它涉及以下麻烦制造者:
- 方向传感器读数从
0到-PI,然后直接跳转 到+PI,然后通过+PI/2逐渐回到0。 - 陀螺仪读数的集成也带来了一些麻烦。我应该将
dR添加到方向还是减去dR。
在给出确认答案之前,请先参考 Android 文档。
估计的答案没有帮助。
【问题讨论】:
-
为什么先用方向,再用陀螺?作为最终结果,您希望达到什么目标?
-
@pxm 我首先获得初始方向,然后添加集成陀螺仪读数以获得当前方向。最终结果是当前方向。
-
你在这里使用陀螺仪的原因是什么?为什么不使用 TYPE_MAGNETIC_FIELD 和 TYPE_GRAVITY 来获取方位角?
-
@HoanNguyen 我明白你的意思。但我的观点是这里的磁场严重失真。所以我决定在这里使用陀螺仪
-
如果磁力失真,那么您的初始方向不准确,因此使用陀螺仪无济于事,因为您随后的方位角值取决于初始值。
标签: android sensors android-sensors gyroscope magnetometer