gtsam 4.1.1
gtsam
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 More...
 
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. More...
 
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. More...
 
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

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
inlinevirtual

print

Parameters
soptional string naming the factor
keyFormatteroptional 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>
static 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 
)
inlinestatic

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: