Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
data_association.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <gtest/gtest_prod.h>
4
5#include <Eigen/Dense>
6#include <functional>
7#include <map>
8#include <memory>
9
12
27 // virtual bool valid_match(const float delta, const float distance_to_vehicle) const = 0;
28
32
33protected:
34 float get_max_landmark_distance() const;
35
36public:
51 virtual int associate_n_filter(const std::vector<common_lib::structures::Cone> &perception_map,
52 Eigen::VectorXf &_x_vector_, Eigen::MatrixXf &_p_matrix_,
53 std::vector<int> &matched_ids,
54 std::vector<Eigen::Vector2f> &matched_cone_positions,
55 std::vector<Eigen::Vector2f> &new_features,
56 ObservationModel *observation_model) const = 0;
57 explicit DataAssociationModel(float max_landmark_distance);
58
59 virtual ~DataAssociationModel() = default;
60};
61
72 // bool valid_match(const float delta, const float distance_to_vehicle) const override;
73
74public:
75 static float association_gate_;
76 static float new_landmark_gate_;
77
92 int associate_n_filter(const std::vector<common_lib::structures::Cone> &perception_map,
93 Eigen::VectorXf &_x_vector_, Eigen::MatrixXf &_p_matrix_,
94 std::vector<int> &matched_ids,
95 std::vector<Eigen::Vector2f> &matched_cone_positions,
96 std::vector<Eigen::Vector2f> &new_features,
97 ObservationModel *observation_model) const override;
98
104 explicit MaxLikelihood(float max_landmark_distance);
105
106 // FRIEND_TEST(DATA_ASSOCIATION_MODEL, VALID_MATCH_FUNC_PERFECT_MATCH);
107 // FRIEND_TEST(DATA_ASSOCIATION_MODEL, VALID_MATCH_FUNC_NEAR_MATCH);
108 // FRIEND_TEST(DATA_ASSOCIATION_MODEL, VALID_MATCH_FUNC_FAILED_MATCH);
109};
110
111const std::map<std::string,
112 std::function<std::shared_ptr<DataAssociationModel>(float max_landmark_distance)>,
113 std::less<>>
115 {"max_likelihood",
116 [](float max_landmark_distance) -> std::shared_ptr<DataAssociationModel> {
117 return std::make_shared<MaxLikelihood>(max_landmark_distance);
118 }}};
Data Association Method class, used to match observations to landmarks in the map.
DataAssociationModel()=default
virtual ~DataAssociationModel()=default
float max_landmark_distance_
Check if the observed landmark is a valid match to the expected landmark It depends on external param...
virtual 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 =0
Associate the observed landmarks to the expected landmarks and update the state vector and the covari...
float get_max_landmark_distance() const
Maximum Likelihood Method class, used to match observations to landmarks in the map with maximum like...
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)
static float new_landmark_gate_
normalized innovation squared gate
static float association_gate_
Observation Model class compiled of functions for observation model.
const std::map< std::string, std::function< std::shared_ptr< DataAssociationModel >(float max_landmark_distance)>, std::less<> > data_association_model_constructors