2016-02-03 19 views

答えて

1

あなたはさておきIOS CMMotionManager

protected CMMotionManager _motionManager; 
public event EventHandler<bool> OnMotion; 

public double ACCEL_DETECTION_LIMIT = 0.31; 
private const double ACCEL_REDUCE_SPEED = 0.9; 

private double accel = -1; 
private double accelCurrent = 0; 

private void StartAccelerometerUpdates() 
    { 
     if (_motionManager.AccelerometerAvailable) 
      _motionManager.AccelerometerUpdateInterval = ACCEL_UPDATE_INTERVAL; 
     _motionManager.StartAccelerometerUpdates (NSOperationQueue.MainQueue, AccelerometerDataUpdatedHandler); 
    } 

public void AccelerometerDataUpdatedHandler(CMAccelerometerData data, NSError error) 
     {   
     double x = data.Acceleration.X; 
     double y = data.Acceleration.Y; 
     double z = data.Acceleration.Z; 

     double accelLast = accelCurrent; 
     accelCurrent = Math.Sqrt(x * x + y * y + z * z); 
     double delta = accelCurrent - accelLast; 
     accel = accel * ACCEL_REDUCE_SPEED + delta; 

     var didStep = OnMotion; 

     if (accel > ACCEL_DETECTION_LIMIT) 
     {           
      didStep (this, true);//maked a step 
     } else { 
      didStep (this, false); 
     } 
    } 
+0

ありがとうございました。それは何とかそれのいくつかの欠陥で動作しました。初期ロード時に何らかの理由でコードが11ステップになると、ステップが正しく検出され始めます。私はACCEL_DETECTION_LIMITの周りで遊んでいましたが、それは初期の負荷がいくらか改善されましたが、精度はオフです。ここで詳しい説明があります。 https://gist.github.com/anonymous/d8563c4c8fc8ba874ba6。どんなアイデアが問題なの? – Axil

+0

@Axilはバグを修正しました。 'private double accel'を-1に設定するだけです。 –

1

から加速度計データを用いて、ステップのイベントを検出することができ、単に加速度計出力を使用して、正確な歩数計を作成する簡単な解決策はありません。それはちょうど騒々しいです。ジャイロスコープの出力(利用可能な場合)を使用して出力をフィルタリングすると、精度が向上します。

ここで粗末なことは、歩数計のコードを配線することです: - ステップは、Z軸で検出された加速度の変化として検出されます。デフォルトの加速度(重力の影響は)ここにあなたがそれを行う方法を知っていると仮定:

float g = (x * x + y * y + z * z)/(GRAVITY_VALUE * GRAVITY_VALUE) 

あなたのしきい値がg=1である(これはまだ立ったときに表示されるものです)。この値のスパイクはステップを表します。あなたがしなければならないことはスパイクを数えることだけです。ここで、g> 1の単純なことはしません。あるステップでは、gの値が一定の期間増加し、その後に戻ります(時間の経過とともに値をプロットすると、ステップがあります - 本質的にあなたは罪の波を数えたいと思っています)

これはちょうどあなたを始めるためのものです。精度を上げるために複雑さを増す必要があります。 次のようなもの: - 偽のステップ検出を避けるためのヒステリシス - 加速度計の出力のフィルタリング - ステップ間隔の計算 ここには含まれていないので、実験する必要があります。

+0

okこれを解決するためには、より多くの研究が必要です。あなたは最初に試してみましたか?それは動作しますが、負荷の冒頭では奇妙な動作です。もしそれを微調整することができれば、うまくいくでしょう。ありがとう – Axil

+0

私はこの式を使って、包囲物を建てるときにもっと多くを使った。キャリブレーション部分は、特に加速度計のみで作業する場合、ヒットとミスの可能性があります。しかし、正しく行われたものは十分に単純でなければなりません。 – Pandrei