11 #include <gtsam/geometry/EssentialMatrix.h>
52 template<
class CALIBRATION>
62 virtual gtsam::NonlinearFactor::shared_ptr
clone()
const {
64 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
68 virtual void print(
const std::string& s =
"",
69 const KeyFormatter& keyFormatter = DefaultKeyFormatter)
const {
71 std::cout <<
" EssentialMatrixFactor with measurements\n ("
72 << vA_.transpose() <<
")' and (" << vB_.transpose() <<
")'"
80 error << E.
error(vA_, vB_, H);
112 Base(model, key1, key2) {
127 template<
class CALIBRATION>
130 Base(model, key1, key2) {
132 Point2 p1 = K->calibrate(pA);
134 pn_ = K->calibrate(pB);
135 f_ = 0.5 * (K->fx() + K->fy());
139 virtual gtsam::NonlinearFactor::shared_ptr
clone()
const {
141 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
145 virtual void print(
const std::string& s =
"",
146 const KeyFormatter& keyFormatter = DefaultKeyFormatter)
const {
148 std::cout <<
" EssentialMatrixFactor2 with measurements\n ("
149 << dP1_.
vector().transpose() <<
")' and (" << pn_.
vector().transpose()
150 <<
")'" << std::endl;
159 boost::optional<Matrix&> DE = boost::none, boost::optional<Matrix&> Dd =
184 Matrix D_1T2_dir, DdP2_rot, DP2_point, Dpn_dP2;
193 DdP2_E << DdP2_rot, -DP2_point * d * D_1T2_dir;
194 *DE = f_ * Dpn_dP2 * DdP2_E;
199 *Dd = -f_ * (Dpn_dP2 * (DP2_point * _1T2.vector()));
202 Point2 reprojectionError = pn - pn_;
203 return f_ * reprojectionError.
vector();
246 template<
class CALIBRATION>
253 virtual gtsam::NonlinearFactor::shared_ptr
clone()
const {
255 gtsam::NonlinearFactor::shared_ptr(
new This(*
this)));
259 virtual void print(
const std::string& s =
"",
260 const KeyFormatter& keyFormatter = DefaultKeyFormatter)
const {
262 std::cout <<
" EssentialMatrixFactor3 with rotation " << cRb_ << std::endl;
271 boost::optional<Matrix&> DE = boost::none, boost::optional<Matrix&> Dd =
280 Matrix D_e_cameraE, D_cameraE_E;
283 *DE = D_e_cameraE * D_cameraE_E;
EssentialMatrixFactor(Key key, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)
Constructor.
Definition: EssentialMatrixFactor.h:53
Non-linear factor base classes.
Vector evaluateError(const EssentialMatrix &E, boost::optional< Matrix & > H=boost::none) const
vector of errors returns 1D vector
Definition: EssentialMatrixFactor.h:77
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition: EssentialMatrixFactor.h:259
A wrapper around scalar providing Lie compatibility.
const Point3 & point3(boost::optional< Matrix & > H=boost::none) const
Return unit-norm Point3.
Definition: Unit3.h:96
EssentialMatrixFactor3(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const Rot3 &cRb, const SharedNoiseModel &model)
Constructor.
Definition: EssentialMatrixFactor.h:232
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition: EssentialMatrixFactor.h:68
LieScalar is a wrapper around double to allow it to be a Lie type.
Definition: LieScalar.h:29
EssentialMatrix rotate(const Rot3 &cRb, boost::optional< Matrix & > HE=boost::none, boost::optional< Matrix & > HR=boost::none) const
Given essential matrix E in camera frame B, convert to body frame C.
Definition: EssentialMatrix.cpp:80
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:247
Point3 unrotate(const Point3 &p, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const
rotate point from world to rotated frame
Definition: Rot3.cpp:102
EssentialMatrixFactor(Key key, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model)
Constructor.
Definition: EssentialMatrixFactor.h:37
Vector evaluateError(const EssentialMatrix &E, const LieScalar &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:270
virtual gtsam::NonlinearFactor::shared_ptr clone() const
Definition: EssentialMatrixFactor.h:139
Binary factor that optimizes for E and inverse depth d: assumes measurement in image 2 is perfect...
Definition: EssentialMatrixFactor.h:90
virtual gtsam::NonlinearFactor::shared_ptr clone() const
Definition: EssentialMatrixFactor.h:253
Vector evaluateError(const EssentialMatrix &E, const LieScalar &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:158
Vector3 vector() const
return vectorized form (column-wise)
Definition: Point3.h:196
A convenient base class for creating your own NoiseModelFactor with 2 variables.
Definition: NonlinearFactor.h:423
This is the base class for all factor types.
Definition: Factor.h:51
static Vector Homogeneous(const Point2 &p)
Static function to convert Point2 to homogeneous coordinates.
Definition: EssentialMatrix.h:34
Vector2 vector() const
return vectorized form (column-wise). TODO: why does this function exist?
Definition: Point2.h:216
EssentialMatrixFactor2(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)
Constructor.
Definition: EssentialMatrixFactor.h:128
static Point2 project_to_camera(const Point3 &P, boost::optional< Matrix & > Dpoint=boost::none)
projects a 3-dimensional point in camera coordinates into the camera and returns a 2-dimensional poin...
Definition: PinholeCamera.h:272
virtual gtsam::NonlinearFactor::shared_ptr clone() const
Definition: EssentialMatrixFactor.h:62
EssentialMatrixFactor2(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model)
Constructor.
Definition: EssentialMatrixFactor.h:110
Factor that evaluates epipolar error p'Ep for given essential matrix.
Definition: EssentialMatrixFactor.h:21
An essential matrix is like a Pose3, except with translation up to scale It is named after the 3*3 ma...
Definition: EssentialMatrix.h:23
Key key1() const
methods to retrieve both keys
Definition: NonlinearFactor.h:455
size_t Key
Integer nonlinear key type.
Definition: types.h:59
double y() const
get y
Definition: Point2.h:213
A convenient base class for creating your own NoiseModelFactor with 1 variable.
Definition: NonlinearFactor.h:354
const Unit3 & direction() const
Direction.
Definition: EssentialMatrix.h:106
double x() const
get x
Definition: Point2.h:210
virtual double error(const Values &c) const
Calculate the error of the factor.
Definition: NonlinearFactor.h:281
double error(const Vector &vA, const Vector &vB, boost::optional< Matrix & > H=boost::none) const
epipolar error, algebraic
Definition: EssentialMatrix.cpp:113
A simple camera class with a Cal3_S2 calibration.
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Print.
Definition: NonlinearFactor.h:231
noiseModel::Base::shared_ptr SharedNoiseModel
Note, deliberately not in noiseModel namespace.
Definition: NoiseModel.h:884
const Rot3 & rotation() const
Rotation.
Definition: EssentialMatrix.h:101
Nonlinear factor base class.
Definition: NonlinearFactor.h:54
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition: EssentialMatrixFactor.h:145
Binary factor that optimizes for E and inverse depth d: assumes measurement in image 2 is perfect...
Definition: EssentialMatrixFactor.h:214
boost::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: types.h:62