32 template<
typename Calibration>
42 typedef Point2Vector MeasurementVector;
106 const Point3& upVector,
const Calibration& K = Calibration()) {
114 typedef Eigen::Matrix<double, DimK, 6> MatrixK6;
116 *H1 << I_6x6, MatrixK6::Zero();
117 typedef Eigen::Matrix<double, 6, DimK> Matrix6K;
118 typedef Eigen::Matrix<double, DimK, DimK> MatrixK;
120 *H2 << Matrix6K::Zero(), MatrixK::Identity();
132 K_ = Calibration(v.tail<DimK>());
145 bool equals(
const Base &camera,
double tol = 1e-9)
const {
151 void print(
const std::string& s =
"PinholeCamera")
const override {
153 K_.print(s +
".calibration");
172 H->template block<6, 6>(0, 0) = I_6x6;
196 typedef Eigen::Matrix<double, dimension, 1> VectorK6;
200 if ((
size_t) d.size() == 6)
224 typedef Eigen::Matrix<double, 2, DimK> Matrix2K;
229 template<
class POINT>
235 Eigen::Matrix<double, 2, DimK> Dcal;
237 *Dcamera <<
Dpose, Dcal;
264 double result = this->
pose().
range(point, Dcamera ? &Dpose_ : 0, Dpoint);
266 *Dcamera << Dpose_, Eigen::Matrix<double, 1, DimK>::Zero();
278 double result = this->
pose().
range(pose, Dcamera ? &Dpose_ : 0, Dpose);
280 *Dcamera << Dpose_, Eigen::Matrix<double, 1, DimK>::Zero();
289 template<
class CalibrationB>
293 Matrix16 Dcamera_, Dother_;
294 double result = this->
pose().
range(camera.
pose(), Dcamera ? &Dcamera_ : 0,
295 Dother ? &Dother_ : 0);
297 *Dcamera << Dcamera_, Eigen::Matrix<double, 1, DimK>::Zero();
301 Dother->template block<1, 6>(0, 0) = Dother_;
314 return range(camera.
pose(), Dcamera, Dother);
324 return Eigen::Matrix<double,traits<Point2>::dimension,1>::Constant(2.0 * K_.fx());
329 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION 331 friend class boost::serialization::access;
332 template<
class Archive>
333 void serialize(Archive & ar,
const unsigned int ) {
335 & boost::serialization::make_nvp(
"PinholeBaseK",
336 boost::serialization::base_object<Base>(*
this));
337 ar & BOOST_SERIALIZATION_NVP(K_);
347 template <
typename Calibration>
351 template <
typename Calibration>
356 template <
typename Calibration,
typename T>
static Matrix23 Dpoint(const Point2 &pn, double d, const Matrix3 &Rt)
Pinhole camera with known calibration.
static PinholeCamera Level(const Calibration &K, const Pose2 &pose2, double height)
Definition: PinholeCamera.h:86
double range(const PinholeCamera< CalibrationB > &camera, OptionalJacobian< 1, dimension > Dcamera={}, OptionalJacobian< 1, 6+CalibrationB::dimension > Dother={}) const
Definition: PinholeCamera.h:290
double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself={}, OptionalJacobian< 1, 3 > Hpoint={}) const
PinholeCamera()
Definition: PinholeCamera.h:62
Both ManifoldTraits and Testable.
Definition: Manifold.h:117
Definition: CalibratedCamera.h:251
static PinholeCamera Lookat(const Point3 &eye, const Point3 &target, const Point3 &upVector, const Calibration &K=Calibration())
Definition: PinholeCamera.h:105
std::string serialize(const T &input)
serializes to a string
Definition: serialization.h:113
Definition: PinholePose.h:33
Matrix34 cameraProjectionMatrix() const
for Linear Triangulation
Definition: PinholeCamera.h:318
Definition: BearingRange.h:197
PinholeCamera(const Pose3 &pose, const Calibration &K)
Definition: PinholeCamera.h:71
Vector2 Point2
Definition: Point2.h:32
Point2 _project2(const POINT &pw, OptionalJacobian< 2, dimension > Dcamera, OptionalJacobian< 2, FixedDimension< POINT >::value > Dpoint) const
Definition: PinholeCamera.h:230
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition: Manifold.h:161
Point2 Measurement
Definition: PinholeCamera.h:41
const Calibration & calibration() const override
return calibration
Definition: PinholeCamera.h:178
static PinholeCamera Identity()
for Canonical
Definition: PinholeCamera.h:216
Point2 project2(const Unit3 &pw, OptionalJacobian< 2, dimension > Dcamera={}, OptionalJacobian< 2, 2 > Dpoint={}) const
project a point at infinity from world coordinates into the image
Definition: PinholeCamera.h:251
const Pose3 & pose() const
return pose
Definition: PinholeCamera.h:164
TangentVector localCoordinates(const Class &g) const
localCoordinates as required by manifold concept: finds tangent vector between *this and g ...
Definition: Lie.h:136
Represents a 3D point on a unit sphere.
Definition: Unit3.h:42
Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose={}, OptionalJacobian< 2, 3 > Dpoint={}, OptionalJacobian< 2, DimK > Dcal={}) const
project a 3D point from world coordinates into the image
Definition: PinholePose.h:112
PinholeCamera(const Vector &v)
Init from vector, can be 6D (default calibration) or dim.
Definition: PinholeCamera.h:129
const Pose3 & pose() const
return pose, constant version
Definition: CalibratedCamera.h:154
PinholeCamera(const Pose3 &pose)
Definition: PinholeCamera.h:66
Vector defaultErrorWhenTriangulatingBehindCamera() const
for Nonlinear Triangulation
Definition: PinholeCamera.h:323
static Pose3 LevelPose(const Pose2 &pose2, double height)
bool equals(const Base &camera, double tol=1e-9) const
assert equality up to a tolerance
Definition: PinholeCamera.h:145
Pose3 inverse() const
inverse transformation with derivatives
size_t dim() const
Definition: PinholeCamera.h:187
Definition: BearingRange.h:41
Definition: PinholeCamera.h:33
const Pose3 & getPose(OptionalJacobian< 6, dimension > H) const
return pose, with derivative
Definition: PinholeCamera.h:169
Definition: chartTesting.h:28
Definition: OptionalJacobian.h:38
PinholeCamera retract(const Vector &d) const
move a cameras according to d
Definition: PinholeCamera.h:199
static size_t Dim()
Definition: PinholeCamera.h:192
Class retract(const TangentVector &v) const
retract as required by manifold concept: applies v at *this
Definition: Lie.h:131
double range(const CalibratedCamera &camera, OptionalJacobian< 1, dimension > Dcamera={}, OptionalJacobian< 1, 6 > Dother={}) const
Definition: PinholeCamera.h:311
static Matrix26 Dpose(const Point2 &pn, double d)
VectorK6 localCoordinates(const PinholeCamera &T2) const
return canonical coordinate
Definition: PinholeCamera.h:208
static Pose3 LookatPose(const Point3 &eye, const Point3 &target, const Point3 &upVector)
double range(const Pose3 &pose, OptionalJacobian< 1, dimension > Dcamera={}, OptionalJacobian< 1, 6 > Dpose={}) const
Definition: PinholeCamera.h:275
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
Definition: types.h:284
Vector3 Point3
Definition: Point3.h:38
Point2 project2(const Point3 &pw, OptionalJacobian< 2, dimension > Dcamera={}, OptionalJacobian< 2, 3 > Dpoint={}) const
project a 3D point from world coordinates into the image
Definition: PinholeCamera.h:245
static PinholeCamera Level(const Pose2 &pose2, double height)
PinholeCamera::level with default calibration.
Definition: PinholeCamera.h:92
PinholeCamera(const Vector &v, const Vector &K)
Init from Vector and calibration.
Definition: PinholeCamera.h:136
double range(const Point3 &point, OptionalJacobian< 1, dimension > Dcamera={}, OptionalJacobian< 1, 3 > Dpoint={}) const
Definition: PinholeCamera.h:261
bool equals(const PinholeBase &camera, double tol=1e-9) const
assert equality up to a tolerance
virtual void print(const std::string &s="PinholeBase") const
print
void print(const std::string &s="PinholeCamera") const override
print
Definition: PinholeCamera.h:151