text: #ifndef KALMAN_FILTER_H_
  #define KALMAN_FILTER_H_
  
  #include "Eigen/Dense"
  
  class KalmanFilter {
  public:
      /**
       * Constructor
       */
      KalmanFilter() {};
  
      /**
       * Destructor
       */
      virtual ~KalmanFilter() {};
  
      /**
       * Prediction Predicts the state and the state covariance
       * using the process model
       * @param dt Time between k and k+1 in s
       */
      void Predict(double dt);
  
      /**
       * Updates the state by using standard Kalman Filter equations
       * @param z The measurement at k+1
       */
      void Update(const Eigen::Vector2d &z);
  
      /**
       * Updates the state by using Extended Kalman Filter equations
       * @param z The measurement at k+1
       */
      void UpdateEKF(const Eigen::Vector3d &z);
  
      // state vector
      Eigen::Vector4d x_;
  
      // state covariance matrix
      Eigen::MatrixXd P_;
  
      // state transition matrix
      Eigen::MatrixXd F_;
  
      // process covariance matrix
      Eigen::MatrixXd Q_;
  
      // measurement matrix
      Eigen::MatrixXd H_;
  
      // measurement covariance matrix
      Eigen::MatrixXd R_;
  };
  
  #endif // KALMAN_FILTER_H_
  