KalmanFilter.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //#pragma once
  2. #ifndef KALMAN_FILTER_H
  3. #define KALMAN_FILTER_H
  4. #include <Eigen/Dense>
  5. //用于卡尔曼滤波
  6. const int READER_NUMS = 4;
  7. const int OBSERVATION_NUMS = 4;
  8. class Car;
  9. class CKalmanFilter{
  10. public:
  11. Car* m_pCar;
  12. public:
  13. bool m_bFlag; //定位标志位
  14. int m_nCounts; //定位成功数
  15. public:
  16. CKalmanFilter();
  17. ~CKalmanFilter();
  18. public:
  19. void Initial(double t);
  20. void Predict(double t);
  21. void Predict_Correct(double t);
  22. };
  23. class Car
  24. {
  25. public:
  26. double t;
  27. Eigen::Matrix<double, READER_NUMS, READER_NUMS,Eigen::DontAlign> A;
  28. //滤波结果保存,0 - 3 分别代表x位置坐标 x 方向速度 y坐标 y速度
  29. Eigen::Matrix<double, READER_NUMS, 1,Eigen::DontAlign> x;
  30. Eigen::Matrix<double, READER_NUMS, READER_NUMS,Eigen::DontAlign> P;
  31. Eigen::Matrix<double, READER_NUMS, READER_NUMS,Eigen::DontAlign> Q;
  32. Eigen::Matrix<double, OBSERVATION_NUMS, OBSERVATION_NUMS,Eigen::DontAlign> H;
  33. Eigen::Matrix<double, OBSERVATION_NUMS, OBSERVATION_NUMS,Eigen::DontAlign> R;
  34. //原始定位结果,0 - 3 分别代表x位置坐标 x 方向速度 y坐标 y速度
  35. Eigen::Matrix<double, OBSERVATION_NUMS, 1,Eigen::DontAlign> z;
  36. public:
  37. //EIGEN_MAKE_ALIGNED_OPERATOR_NEW //数据结构对齐
  38. };
  39. #endif