32 template<
typename Calibration>
105 const Point3& upVector,
const Calibration& K = Calibration()) {
106 return PinholeCamera(Base::LookatPose(eye, target, upVector), K);
113 typedef Eigen::Matrix<double, DimK, 6> MatrixK6;
115 *H1 << I_6x6, MatrixK6::Zero();
116 typedef Eigen::Matrix<double, 6, DimK> Matrix6K;
117 typedef Eigen::Matrix<double, DimK, DimK> MatrixK;
119 *H2 << Matrix6K::Zero(), MatrixK::Identity();
131 K_ = Calibration(v.tail<DimK>());
144 bool equals(
const Base &camera,
double tol = 1e-9)
const {
150 void print(
const std::string& s =
"PinholeCamera")
const {
152 K_.print(s +
".calibration");
171 H->template block<6, 6>(0, 0) = I_6x6;
195 typedef Eigen::Matrix<double, dimension, 1> VectorK6;
199 if ((
size_t) d.size() == 6)
203 calibration().retract(d.tail(calibration().dim())));
210 d.template tail<DimK>() = calibration().localCoordinates(T2.
calibration());
223 typedef Eigen::Matrix<double, 2, DimK> Matrix2K;
228 template<
class POINT>
233 Eigen::Matrix<double, 2, DimK> Dcal;
234 Point2 pi = Base::project(pw, Dcamera ? &Dpose : 0, Dpoint,
235 Dcamera ? &Dcal : 0);
237 *Dcamera << Dpose, Dcal;
244 return _project2(pw, Dcamera, Dpoint);
250 return _project2(pw, Dcamera, Dpoint);
261 double result = this->pose().
range(point, Dcamera ? &Dpose_ : 0, Dpoint);
263 *Dcamera << Dpose_, Eigen::Matrix<double, 1, DimK>::Zero();
275 double result = this->pose().
range(pose, Dcamera ? &Dpose_ : 0, Dpose);
277 *Dcamera << Dpose_, Eigen::Matrix<double, 1, DimK>::Zero();
286 template<
class CalibrationB>
290 Matrix16 Dcamera_, Dother_;
291 double result = this->pose().
range(camera.
pose(), Dcamera ? &Dcamera_ : 0,
292 Dother ? &Dother_ : 0);
294 *Dcamera << Dcamera_, Eigen::Matrix<double, 1, DimK>::Zero();
298 Dother->template block<1, 6>(0, 0) = Dother_;
311 return range(camera.
pose(), Dcamera, Dother);
317 friend class boost::serialization::access;
318 template<
class Archive>
319 void serialize(Archive & ar,
const unsigned int ) {
321 & boost::serialization::make_nvp(
"PinholeBaseK",
322 boost::serialization::base_object<Base>(*
this));
323 ar & BOOST_SERIALIZATION_NVP(K_);
330 template <
typename Calibration>
334 template <
typename Calibration>
339 template <
typename Calibration,
typename T>
void print(const std::string &s="PinholeCamera") const
print
Definition: PinholeCamera.h:150
Point2 project2(const Point3 &pw, OptionalJacobian< 2, dimension > Dcamera=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none) const
project a 3D point from world coordinates into the image
Definition: PinholeCamera.h:242
Definition: CalibratedCamera.h:240
Represents a 3D point on a unit sphere.
Definition: Unit3.h:42
Definition: BearingRange.h:38
double range(const CalibratedCamera &camera, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const
Calculate range to a calibrated camera.
Definition: PinholeCamera.h:308
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition: Matrix.cpp:140
static size_t Dim()
Definition: PinholeCamera.h:191
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition: OptionalJacobian.h:39
Pinhole camera with known calibration.
double range(const Pose3 &pose, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dpose=boost::none) const
Calculate range to another pose.
Definition: PinholeCamera.h:272
static PinholeCamera Level(const Calibration &K, const Pose2 &pose2, double height)
Create a level camera at the given 2D pose and height.
Definition: PinholeCamera.h:85
PinholeCamera(const Pose3 &pose, const Calibration &K)
constructor with pose and calibration
Definition: PinholeCamera.h:70
size_t dim() const
Definition: PinholeCamera.h:186
PinholeCamera(const Vector &v)
Init from vector, can be 6D (default calibration) or dim.
Definition: PinholeCamera.h:128
double range(const Point3 &point, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 3 > Dpoint=boost::none) const
Calculate range to a landmark.
Definition: PinholeCamera.h:258
Both ManifoldTraits and Testable.
Definition: Manifold.h:120
const Calibration & calibration() const
return calibration
Definition: PinholeCamera.h:177
Point2 project2(const Unit3 &pw, OptionalJacobian< 2, dimension > Dcamera=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const
project a point at infinity from world coordinates into the image
Definition: PinholeCamera.h:248
PinholeCamera()
default constructor
Definition: PinholeCamera.h:61
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition: concepts.h:30
Definition: PinholeCamera.h:33
PinholeCamera retract(const Vector &d) const
move a cameras according to d
Definition: PinholeCamera.h:198
VectorK6 localCoordinates(const PinholeCamera &T2) const
return canonical coordinate
Definition: PinholeCamera.h:207
PinholeCamera(const Vector &v, const Vector &K)
Init from Vector and calibration.
Definition: PinholeCamera.h:135
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition: Manifold.h:164
static PinholeCamera Lookat(const Point3 &eye, const Point3 &target, const Point3 &upVector, const Calibration &K=Calibration())
Create a camera at the given eye position looking at a target point in the scene with the specified u...
Definition: PinholeCamera.h:104
double range(const PinholeCamera< CalibrationB > &camera, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 6+CalibrationB::dimension > Dother=boost::none) const
Calculate range to another camera.
Definition: PinholeCamera.h:287
Definition: BearingRange.h:123
Point2 _project2(const POINT &pw, OptionalJacobian< 2, dimension > Dcamera, OptionalJacobian< 2, FixedDimension< POINT >::value > Dpoint) const
Templated projection of a 3D point or a point at infinity into the image.
Definition: PinholeCamera.h:229
Point2 Measurement
Some classes template on either PinholeCamera or StereoCamera, and this typedef informs those classes...
Definition: PinholeCamera.h:41
const Pose3 & getPose(OptionalJacobian< 6, dimension > H) const
return pose, with derivative
Definition: PinholeCamera.h:168
const Pose3 & pose() const
return pose
Definition: PinholeCamera.h:163
static PinholeCamera identity()
for Canonical
Definition: PinholeCamera.h:215
Definition: PinholePose.h:34
double range(const Point3 &point, OptionalJacobian< 1, 6 > H1=boost::none, OptionalJacobian< 1, 3 > H2=boost::none) const
Calculate range to a landmark.
Definition: Pose3.cpp:339
PinholeCamera(const Pose3 &pose)
constructor with pose
Definition: PinholeCamera.h:65
TangentVector localCoordinates(const Class &g) const
localCoordinates as required by manifold concept: finds tangent vector between *this and g ...
Definition: Lie.h:138
const Pose3 & pose() const
return pose, constant version
Definition: CalibratedCamera.h:146
Class retract(const TangentVector &v) const
retract as required by manifold concept: applies v at *this
Definition: Lie.h:133
bool equals(const Base &camera, double tol=1e-9) const
assert equality up to a tolerance
Definition: PinholeCamera.h:144
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
static PinholeCamera Level(const Pose2 &pose2, double height)
PinholeCamera::level with default calibration.
Definition: PinholeCamera.h:91