Loading...
Searching...
No Matches
gtsam::CameraSet< CAMERA > Class Template Reference

## Detailed Description

template<class CAMERA>
class gtsam::CameraSet< CAMERA >

A set of cameras, all with their own calibration.

Inheritance diagram for gtsam::CameraSet< CAMERA >:

## Public Member Functions

virtual | ~CameraSet ()=default
| Destructor.
virtual void | print (const std::string &s="") const
| print
bool | equals (const CameraSet &p, double tol=1e-9) const
| equals
template<class POINT>
ZVector | project2 (const POINT &point, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
| Project a point (possibly Unit3 at infinity), with derivatives Note that F is a sparse block-diagonal matrix, so instead of a large dense matrix this function returns the diagonal blocks.
template<class POINT>
Vector | reprojectionError (const POINT &point, const ZVector &measured, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
| Calculate vector [project2(point)-z] of re-projection errors.

## Static Public Member Functions

template<int N, int ND>
static SymmetricBlockMatrix | SchurComplement (const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)
| Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * E' * F g = F' * (b - E * P * E' * b) Fixed size version.
template<int N, int ND, int NDD>
static SymmetricBlockMatrix | SchurComplementAndRearrangeBlocks (const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &jacobianKeys, const KeyVector &hessianKeys)

Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * E' * F g = F' * (b - E * P * E' * b) In this version, we allow for the case where the keys in the Jacobian are organized differently from the keys in the output SymmetricBlockMatrix In particular: each diagonal block of the Jacobian F captures 2 poses (useful for rolling shutter and extrinsic calibration) such that F keeps the block structure that makes the Schur complement trick fast.

template<int N>
static SymmetricBlockMatrix | SchurComplement (const FBlocks &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)
| Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * E' * F g = F' * (b - E * P * E' * b) Fixed size version.
template<int N>
static void | ComputePointCovariance (Eigen::Matrix< double, N, N > &P, const Matrix &E, double lambda, bool diagonalDamping=false)
| Computes Point Covariance P, with lambda parameter.
static Matrix | PointCov (const Matrix &E, const double lambda=0.0, bool diagonalDamping=false)
| Computes Point Covariance P, with lambda parameter, dynamic version.
static SymmetricBlockMatrix | SchurComplement (const FBlocks &Fblocks, const Matrix &E, const Vector &b, const double lambda=0.0, bool diagonalDamping=false)
| Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix Dynamic version.
template<int N>
static void | UpdateSchurComplement (const FBlocks &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &allKeys, const KeyVector &keys, SymmetricBlockMatrix &augmentedHessian)
| Applies Schur complement (exploiting block structure) to get a smart factor on cameras, and adds the contribution of the smart factor to a pre-allocated augmented Hessian.

## Public Types

using | MatrixZD = Eigen::Matrix<double, ZDim, D>
| Definitions for blocks of F.
using | FBlocks = std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD>>

## Protected Types

using | Base = std::vector<CAMERA, typename Eigen::aligned_allocator<CAMERA>>
typedef CAMERA::Measurement | Z
| 2D measurement and noise model for each of the m views The order is kept the same as the keys that we use to create the factor.
typedef CAMERA::MeasurementVector | ZVector

## Static Protected Member Functions

static Vector | ErrorVector (const ZVector &predicted, const ZVector &measured)
| Make a vector of re-projection errors.

## Static Protected Attributes

static const int | D = traits<CAMERA>::dimension
| Camera dimension.
static const int | ZDim = traits<Z>::dimension
| Measurement dimension.

## Friends

class | boost::serialization::access
| Serialization function.

## Member Function Documentation

## print()

template<class CAMERA>

virtual void gtsam::CameraSet< CAMERA >::print | ( | const std::string & | s = "" | ) | const

inline virtual

print

Parameters

  s | optional string naming the factor
  keyFormatter | optional formatter useful for printing Symbols

Reimplemented in gtsam::PinholeSet< CAMERA >.

## project2()

template<class CAMERA>
template<class POINT>

ZVector gtsam::CameraSet< CAMERA >::project2 | ( | const POINT & | point,
|  | boost::optional< FBlocks & > | Fs = boost::none,
|  | boost::optional< Matrix & > | E = boost::none ) const

inline

Project a point (possibly Unit3 at infinity), with derivatives Note that F is a sparse block-diagonal matrix, so instead of a large dense matrix this function returns the diagonal blocks.

throws CheiralityException

## SchurComplementAndRearrangeBlocks()

template<class CAMERA>
template<int N, int ND, int NDD>

SymmetricBlockMatrix gtsam::CameraSet< CAMERA >::SchurComplementAndRearrangeBlocks | ( | const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > & | Fs,
|  | const Matrix & | E,
|  | const Eigen::Matrix< double, N, N > & | P,
|  | const Vector & | b,
|  | const KeyVector & | jacobianKeys,
|  | const KeyVector & | hessianKeys )

inline static

Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * E' * F g = F' * (b - E * P * E' * b) In this version, we allow for the case where the keys in the Jacobian are organized differently from the keys in the output SymmetricBlockMatrix In particular: each diagonal block of the Jacobian F captures 2 poses (useful for rolling shutter and extrinsic calibration) such that F keeps the block structure that makes the Schur complement trick fast.

N = 2 or 3 (point dimension), ND is the Jacobian block dimension, NDD is the Hessian block dimension

The documentation for this class was generated from the following file:

- /build/gtsam-gchP9J/gtsam-4.2.2+dfsg/gtsam/geometry/CameraSet.h