GTSAM  4.0.2
C++ library for smoothing and mapping (SAM)
PoseTranslationPrior.h
Go to the documentation of this file.
1 
10 #pragma once
11 
12 #include <gtsam/geometry/concepts.h>
14 
15 namespace gtsam {
16 
20 template<class POSE>
22 public:
25  typedef POSE Pose;
26  typedef typename POSE::Translation Translation;
27  typedef typename POSE::Rotation Rotation;
28 
29  // Provide access to the Matrix& version of evaluateError:
30  using Base::evaluateError;
31 
32  GTSAM_CONCEPT_POSE_TYPE(Pose)
33  GTSAM_CONCEPT_GROUP_TYPE(Pose)
34  GTSAM_CONCEPT_LIE_TYPE(Translation)
35 
36 protected:
37 
38  Translation measured_;
39 
40 public:
41 
44 
46  PoseTranslationPrior(Key key, const Translation& measured, const noiseModel::Base::shared_ptr& model)
47  : Base(model, key), measured_(measured) {
48  }
49 
51  PoseTranslationPrior(Key key, const POSE& pose_z, const noiseModel::Base::shared_ptr& model)
52  : Base(model, key), measured_(pose_z.translation()) {
53  }
54 
55  ~PoseTranslationPrior() override {}
56 
57  const Translation& measured() const { return measured_; }
58 
60  gtsam::NonlinearFactor::shared_ptr clone() const override {
61  return std::static_pointer_cast<gtsam::NonlinearFactor>(
62  gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
63 
65  Vector evaluateError(const Pose& pose, OptionalMatrixType H) const override {
66  const Translation& newTrans = pose.translation();
67  const Rotation& R = pose.rotation();
68  const int tDim = traits<Translation>::GetDimension(newTrans);
69  const int xDim = traits<Pose>::GetDimension(pose);
70  if (H) {
71  *H = Matrix::Zero(tDim, xDim);
72  std::pair<size_t, size_t> transInterval = POSE::translationInterval();
73  (*H).middleCols(transInterval.first, tDim) = R.matrix();
74  }
75 
76  return traits<Translation>::Local(measured_, newTrans);
77  }
78 
80  bool equals(const NonlinearFactor& expected, double tol=1e-9) const override {
81  const This *e = dynamic_cast<const This*> (&expected);
82  return e != nullptr && Base::equals(*e, tol) && traits<Translation>::Equals(measured_, e->measured_, tol);
83  }
84 
86  void print(const std::string& s="", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
87  Base::print(s + "PoseTranslationPrior", keyFormatter);
88  traits<Translation>::Print(measured_, "Measured Translation");
89  }
90 
91 private:
92 
93 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION
94 
95  friend class boost::serialization::access;
96  template<class ARCHIVE>
97  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
98  // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
99  ar & boost::serialization::make_nvp("NoiseModelFactor1",
100  boost::serialization::base_object<Base>(*this));
101  ar & BOOST_SERIALIZATION_NVP(measured_);
102  }
103 #endif
104 
105 };
106 
107 } // \namespace gtsam
108 
109 
110 
111 
PoseTranslationPrior(Key key, const Translation &measured, const noiseModel::Base::shared_ptr &model)
Definition: PoseTranslationPrior.h:46
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
Definition: PoseTranslationPrior.h:80
Definition: NonlinearFactor.h:431
bool equals(const NonlinearFactor &f, double tol=1e-9) const override
std::string serialize(const T &input)
serializes to a string
Definition: serialization.h:113
Definition: Factor.h:69
virtual Vector evaluateError(const ValueTypes &... x, OptionalMatrixTypeT< ValueTypes >... H) const=0
Definition: Group.h:43
Key key() const
Definition: NonlinearFactor.h:582
Definition: NonlinearFactor.h:68
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Definition: PoseTranslationPrior.h:86
Definition: PoseTranslationPrior.h:21
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition: PoseTranslationPrior.h:60
Matrix * OptionalMatrixType
Definition: NonlinearFactor.h:55
PoseTranslationPrior(Key key, const POSE &pose_z, const noiseModel::Base::shared_ptr &model)
Definition: PoseTranslationPrior.h:51
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
Definition: chartTesting.h:28
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Non-linear factor base classes.
PoseTranslationPrior()
Definition: PoseTranslationPrior.h:43
Vector evaluateError(const Pose &pose, OptionalMatrixType H) const override
Definition: PoseTranslationPrior.h:65
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:102