gtsam
Loading...
Searching...
No Matches
StereoCamera.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
17
18#pragma once
19
23
24namespace gtsam {
25
26class GTSAM_EXPORT StereoCheiralityException: public std::runtime_error {
27public:
28 StereoCheiralityException()
29 : StereoCheiralityException(std::numeric_limits<Key>::max()) {}
30
31 StereoCheiralityException(Key j)
32 : std::runtime_error("Stereo Cheirality Exception"),
33 j_(j) {}
34
35 Key nearbyVariable() const {
36 return j_;
37 }
38
39private:
40 Key j_;
41};
42
47class GTSAM_EXPORT StereoCamera {
48
49public:
50
56 using MeasurementVector = StereoPoint2Vector;
57
58private:
59 Pose3 leftCamPose_;
60 Cal3_S2Stereo::shared_ptr K_;
61
62public:
63
64 inline constexpr static auto dimension = 6;
65
68
71 K_(new Cal3_S2Stereo()) {
72 }
73
75 StereoCamera(const Pose3& leftCamPose, const Cal3_S2Stereo::shared_ptr K);
76
78 const Cal3_S2Stereo& calibration() const {
79 return *K_;
80 }
81
85
87 void print(const std::string& s = "") const {
88 leftCamPose_.print(s + ".camera.");
89 K_->print(s + ".calibration.");
90 }
91
93 bool equals(const StereoCamera &camera, double tol = 1e-9) const {
94 return leftCamPose_.equals(camera.leftCamPose_, tol)
95 && K_->equals(*camera.K_, tol);
96 }
97
101
103 inline size_t dim() const {
104 return 6;
105 }
106
108 static inline size_t Dim() {
109 return 6;
110 }
111
113 inline StereoCamera retract(const Vector& v) const {
114 return StereoCamera(pose().retract(v), K_);
115 }
116
118 inline Vector6 localCoordinates(const StereoCamera& t2) const {
119 return leftCamPose_.localCoordinates(t2.leftCamPose_);
120 }
121
125
127 const Pose3& pose() const {
128 return leftCamPose_;
129 }
130
132 double baseline() const {
133 return K_->baseline();
134 }
135
137 StereoPoint2 project(const Point3& point) const;
138
143 StereoPoint2 project2(const Point3& point, OptionalJacobian<3, 6> H1 =
144 {}, OptionalJacobian<3, 3> H2 = {}) const;
145
147 Point3 backproject(const StereoPoint2& z) const;
148
153 Point3 backproject2(const StereoPoint2& z,
154 OptionalJacobian<3, 6> H1 = {},
155 OptionalJacobian<3, 3> H2 = {}) const;
156
160
167 StereoPoint2 project(const Point3& point, OptionalJacobian<3, 6> H1,
168 OptionalJacobian<3, 3> H2 = {}, OptionalJacobian<3, 0> H3 =
169 {}) const;
170
173 return Eigen::Matrix<double,traits<Measurement>::dimension,1>::Constant(2.0 * K_->fx());
174 }
175
177
178private:
179
180#if GTSAM_ENABLE_BOOST_SERIALIZATION
181 friend class boost::serialization::access;
182 template<class Archive>
183 void serialize(Archive & ar, const unsigned int /*version*/) {
184 ar & BOOST_SERIALIZATION_NVP(leftCamPose_);
185 ar & BOOST_SERIALIZATION_NVP(K_);
186 }
187#endif
188
189};
190
191template<>
192struct traits<StereoCamera> : public internal::Manifold<StereoCamera> {
193};
194
195template<>
196struct traits<const StereoCamera> : public internal::Manifold<StereoCamera> {
197};
198}
The most common 5DOF 3D->2D calibration + Stereo baseline.
A 2D stereo point (uL,uR,v).
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
Point2_ project(const Point3_ &p_cam)
Expression version of PinholeBase::Project.
Definition expressions.h:134
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
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
The most common 5DOF 3D->2D calibration, stereo version.
Definition Cal3_S2Stereo.h:30
A 3D pose (R,t) : (Rot3,Point3).
Definition Pose3.h:42
A stereo camera class, parameterize by left camera pose and stereo calibration.
Definition StereoCamera.h:47
StereoCamera()
Default constructor allocates a calibration!
Definition StereoCamera.h:70
static size_t Dim()
Dimensionality of the tangent space.
Definition StereoCamera.h:108
void print(const std::string &s="") const
print
Definition StereoCamera.h:87
Vector6 localCoordinates(const StereoCamera &t2) const
Local coordinates of manifold neighborhood around current value.
Definition StereoCamera.h:118
bool equals(const StereoCamera &camera, double tol=1e-9) const
equals
Definition StereoCamera.h:93
size_t dim() const
Dimensionality of the tangent space.
Definition StereoCamera.h:103
StereoCamera retract(const Vector &v) const
Updates a with tangent space delta.
Definition StereoCamera.h:113
const Cal3_S2Stereo & calibration() const
Return shared pointer to calibration.
Definition StereoCamera.h:78
StereoPoint2 Measurement
Some classes template on either PinholeCamera or StereoCamera, and this typedef informs those classes...
Definition StereoCamera.h:55
double baseline() const
baseline
Definition StereoCamera.h:132
const Pose3 & pose() const
pose
Definition StereoCamera.h:127
Vector defaultErrorWhenTriangulatingBehindCamera() const
for Nonlinear Triangulation
Definition StereoCamera.h:172
A 2D stereo point, v will be same for rectified images.
Definition StereoPoint2.h:34