gtsam_points
Loading...
Searching...
No Matches
rotate_vector3_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/geometry/Pose3.h>
7#include <gtsam/nonlinear/NonlinearFactor.h>
8#include <gtsam/nonlinear/ExpressionFactor.h>
9#include <gtsam_points/util/gtsam_migration.hpp>
10
11namespace gtsam_points {
12
13class RotateVector3Factor : public gtsam::NoiseModelFactor2<gtsam::Pose3, gtsam::Vector3> {
14public:
15 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
16
17 using Base = gtsam::NoiseModelFactor2<gtsam::Pose3, gtsam::Vector3>;
18
20 RotateVector3Factor(gtsam::Key x, gtsam::Key v, const gtsam::Vector3& local_v, const gtsam::SharedNoiseModel& noise_model)
21 : Base(noise_model, x, v),
22 local_v(local_v) {}
23
24 virtual ~RotateVector3Factor() {}
25
26 virtual void print(const std::string& s = "", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const override {
27 std::cout << s << "RotateVector3Factor";
28 std::cout << "(" << keyFormatter(this->keys()[0]) << ", " << keyFormatter(this->keys()[1]) << ")" << std::endl;
29 }
30
31 virtual gtsam::Vector evaluateError(
32 const gtsam::Pose3& x,
33 const gtsam::Vector3& v,
34 OptionalMatrixType H_x = NoneValue,
35 OptionalMatrixType H_v = NoneValue) const override {
36 gtsam::Matrix36 H_x1;
37 gtsam::Matrix33 H_x2;
38 gtsam::Vector3 v_ = x.rotation(H_x1).rotate(local_v, H_x2);
39 gtsam::Vector3 error = v_ - v;
40
41 if (H_x) {
42 (*H_x) = H_x2 * H_x1;
43 }
44
45 if (H_v) {
46 (*H_v) = -gtsam::Matrix33::Identity();
47 }
48
49 return error;
50 }
51
52 gtsam::NonlinearFactor::shared_ptr clone() const override { return gtsam::NonlinearFactor::shared_ptr(new RotateVector3Factor(*this)); }
53
54private:
57 template <class ARCHIVE>
58 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
59 ar& boost::serialization::make_nvp("NoiseModelFactor2", boost::serialization::base_object<Base>(*this));
60 ar& BOOST_SERIALIZATION_NVP(local_v);
61 }
62
63private:
64 gtsam::Vector3 local_v;
65};
66
67} // namespace gtsam_points
Definition rotate_vector3_factor.hpp:13
friend class boost::serialization::access
Definition rotate_vector3_factor.hpp:56