5

そのため、上記のiOS4.3で加速度計とジャイロスコープを使用してさまざまな動きのジェスチャを検出する必要があるコードを記述しています。

Q1:動き/ジェスチャ検出を実現した既存のオープンソースコードはありますか?

そうでない場合

Q2:今のところ、iPhoneがドロップされているかどうかを検出したいと思います。

私がこれまでに達成したこと: CoreMotion APIはuserAccelerationを提供します。これは、ユーザーがデバイスに与える加速度、または重力を考慮せずにデバイスをある方向(x、y、z)に加速度することです。たとえば、加速パラメータの以前の5〜6の値を保存し、それらのいずれかが大きな負の値に達する場所を確認できます。これは、基本的に突然の減速を表します。

しかし、この解決策はあまり最適ではありません。デバイスの自由落下/下向きの動きを最初に検出する必要があると思います。この問題にどのように取り組むかについて何か考えはありますか?

更新: あなたのアプローチを共有してくれたMischに感謝します。総加速については全く考えていませんでした。私はあなたが言ったことを正確に行いました:

「しかし、あなたは自分自身をテストしなければならないでしょう、それはあなたの場合、「総加速度は地球の加速度にほぼ対応する」そして「しばらくの間」を意味します。」

加速度の値は実際にはGであるため、0.9〜1.1の範囲で「合計加速度」の値をテストしました。そして、しばらくの間それらをチェックしました。最初は、updateIntervalが1/20.0に設定されているときに4つの連続した値をチェックしました。今のところ、連続性の状態を少し緩和しました。

出力例は次のとおりです。

Acceleration = 0.090868
Acceleration = 0.074473
Acceleration = 0.159797
Acceleration = 1.157513
Acceleration = 1.224588
Acceleration
= 1.036272
Acceleration = 0.914698
Acceleration = 0.904093
Acceleration = 0.941516
Acceleration = 0.046362
Acceleration = 0.060045

私はまだ値をテストして調整し続ける必要があると思います。最適化を念頭に置いている場合は、共有してください。自由落下加速度値の多くのサンプルを確認する必要があることを支援するために、私は知っています。今のところ私は考えています:

  1. 加速度の値を小数点以下3桁に四捨五入し、使用している加速度範囲で遊んでください。
  2. 自由落下条件が満たされた後、総加速度値が突然低下するかどうかを確認できます。
  3. 私が引用した加速値は少しうるさいと思いますか?
4

1 に答える 1

22

Q2へ:

大きな負の値を確認しても、電話がドロップされているかどうかはわかりません。

  • まず、ユーザーは素早いジェスチャで電話を動かすことができますが、これも大きな (おそらく負の) 値になります。
  • 第 2 に、携帯電話が想像とは異なる方向に落下する可能性があるため、携帯電話が地面に向かって動いていても、加速度が正になる可能性があります。

合計加速度 ( ) を計算し、a = sqrt(ax^2 + ay^2 + az^2)この合計加速度が地球の加速度にほぼ対応するかどうかを確認するだけです ( 9.81)。加速度がしばらくの間地球の加速度に対応する場合、電話は落下しています。

ただし、「合計加速度は地球の加速度にほぼ対応する」ことを意味し、「しばらくの間」をテストする必要があります。


この背後にある物理学:

携帯電話の y 軸が上向きになるように携帯電話を落としたとします。次に、x と z の加速度は 0 になり、y の加速度は次のようになります。

y 軸の加速度

加速度は最初は 0 で、スマートフォンを離した瞬間に -9.81 に達します。次に、小さな加速度ピークで見られる地面に衝突し、その後、加速度は再びゼロになります。

ただし、携帯電話が別の角度で落下する可能性があるため、y 方向の加速度だけを使用することはできません。

したがって、携帯電話の合計加速度を監視する必要があります。

総加速度

ここでは、負の加速度はもう見られません。ただし、自由落下は常に 9.81 の加速度で特徴付けられるため、携帯電話がどちらの方向を向いているかは問題ではありません。

編集内容:
1. 加速度の値を小数点以下 3 桁に四捨五入するのはなぜですか? をテストする場合、 が であるか であるかは0.9 < x < 1.1問題ではありません。 2. 誰かが電話を落とした後、再びそれをキャッチした場合はどうなるでしょうか。したがって、合計加速度が必ずしも再び低下する必要はありません。さらに、電話が床にぶつかった瞬間に大きな加速値 (急激な減速) が必要です。おそらく、値にこれが表示されない理由は、それが非常に短いため、2 つの連続する測定値の間に収まるからです。ただし、これは測定できるので、自由落下の直後に加速度が再び減少するとは考えないでください。x0.9146980.915

于 2013-01-21T19:46:07.110 に答える