15

私のアプリケーションでは、かなり単純な落下検出アルゴリズムを搭載できるようにしたいと考えています。現在、onSensorChanged()で、現在のx、x、z値の絶対値を取得し、これからSensorManager.GRAVITY_EARTH(9.8 m / s)を減算しています。結果の値は、加速度計によって落下が検出されたことを示すフラグを設定するために、しきい値を10回続けて大きくする必要があります。しきい値は、約8m/sです。

また、しきい値を超えた直後の電話の向きと、しきい値を超えなくなったときの電話の向きを比較しています。これにより、向きセンサーが落下を検出したことを示す別のフラグが設定されます。

両方のフラグが設定されている場合、ユーザーがOKであるかどうかを確認するイベントが発生します。電話をまっすぐに持ち上げた場合の加速度計の絶対値は約9.8 m / sですが、静止した場合の問題です。ある角度では、15m/sを超える可能性があります。これにより、他のイベントが転倒検出をトリガーします。これを回避するためにしきい値を上げると、転倒は検出されません。
誰かが私にここで私が使用すべき可能な値や私の方法を改善する方法についてアドバイスを与えることができますか?どうもありがとう。

4

4 に答える 4

16

まず、x、y、z の値をそのまま加算することはできず、ベクトル演算を使用する必要があることを思い出してください。これが、15 m/s を超える値を取得する理由です。電話が動いていない限り、ベクトルの合計は常に約 9.8 m/s になります。SQRT(x*x + y*y + z*z) を使用して計算します。さらに情報が必要な場合は、ベクトル数学について読むことができます。おそらくhttp://en.wikipedia.org/wiki/Euclidean_vector#Lengthが良い出発点です。

別のアルゴリズムも提案します。自由落下では、加速度計の x、y、z 値の 3 つすべてがゼロに近くなるはずです。(少なくとも、それは私がずっと前に学校で物理学の授業で学んだことです。)したがって、自由落下を検出するよりも、 x、y、z のベクトル和 <= 3 m/s のような式を使用できるかもしれません。そして、ベクトルの合計が 20 m/s を超える値に上昇すると、着陸を検出します。

これらのしきい値は単なる推測です。おそらく、テスト アプリケーションで x、y、z 値を記録し、電話の周りを移動し、オフラインで値 (およびそれらの法線とベクトルの合計) がどのように動作するかを分析して、どのしきい値が適切かを把握します。

于 2011-01-31T07:35:22.857 に答える
7

私は実際にこの問題に関する論文を発表しました。「ifall」@ ww2.cs.fsu.edu/~sposaro でお気軽にチェックしてください。

基本的に平方和の平方根を取り、3 つのものを探します。すなわち落下 2. 上限しきい値が破られました。3. 1g 前後のフラットライン、つまりロングリーで、長時間地面に横たわっています。

于 2011-02-24T06:18:57.703 に答える
4

このスレッドを更新するのを忘れていましたが、iFall が Android マーケットで入手できるようになりました。詳細については、 ww2.cs.fsu.edu/~sposaro/iFallもご覧ください。

于 2011-05-11T22:36:12.100 に答える