#pragma once #include #include #include template class UnscentedKalman { public: void predict(); void update(const Eigen::Vector measurements); Eigen::Vector predict_function_f(Eigen::Matrix item); //build this last Eigen::Vector update_function_h(Eigen::Matrix item); //build this last void unscented_transform_f(Eigen::Matrix sigmas); //Add spot for Q and R matricies void unscented_transform_h(Eigen::Matrix sigmas); const Eigen::Vector get_state() { return state_vector; } const Eigen::Matrix get_covar() { return covariance_matrix; } const Eigen::Vector get_state_p() { return state_vector_p; } const Eigen::Matrix get_covar_p() { return covariance_matrix_p; } private: static const int sigma_dim = 2 * state_dim + 1; const double kappa = 3 - state_dim; const double alpha = 1; const double beta = 2; const double lambda_ = pow(alpha, 2) * (state_dim - kappa) - state_dim; Eigen::Matrix weights_m; Eigen::Matrix weights_c; Eigen::Vector state_vector = Eigen::Vector::Ones(); Eigen::Matrix covariance_matrix = Eigen::Matrix::Identity(); Eigen::Vector state_vector_p = Eigen::Vector::Ones(); Eigen::Matrix covariance_matrix_p = Eigen::Matrix::Identity(); Eigen::Matrix sigma_points = Eigen::Matrix::Ones(); Eigen::Matrix sigma_points_f = Eigen::Matrix::Ones(); Eigen::Matrix sigma_points_h = Eigen::Matrix::Ones(); Eigen::Vector unscented_x_p = Eigen::Vector::Ones(); Eigen::Matrix unscented_P_p = Eigen::Matrix::Ones(); Eigen::Vector unscented_x_z = Eigen::Vector::Ones(); Eigen::Matrix unscented_P_z = Eigen::Matrix::Ones(); Eigen::Vector measure_vector = Eigen::Vector::Ones(); Eigen::Matrix Q = Eigen::Matrix::Random(); Eigen::Matrix R = Eigen::Matrix::Random(); };