gtsam_points
Loading...
Searching...
No Matches
bundle_adjustment_factor_evm.hpp
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2021 Kenji Koide (k.koide@aist.go.jp)
3
4#pragma once
5
6#include <memory>
7#include <unordered_map>
8#include <gtsam/geometry/Point3.h>
9#include <gtsam/nonlinear/NonlinearFactor.h>
10#include <gtsam_points/util/gtsam_migration.hpp>
11#include <gtsam_points/factors/bundle_adjustment_factor.hpp>
12
13namespace gtsam_points {
14
15struct BALMFeature;
16
27public:
28 using shared_ptr = gtsam_points::shared_ptr<EVMBundleAdjustmentFactorBase>;
29
31 virtual ~EVMBundleAdjustmentFactorBase() override;
32 virtual size_t dim() const override { return 6; }
33
35 virtual void print(const std::string& s = "", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const override;
36
42 virtual void add(const gtsam::Point3& pt, const gtsam::Key& key) override;
43
48 virtual int num_points() const override { return points.size(); }
49
54 virtual void set_scale(double scale) override;
55
56protected:
57 template <int k>
58 double calc_eigenvalue(const std::vector<Eigen::Vector3d>& transed_points, Eigen::MatrixXd* H = nullptr, Eigen::MatrixXd* J = nullptr) const;
59
60 Eigen::MatrixXd calc_pose_derivatives(const std::vector<Eigen::Vector3d>& transed_points) const;
61
62 gtsam::GaussianFactor::shared_ptr compose_factor(const Eigen::MatrixXd& H, const Eigen::MatrixXd& J, double error) const;
63
64protected:
65 double error_scale;
66 std::vector<gtsam::Key> keys;
67 std::vector<gtsam::Point3> points;
68 std::unordered_map<gtsam::Key, int> key_index;
69};
70
75public:
76 using shared_ptr = gtsam_points::shared_ptr<PlaneEVMFactor>;
77
79 virtual ~PlaneEVMFactor() override;
80
82 virtual void print(const std::string& s = "", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const override;
83
84 virtual double error(const gtsam::Values& c) const override;
85 virtual gtsam::GaussianFactor::shared_ptr linearize(const gtsam::Values& c) const override;
86
87 // TODO: Add feature parameter extraction method
88};
89
94public:
95 using shared_ptr = gtsam_points::shared_ptr<EdgeEVMFactor>;
96
98 virtual ~EdgeEVMFactor() override;
99
101 virtual void print(const std::string& s = "", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const override;
102
103 virtual double error(const gtsam::Values& c) const override;
104 virtual gtsam::GaussianFactor::shared_ptr linearize(const gtsam::Values& c) const override;
105};
106} // namespace gtsam_points
Base class of range-based bundle adjustment factors.
Definition bundle_adjustment_factor.hpp:15
Bundle adjustment factor based on Eigenvalue minimization One EVMFactor represents one feature (plane...
Definition bundle_adjustment_factor_evm.hpp:26
virtual int num_points() const override
Number of points assigned to this factor.
Definition bundle_adjustment_factor_evm.hpp:48
virtual void add(const gtsam::Point3 &pt, const gtsam::Key &key) override
Assign a point to the factor.
virtual void print(const std::string &s="", const gtsam::KeyFormatter &keyFormatter=gtsam::DefaultKeyFormatter) const override
Print the factor information.
virtual void set_scale(double scale) override
Set a constant error scaling factor to boost the weight of the factor.
Edge EVM factor that minimizes lambda_0 + lambda_1.
Definition bundle_adjustment_factor_evm.hpp:93
virtual void print(const std::string &s="", const gtsam::KeyFormatter &keyFormatter=gtsam::DefaultKeyFormatter) const override
Print the factor information.
Plane EVM factor that minimizes lambda_0.
Definition bundle_adjustment_factor_evm.hpp:74
virtual void print(const std::string &s="", const gtsam::KeyFormatter &keyFormatter=gtsam::DefaultKeyFormatter) const override
Print the factor information.