28 const std::vector<common_lib::structures::Cone>& perception_map, Eigen::VectorXf& _x_vector_,
29 Eigen::MatrixXf& _p_matrix_, std::vector<int>& matched_ids,
30 std::vector<Eigen::Vector2f>& matched_cone_positions,
31 std::vector<Eigen::Vector2f>& new_features,
ObservationModel* observation_model)
const {
35 common_lib::competition_logic::Color::BLUE));
37 float distance_to_vehicle = (landmark_absolute - _x_vector_.segment<2>(0)).norm();
44 float n_best = std::numeric_limits<int>::max();
45 float outer = std::numeric_limits<int>::max();
46 for (
int j = 6; j < _x_vector_.size(); j += 2) {
50 _x_vector_, j,
static_cast<unsigned int>(_x_vector_.size()));
54 Eigen::Vector2f innovation = Eigen::Vector2f(cone.position.x, cone.position.y) - z_hat;
56 Eigen::MatrixXf s_matrix = h_matrix * _p_matrix_ * h_matrix.transpose() + q_matrix;
58 float nis = innovation.transpose() * s_matrix.inverse() * innovation;
60 float nd = nis + log(s_matrix.determinant());
65 }
else if (nis < outer) {
70 matched_ids.push_back(j_best);
71 matched_cone_positions.push_back(Eigen::Vector2f(cone.position.x, cone.position.y));
73 new_features.push_back(Eigen::Vector2f(cone.position.x, cone.position.y));
int associate_n_filter(const std::vector< common_lib::structures::Cone > &perception_map, Eigen::VectorXf &_x_vector_, Eigen::MatrixXf &_p_matrix_, std::vector< int > &matched_ids, std::vector< Eigen::Vector2f > &matched_cone_positions, std::vector< Eigen::Vector2f > &new_features, ObservationModel *observation_model) const override
normalized distance gate (closest unmatched landmark)
Eigen::MatrixXf get_state_to_observation_matrix(const Eigen::VectorXf &expected_state, const unsigned int landmark_index, const unsigned int state_size) const
Get the state to observation matrix of the observation model (H in LaTeX documentation)