15 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
17 using Base = gtsam::NoiseModelFactor2<gtsam::Pose3, gtsam::Vector3>;
20 RotateVector3Factor(gtsam::Key x, gtsam::Key v,
const gtsam::Vector3& local_v,
const gtsam::SharedNoiseModel& noise_model)
21 : Base(noise_model, x, v),
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;
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 {
38 gtsam::Vector3 v_ = x.rotation(H_x1).rotate(local_v, H_x2);
39 gtsam::Vector3 error = v_ - v;
46 (*H_v) = -gtsam::Matrix33::Identity();
52 gtsam::NonlinearFactor::shared_ptr clone()
const override {
return gtsam::NonlinearFactor::shared_ptr(
new RotateVector3Factor(*
this)); }
57 template <
class ARCHIVE>
58 void serialize(ARCHIVE& ar,
const unsigned int ) {
59 ar& boost::serialization::make_nvp(
"NoiseModelFactor2", boost::serialization::base_object<Base>(*
this));
60 ar& BOOST_SERIALIZATION_NVP(local_v);
64 gtsam::Vector3 local_v;