11#include <gtsam/geometry/Unit3.h>
35 return Vector3(p.x(), p.y(), 1);
47 R_(aRb), t_(aTb), E_(t_.skew() * R_.
matrix()) {
53 OptionalJacobian<5, 2> H2 = {});
57 OptionalJacobian<5, 6> H = {});
60 template<
typename Engine>
73 GTSAM_EXPORT
void print(
const std::string& s =
"")
const;
77 return R_.equals(other.R_, tol)
78 && t_.equals(other.t_, tol);
85 inline constexpr static auto dimension = 5;
86 inline static size_t Dim() {
return dimension;}
87 inline size_t dim()
const {
return dimension;}
89 typedef OptionalJacobian<dimension, dimension> ChartJacobian;
93 return EssentialMatrix(R_.retract(xi.head<3>()), t_.retract(xi.tail<2>()));
98 auto v1 = R_.localCoordinates(other.R_);
99 auto v2 = t_.localCoordinates(other.t_);
131 return R_.unrotate(t_);
143 OptionalJacobian<3, 3> Dpoint = {})
const;
151 {}, OptionalJacobian<5, 3> HR = {})
const;
159 return E.rotate(cRb);
163 GTSAM_EXPORT
double error(
const Vector3& vA,
const Vector3& vB,
183#if GTSAM_ENABLE_BOOST_SERIALIZATION
185 friend class boost::serialization::access;
186 template<
class ARCHIVE>
187 void serialize(ARCHIVE & ar,
const unsigned int ) {
188 ar & BOOST_SERIALIZATION_NVP(R_);
189 ar & BOOST_SERIALIZATION_NVP(t_);
191 ar & boost::serialization::make_nvp(
"E11", E_(0, 0));
192 ar & boost::serialization::make_nvp(
"E12", E_(0, 1));
193 ar & boost::serialization::make_nvp(
"E13", E_(0, 2));
194 ar & boost::serialization::make_nvp(
"E21", E_(1, 0));
195 ar & boost::serialization::make_nvp(
"E22", E_(1, 1));
196 ar & boost::serialization::make_nvp(
"E23", E_(1, 2));
197 ar & boost::serialization::make_nvp(
"E31", E_(2, 0));
198 ar & boost::serialization::make_nvp(
"E32", E_(2, 1));
199 ar & boost::serialization::make_nvp(
"E33", E_(2, 2));
Base class and basic functions for Manifold types.
3D Pose manifold SO(3) x R^3 and group SE(3)
Global functions in a separate testing namespace.
Definition chartTesting.h:28
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:38
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:32
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
Both ManifoldTraits and Testable.
Definition Manifold.h:156
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:40
An essential matrix is like a Pose3, except with translation up to scale It is named after the 3*3 ma...
Definition EssentialMatrix.h:26
friend EssentialMatrix operator*(const Rot3 &cRb, const EssentialMatrix &E)
Given essential matrix E in camera frame B, convert to body frame C.
Definition EssentialMatrix.h:158
const Rot3 & rotation() const
Rotation.
Definition EssentialMatrix.h:110
Vector5 localCoordinates(const EssentialMatrix &other) const
Compute the coordinates in the tangent space.
Definition EssentialMatrix.h:97
bool equals(const EssentialMatrix &other, double tol=1e-8) const
assert equality up to a tolerance
Definition EssentialMatrix.h:76
EssentialMatrix()
Default constructor.
Definition EssentialMatrix.h:42
GTSAM_EXPORT friend std::istream & operator>>(std::istream &is, EssentialMatrix &E)
stream from stream
Definition EssentialMatrix.cpp:128
static GTSAM_EXPORT EssentialMatrix FromPose3(const Pose3 &_1P2_, OptionalJacobian< 5, 6 > H={})
Named constructor converting a Pose3 with scale to EssentialMatrix (no scale).
Definition EssentialMatrix.cpp:29
static EssentialMatrix Random(Engine &rng)
Random, using Rot3::Random and Unit3::Random.
Definition EssentialMatrix.h:61
static GTSAM_EXPORT EssentialMatrix FromRotationAndDirection(const Rot3 &aRb, const Unit3 &aTb, OptionalJacobian< 5, 3 > H1={}, OptionalJacobian< 5, 2 > H2={})
Named constructor with derivatives.
Definition EssentialMatrix.cpp:18
GTSAM_EXPORT EssentialMatrix rotate(const Rot3 &cRb, OptionalJacobian< 5, 5 > HE={}, OptionalJacobian< 5, 3 > HR={}) const
Given essential matrix E in camera frame B, convert to body frame C.
Definition EssentialMatrix.cpp:75
EssentialMatrix retract(const Vector5 &xi) const
Retract delta to manifold.
Definition EssentialMatrix.h:92
EssentialMatrix(const Rot3 &aRb, const Unit3 &aTb)
Construct from rotation and translation.
Definition EssentialMatrix.h:46
GTSAM_EXPORT void print(const std::string &s="") const
print with optional string
Definition EssentialMatrix.cpp:50
static Vector3 Homogeneous(const Point2 &p)
Static function to convert Point2 to homogeneous coordinates.
Definition EssentialMatrix.h:34
const Unit3 & epipole_a() const
Return epipole in image_a , as Unit3 to allow for infinity.
Definition EssentialMatrix.h:125
const Unit3 & direction() const
Direction.
Definition EssentialMatrix.h:115
Unit3 epipole_b() const
Return epipole in image_b, as Unit3 to allow for infinity.
Definition EssentialMatrix.h:130
GTSAM_EXPORT Point3 transformTo(const Point3 &p, OptionalJacobian< 3, 5 > DE={}, OptionalJacobian< 3, 3 > Dpoint={}) const
takes point in world coordinates and transforms it to pose with |t|==1
Definition EssentialMatrix.cpp:57
GTSAM_EXPORT double error(const Vector3 &vA, const Vector3 &vB, OptionalJacobian< 1, 5 > H={}) const
epipolar error, algebraic
Definition EssentialMatrix.cpp:106
GTSAM_EXPORT friend std::ostream & operator<<(std::ostream &os, const EssentialMatrix &E)
stream to stream
Definition EssentialMatrix.cpp:119
const Matrix3 & matrix() const
Return 3*3 matrix representation.
Definition EssentialMatrix.h:120
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:65
static Rot3 Random(std::mt19937 &rng)
Random, generates a random axis, then random angle [-pi,pi] Example: std::mt19937 engine(42); Unit3 ...
Definition Rot3.cpp:47
Represents a 3D point on a unit sphere.
Definition Unit3.h:44
static Unit3 Random(std::mt19937 &rng)
Random direction, using boost::uniform_on_sphere Example: std::mt19937 engine(42); Unit3 unit = Unit3...
Definition Unit3.cpp:55