11 #include <gtsam/geometry/EssentialMatrix.h> 51 template<
class CALIBRATION>
61 virtual gtsam::NonlinearFactor::shared_ptr
clone()
const {
63 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
67 virtual void print(
const std::string& s =
"",
68 const KeyFormatter& keyFormatter = DefaultKeyFormatter)
const {
70 std::cout <<
" EssentialMatrixFactor with measurements\n (" 71 << vA_.transpose() <<
")' and (" << vB_.transpose() <<
")'" 79 error << E.
error(vA_, vB_, H);
110 Base(model, key1, key2), dP1_(
EssentialMatrix::Homogeneous(pA)), pn_(pB) {
123 template<
class CALIBRATION>
126 Base(model, key1, key2), dP1_(
127 EssentialMatrix::Homogeneous(K->calibrate(pA))), pn_(K->calibrate(pB)) {
128 f_ = 0.5 * (K->fx() + K->fy());
132 virtual gtsam::NonlinearFactor::shared_ptr
clone()
const {
134 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
138 virtual void print(
const std::string& s =
"",
139 const KeyFormatter& keyFormatter = DefaultKeyFormatter)
const {
141 std::cout <<
" EssentialMatrixFactor2 with measurements\n (" 142 << dP1_.transpose() <<
")' and (" << pn_.transpose()
143 <<
")'" << std::endl;
152 boost::optional<Matrix&> DE = boost::none, boost::optional<Matrix&> Dd =
177 Matrix D_1T2_dir, DdP2_rot, DP2_point;
188 DdP2_E << DdP2_rot, -DP2_point * d * D_1T2_dir;
189 *DE = f_ * Dpn_dP2 * DdP2_E;
194 *Dd = -f_ * (Dpn_dP2 * (DP2_point * _1T2));
197 Point2 reprojectionError = pn - pn_;
198 return f_ * reprojectionError;
241 template<
class CALIBRATION>
244 boost::shared_ptr<CALIBRATION> K) :
249 virtual gtsam::NonlinearFactor::shared_ptr
clone()
const {
251 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
255 virtual void print(
const std::string& s =
"",
256 const KeyFormatter& keyFormatter = DefaultKeyFormatter)
const {
258 std::cout <<
" EssentialMatrixFactor3 with rotation " << cRb_ << std::endl;
267 boost::optional<Matrix&> DE = boost::none, boost::optional<Matrix&> Dd =
276 Matrix D_e_cameraE, D_cameraE_E;
279 *DE = D_e_cameraE * D_cameraE_E;
Nonlinear factor base class.
Definition: NonlinearFactor.h:52
virtual Vector evaluateError(const X &x, boost::optional< Matrix & > H=boost::none) const =0
Override this method to finish implementing a unary factor.
This is the base class for all factor types.
Definition: Factor.h:51
static Point2 Project(const Point3 &pc, OptionalJacobian< 2, 3 > Dpoint=boost::none)
Project from 3D point in camera coordinates into image Does not throw a CheiralityException, even if pc behind image plane.
Definition: CalibratedCamera.cpp:88
EssentialMatrixFactor2(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model)
Constructor.
Definition: EssentialMatrixFactor.h:108
EssentialMatrixFactor3(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const Rot3 &cRb, const SharedNoiseModel &model)
Constructor.
Definition: EssentialMatrixFactor.h:227
noiseModel::Base::shared_ptr SharedNoiseModel
Note, deliberately not in noiseModel namespace.
Definition: NoiseModel.h:1072
virtual double error(const Values &c) const
Calculate the error of the factor.
Definition: NonlinearFactor.cpp:97
EssentialMatrix rotate(const Rot3 &cRb, OptionalJacobian< 5, 5 > HE=boost::none, OptionalJacobian< 5, 3 > HR=boost::none) const
Given essential matrix E in camera frame B, convert to body frame C.
Definition: EssentialMatrix.cpp:73
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition: EssentialMatrixFactor.h:255
Binary factor that optimizes for E and inverse depth d: assumes measurement in image 2 is perfect...
Definition: EssentialMatrixFactor.h:209
const Unit3 & direction() const
Direction.
Definition: EssentialMatrix.h:115
Point3 unrotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
rotate point from world to rotated frame
Definition: Rot3.cpp:134
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition: EssentialMatrixFactor.h:67
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Print.
Definition: NonlinearFactor.cpp:63
EssentialMatrixFactor(Key key, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)
Constructor.
Definition: EssentialMatrixFactor.h:52
virtual gtsam::NonlinearFactor::shared_ptr clone() const
Definition: EssentialMatrixFactor.h:249
Vector evaluateError(const EssentialMatrix &E, const double &d, boost::optional< Matrix & > DE=boost::none, boost::optional< Matrix & > Dd=boost::none) const
Override this method to finish implementing a binary factor.
Definition: EssentialMatrixFactor.h:151
Point3 point3(OptionalJacobian< 3, 2 > H=boost::none) const
Return unit-norm Point3.
Definition: Unit3.cpp:134
EssentialMatrixFactor(Key key, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model)
Constructor.
Definition: EssentialMatrixFactor.h:36
Vector evaluateError(const EssentialMatrix &E, const double &d, boost::optional< Matrix & > DE=boost::none, boost::optional< Matrix & > Dd=boost::none) const
Override this method to finish implementing a binary factor.
Definition: EssentialMatrixFactor.h:266
const Rot3 & rotation() const
Rotation.
Definition: EssentialMatrix.h:110
A convenient base class for creating your own NoiseModelFactor with 2 variables.
Definition: NonlinearFactor.h:345
An essential matrix is like a Pose3, except with translation up to scale It is named after the 3*3 ma...
Definition: EssentialMatrix.h:24
virtual gtsam::NonlinearFactor::shared_ptr clone() const
Definition: EssentialMatrixFactor.h:132
Vector evaluateError(const EssentialMatrix &E, boost::optional< Matrix & > H=boost::none) const
vector of errors returns 1D vector
Definition: EssentialMatrixFactor.h:76
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition: EssentialMatrixFactor.h:138
Binary factor that optimizes for E and inverse depth d: assumes measurement in image 2 is perfect...
Definition: EssentialMatrixFactor.h:89
EssentialMatrixFactor2(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)
Constructor.
Definition: EssentialMatrixFactor.h:124
A convenient base class for creating your own NoiseModelFactor with 1 variable.
Definition: NonlinearFactor.h:276
EssentialMatrixFactor3(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const Rot3 &cRb, const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)
Constructor.
Definition: EssentialMatrixFactor.h:242
Non-linear factor base classes.
A simple camera class with a Cal3_S2 calibration.
static Vector3 Homogeneous(const Point2 &p)
Static function to convert Point2 to homogeneous coordinates.
Definition: EssentialMatrix.h:38
virtual gtsam::NonlinearFactor::shared_ptr clone() const
Definition: EssentialMatrixFactor.h:61
double error(const Vector3 &vA, const Vector3 &vB, OptionalJacobian< 1, 5 > H=boost::none) const
epipolar error, algebraic
Definition: EssentialMatrix.cpp:104
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:57
Factor that evaluates epipolar error p'Ep for given essential matrix.
Definition: EssentialMatrixFactor.h:20
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
boost::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:33