Переглянути джерело

-improved Kalman filter by deleting velocity

Alexander Hendrich 10 роки тому
батько
коміт
a0a356b042
2 змінених файлів з 9 додано та 11 видалено
  1. 1 1
      bbiwarg/Constants.cs
  2. 8 10
      bbiwarg/Utility/Kalman2DPositionFilter.cs

+ 1 - 1
bbiwarg/Constants.cs

@@ -128,7 +128,7 @@ namespace bbiwarg
         public static readonly int TouchTrackerNumFramesLostUntilDeleted = 5;
         public static readonly float TouchmXX = 0.003f;
         public static readonly float TouchmXY = 0.0f;
-        public static readonly float TouchmYY = 0.0165f;
+        public static readonly float TouchmYY = 0.00165f;
         public static readonly float TouchProcessNoise = 3.0e-4f;
 
         // touchEventVisualizer

+ 8 - 10
bbiwarg/Utility/Kalman2DPositionFilter.cs

@@ -37,23 +37,21 @@ namespace bbiwarg.Utility
         public void reset()
         {
             // 6 state variables and 2 measurements (0 controls)
-            kalman = new Kalman(4, 2, 0);
+            kalman = new Kalman(2, 2, 0);
 
             // time step (s)
             float t = 1 / fps;
 
             // transition matrix 
             Matrix<float> transitionMatrix = new Matrix<float>(new float[,] 
-            { {1.0f, 0.0f, 1.0f * t, 0.0f},  
-              {0.0f, 1.0f, 0.0f, 1.0f * t},  
-              {0.0f, 0.0f, 1.0f, 0.0f},  
-              {0.0f, 0.0f, 0.0f, 1.0f}});
+            { {1.0f, 0.0f},  
+              {0.0f, 1.0f}});
             kalman.TransitionMatrix = transitionMatrix;
 
             // measurement matrix
             Matrix<float> measurementMatrix = new Matrix<float>(new float[,]
-            { {1.0f, 0.0f, 0.0f, 0.0f}, // first measurement = x
-              {0.0f, 1.0f, 0.0f, 0.0f}  // second measurement = y
+            { {1.0f, 0.0f}, // first measurement = x
+              {0.0f, 1.0f}  // second measurement = y
             });
             kalman.MeasurementMatrix = measurementMatrix;
 
@@ -67,12 +65,12 @@ namespace bbiwarg.Utility
             kalman.MeasurementNoiseCovariance = measurementNoiseCovarianceMatrix;
 
             // process noise covariance matrix
-            Matrix<float> processNoiseCovarianceMatrix = new Matrix<float>(4, 4);
+            Matrix<float> processNoiseCovarianceMatrix = new Matrix<float>(2, 2);
             processNoiseCovarianceMatrix.SetIdentity(new MCvScalar(processNoiseFactor));
             kalman.ProcessNoiseCovariance = processNoiseCovarianceMatrix;
 
             // error covariance post matrix (initial value)
-            Matrix<float> errorCovariancePostMatrix = new Matrix<float>(4, 4);
+            Matrix<float> errorCovariancePostMatrix = new Matrix<float>(2, 2);
             errorCovariancePostMatrix.SetIdentity(new MCvScalar(processNoiseFactor));
             kalman.ErrorCovariancePost = errorCovariancePostMatrix;
 
@@ -82,7 +80,7 @@ namespace bbiwarg.Utility
         public void setInitialPosition(Vector2D initialPosition)
         {
             // initial state (x, y, v_x, v_y)
-            Matrix<float> initialState = new Matrix<float>(new float[] { initialPosition.X, initialPosition.Y, 0.0f, 0.0f });
+            Matrix<float> initialState = new Matrix<float>(new float[] { initialPosition.X, initialPosition.Y});
             kalman.CorrectedState = initialState;
 
             Initialized = true;