gtsam
Loading...
Searching...
No Matches
BearingFactor.h
Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
2
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4 * Atlanta, Georgia 30332-0415
5 * All Rights Reserved
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7
8 * See LICENSE for the license information
9
10 * -------------------------------------------------------------------------- */
11
18
19#pragma once
20
23
24namespace gtsam {
25
26// forward declaration of Bearing functor, assumed partially specified
27template <typename A1, typename A2>
28struct Bearing;
29
36template <typename A1, typename A2,
37 typename T = typename Bearing<A1, A2>::result_type>
39 : public NoiseModelFactorT<typename traits<T>::TangentVector, A1, A2> {
40 typedef BearingFactor<A1, A2, T> This;
41 using ErrorVector = typename traits<T>::TangentVector;
43
44 T measured_;
45
47 BearingFactor() = default;
48
50 BearingFactor(Key key1, Key key2, const T& measured,
51 const SharedNoiseModel& model)
52 : Base(model, key1, key2), measured_(measured) {}
53
55 gtsam::NonlinearFactor::shared_ptr clone() const override {
56 return std::static_pointer_cast<gtsam::NonlinearFactor>(
57 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
58 }
59
61 const T& measured() const { return measured_; }
62
64 void print(const std::string& s = "",
65 const KeyFormatter& kf = DefaultKeyFormatter) const override {
66 std::cout << s << "BearingFactor" << std::endl;
67 Base::print(s, kf);
68 traits<T>::Print(measured_, " measured: ");
69 }
70
72 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override {
73 const This* p = dynamic_cast<const This*>(&f);
74 return p != nullptr && Base::equals(f, tol) &&
75 traits<T>::Equals(measured_, p->measured_, tol);
76 }
77
79 ErrorVector evaluateError(const A1& a1, const A2& a2,
81 OptionalMatrixType H2 = OptionalNone) const override {
82 const T predicted = Bearing<A1, A2>()(a1, a2, H1, H2);
83 return -traits<T>::Local(predicted, measured_);
84 }
85
86 private:
87#if GTSAM_ENABLE_BOOST_SERIALIZATION
88 friend class boost::serialization::access;
90 template <class ARCHIVE>
91 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
92 ar& boost::serialization::make_nvp(
93 "NoiseModelFactor2", boost::serialization::base_object<Base>(*this));
94 ar& BOOST_SERIALIZATION_NVP(measured_);
95 }
96#endif
97}; // BearingFactor
98
100template <typename A1, typename A2, typename T>
101struct traits<BearingFactor<A1, A2, T> >
102 : public Testable<BearingFactor<A1, A2, T> > {};
103
104} // namespace gtsam
Arbitrary-arity Jacobian factor with compile-time block dimensions.
Base class for noise model factors with N variables.
#define OptionalNone
These typedefs and aliases will help with making the evaluateError interface independent of boost TOD...
Definition NonlinearFactor.h:51
Global functions in a separate testing namespace.
Definition chartTesting.h:28
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition Key.cpp:30
Matrix * OptionalMatrixType
This typedef will be used everywhere boost::optional<Matrix&> reference was used previously.
Definition NonlinearFactor.h:57
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
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:846
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:43
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:152
Definition BearingRange.h:36
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
NoiseModelFactorT()
Default Constructor for I/O.
Definition NoiseModelFactorN.h:257
Nonlinear factor base class.
Definition NonlinearFactor.h:70
Binary factor for a bearing measurement Works for any two types A1,A2 for which the functor Bearing<A...
Definition BearingFactor.h:39
bool equals(const NonlinearFactor &f, double tol=1e-9) const override
Check equality up to a tolerance.
Definition BearingFactor.h:72
void print(const std::string &s="", const KeyFormatter &kf=DefaultKeyFormatter) const override
print
Definition BearingFactor.h:64
const T & measured() const
Definition BearingFactor.h:61
ErrorVector evaluateError(const A1 &a1, const A2 &a2, OptionalMatrixType H1=OptionalNone, OptionalMatrixType H2=OptionalNone) const override
Evaluate the unwhitened bearing error and optional Jacobians.
Definition BearingFactor.h:79
BearingFactor(Key key1, Key key2, const T &measured, const SharedNoiseModel &model)
Construct from keys, a bearing measurement, and a noise model.
Definition BearingFactor.h:50
BearingFactor()=default
default constructor
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition BearingFactor.h:55