17 const Eigen::VectorXd& observations,
18 const Eigen::MatrixXd& covariance,
19 const Eigen::VectorXd& observation_confidences)
const {
20 const int num_observations = observations.size() / 2;
21 const int num_landmarks = landmarks.size() / 2;
23 Eigen::VectorXi associations =
24 Eigen::VectorXi::Constant(num_observations, -1);
26 std::priority_queue<std::tuple<double, unsigned int, unsigned int>,
27 std::vector<std::tuple<double, unsigned int, unsigned int>>,
TripleComparator>
30 double euclidean_distance;
31 for (
int i = 0; i < num_observations; ++i) {
36 for (
int j = 0; j < num_landmarks; ++j) {
37 euclidean_distance = std::hypot(observations(2 * i) - landmarks(2 * j),
38 observations(2 * i + 1) - landmarks(2 * j + 1));
40 distances.emplace(euclidean_distance, i, j);
45 std::set<unsigned int> associated_landmarks;
46 std::tuple<double, unsigned int, unsigned int> current_tuple;
47 while (!distances.empty()) {
48 current_tuple = distances.top();
51 if (associated_landmarks.find(std::get<2>(current_tuple)) == associated_landmarks.end() &&
52 associations(std::get<1>(current_tuple)) == -1) {
53 associations(std::get<1>(current_tuple)) = 2 * std::get<2>(current_tuple);
54 associated_landmarks.insert(std::get<2>(current_tuple));
Eigen::VectorXi associate(const Eigen::VectorXd &landmarks, const Eigen::VectorXd &observations, const Eigen::MatrixXd &covariance, const Eigen::VectorXd &observation_confidences) const override
This function associates the landmarks with the observations.