次の方法で携帯電話の現在の向きを取得したい:
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
+PI/2
- ジャイロスコープの読み取りの統合も、いくつかの問題につながります。オリエンテーションに追加
dR
するか、または減算する必要がありますdR
。
確認済みの回答を提供する前に、まず Android ドキュメントを参照してください。
推定の答えは役に立ちません。