30 template<
class CAMERA>
58 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
61 using shared_ptr = std::shared_ptr<This>;
64 using NoiseModelFactor1<Point3>::evaluateError;
68 throwCheirality_(false), verboseCheirality_(false) {
83 Base(model, pointKey), camera_(camera), measured_(measured), throwCheirality_(
86 throw std::invalid_argument(
87 "TriangulationFactor must be created with " 89 +
"-dimensional noise model.");
97 gtsam::NonlinearFactor::shared_ptr
clone()
const override {
99 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
108 DefaultKeyFormatter)
const override {
109 std::cout << s <<
"TriangulationFactor,";
110 camera_.print(
"camera");
117 const This *e =
dynamic_cast<const This*
>(&p);
118 return e &&
Base::equals(p, tol) && this->camera_.equals(e->camera_, tol)
129 if (verboseCheirality_)
130 std::cout << e.what() <<
": Landmark " 131 << DefaultKeyFormatter(this->
key()) <<
" moved behind camera" 133 if (throwCheirality_)
135 return camera_.defaultErrorWhenTriangulatingBehindCamera();
152 return std::shared_ptr<JacobianFactor>();
155 if (Ab.
rows() == 0) {
156 std::vector<size_t> dimensions(1, 3);
166 this->noiseModel_->WhitenSystem(A, b);
171 return std::make_shared<JacobianFactor>(this->
keys_,
Ab);
191 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION 192 friend class boost::serialization::access; 194 template<
class ARCHIVE>
195 void serialize(ARCHIVE & ar,
const unsigned int ) {
196 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(
Base);
197 ar & BOOST_SERIALIZATION_NVP(camera_);
198 ar & BOOST_SERIALIZATION_NVP(measured_);
199 ar & BOOST_SERIALIZATION_NVP(throwCheirality_);
200 ar & BOOST_SERIALIZATION_NVP(verboseCheirality_);
Definition: NonlinearFactor.h:431
TriangulationFactor()
Default constructor.
Definition: TriangulationFactor.h:67
bool equals(const NonlinearFactor &f, double tol=1e-9) const override
TriangulationFactor< CAMERA > This
shorthand for this class
Definition: TriangulationFactor.h:44
Vector evaluateError(const Point3 &point, OptionalMatrixType H2) const override
Evaluate error h(x)-z and optionally derivatives.
Definition: TriangulationFactor.h:123
std::string serialize(const T &input)
serializes to a string
Definition: serialization.h:113
const Measurement measured_
2D measurement
Definition: TriangulationFactor.h:51
Definition: VerticalBlockMatrix.h:42
const ValueType at(Key j) const
Definition: Values-inl.h:204
DenseIndex rows() const
Row size.
Definition: VerticalBlockMatrix.h:115
TriangulationFactor(const CAMERA &camera, const Measurement &measured, const SharedNoiseModel &model, Key pointKey, bool throwCheirality=false, bool verboseCheirality=false)
Definition: TriangulationFactor.h:80
Key key() const
Definition: NonlinearFactor.h:582
Definition: NonlinearFactor.h:68
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Definition: TriangulationFactor.h:107
KeyVector keys_
The keys involved in this factor.
Definition: Factor.h:87
CAMERA Camera
CAMERA type.
Definition: TriangulationFactor.h:36
bool throwCheirality() const
Definition: TriangulationFactor.h:185
Definition: TriangulationFactor.h:31
VerticalBlockMatrix Ab
thread-safe (?) scratch memory for linearize
Definition: TriangulationFactor.h:140
#define OptionalNone
Definition: NonlinearFactor.h:49
std::shared_ptr< GaussianFactor > linearize(const Values &x) const override
Definition: TriangulationFactor.h:149
Matrix * OptionalMatrixType
Definition: NonlinearFactor.h:55
const bool verboseCheirality_
If true, prints text for Cheirality exceptions (default: false)
Definition: TriangulationFactor.h:55
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition: TriangulationFactor.h:97
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
const CAMERA camera_
CAMERA in which this landmark was seen.
Definition: TriangulationFactor.h:50
Calibrated camera for which only pose is unknown.
Definition: chartTesting.h:28
~TriangulationFactor() override
Definition: TriangulationFactor.h:93
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Non-linear factor base classes.
virtual bool active(const Values &) const
Definition: NonlinearFactor.h:141
const Measurement & measured() const
Definition: TriangulationFactor.h:175
Definition: CalibratedCamera.h:34
typename CAMERA::Measurement Measurement
shorthand for measurement type, e.g. Point2 or StereoPoint2
Definition: TriangulationFactor.h:47
Vector3 Point3
Definition: Point3.h:38
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition: TriangulationFactor.h:116
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:102
bool verboseCheirality() const
Definition: TriangulationFactor.h:180
noiseModel::Base::shared_ptr SharedNoiseModel
Definition: NoiseModel.h:741
const bool throwCheirality_
If true, rethrows Cheirality exceptions (default: false)
Definition: TriangulationFactor.h:54