我希望通过以下方法获取手机的当前方向:
getRotationMatrix()
首先通过和获取初始方向(方位角)getOrientation()
。- 添加陀螺仪读数随时间的积分以获得当前方向。
电话方向:
手机的 xy 平面与接地平面平行固定。即,处于“边走边发短信”的方向。
" 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
逐渐回到0
via+PI/2
。 - 陀螺仪读数的集成也带来了一些麻烦。我应该添加
dR
到方向还是减去dR
。
在给出确认答案之前,请先参考 Android 文档。
估计的答案无济于事。