gtsam_points
Loading...
Searching...
No Matches
integrated_matching_cost_factor.hpp
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2021 Kenji Koide (k.koide@aist.go.jp)
3
4#pragma once
5
6#include <gtsam/linear/GaussianFactor.h>
7#include <gtsam/nonlinear/NonlinearFactor.h>
8
9#include <memory>
10#include <gtsam/inference/Key.h>
11#include <gtsam/geometry/Pose3.h>
12#include <gtsam_points/util/gtsam_migration.hpp>
13
14namespace gtsam_points {
15
19class IntegratedMatchingCostFactor : public gtsam::NonlinearFactor {
20public:
21 GTSAM_MAKE_ALIGNED_OPERATOR_NEW
22 using shared_ptr = gtsam_points::shared_ptr<IntegratedMatchingCostFactor>;
23
29 IntegratedMatchingCostFactor(gtsam::Key target_key, gtsam::Key source_key);
30
36 IntegratedMatchingCostFactor(const gtsam::Pose3& fixed_target_pose, gtsam::Key source_key);
37
38 virtual ~IntegratedMatchingCostFactor() override;
39
40 virtual size_t dim() const override { return 6; }
41
43 virtual void print(const std::string& s = "", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const override;
44
47 virtual double error(const gtsam::Values& values) const override;
48 virtual gtsam::GaussianFactor::shared_ptr linearize(const gtsam::Values& values) const override;
49
50 const Eigen::Isometry3d& get_fixed_target_pose() const { return fixed_target_pose; }
51
52public:
53 Eigen::Isometry3d calc_delta(const gtsam::Values& values) const;
54
60 virtual size_t memory_usage() const;
61
66 virtual void update_correspondences(const Eigen::Isometry3d& delta) const = 0;
67
77 virtual double evaluate(
78 const Eigen::Isometry3d& delta,
79 Eigen::Matrix<double, 6, 6>* H_target = nullptr,
80 Eigen::Matrix<double, 6, 6>* H_source = nullptr,
81 Eigen::Matrix<double, 6, 6>* H_target_source = nullptr,
82 Eigen::Matrix<double, 6, 1>* b_target = nullptr,
83 Eigen::Matrix<double, 6, 1>* b_source = nullptr) const = 0;
84
85protected:
86 bool is_binary;
87 Eigen::Isometry3d fixed_target_pose;
88};
89} // namespace gtsam_points
Abstraction of LSQ-based scan matching constraints between point clouds.
Definition integrated_matching_cost_factor.hpp:19
virtual size_t memory_usage() const
Calculate the memory usage of this factor.
IntegratedMatchingCostFactor(const gtsam::Pose3 &fixed_target_pose, gtsam::Key source_key)
Create a unary matching cost factor between a fixed target pose and an active source pose.
virtual void update_correspondences(const Eigen::Isometry3d &delta) const =0
Update point correspondences.
virtual double error(const gtsam::Values &values) const override
virtual void print(const std::string &s="", const gtsam::KeyFormatter &keyFormatter=gtsam::DefaultKeyFormatter) const override
Print the factor information.
virtual double evaluate(const Eigen::Isometry3d &delta, Eigen::Matrix< double, 6, 6 > *H_target=nullptr, Eigen::Matrix< double, 6, 6 > *H_source=nullptr, Eigen::Matrix< double, 6, 6 > *H_target_source=nullptr, Eigen::Matrix< double, 6, 1 > *b_target=nullptr, Eigen::Matrix< double, 6, 1 > *b_source=nullptr) const =0
Evaluate the matching cost.
IntegratedMatchingCostFactor(gtsam::Key target_key, gtsam::Key source_key)
Create a binary matching cost factor between target and source poses.