Some header refactoring
parent
ac16b7e1d4
commit
c9536523bf
|
|
@ -46,22 +46,17 @@ class SmartFactorBase: public NonlinearFactor {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
/// shorthand for base class type
|
||||||
|
typedef NonlinearFactor Base;
|
||||||
|
|
||||||
|
/// shorthand for this class
|
||||||
|
typedef SmartFactorBase<CAMERA, D> This;
|
||||||
|
|
||||||
|
// Figure out the measurement type and dimension
|
||||||
typedef typename CAMERA::Measurement Z;
|
typedef typename CAMERA::Measurement Z;
|
||||||
|
|
||||||
/**
|
|
||||||
* 2D measurement and noise model for each of the m views
|
|
||||||
* We keep a copy of measurements for I/O and computing the error.
|
|
||||||
* The order is kept the same as the keys that we use to create the factor.
|
|
||||||
*/
|
|
||||||
std::vector<Z> measured_;
|
|
||||||
|
|
||||||
SharedIsotropic noiseModel_;
|
|
||||||
|
|
||||||
boost::optional<Pose3> body_P_sensor_; ///< The pose of the sensor in the body frame (one for all cameras)
|
|
||||||
|
|
||||||
static const int ZDim = traits<Z>::dimension; ///< Measurement dimension
|
static const int ZDim = traits<Z>::dimension; ///< Measurement dimension
|
||||||
|
|
||||||
/// Definitions for blocks of F
|
// Definitions for blocks of F
|
||||||
typedef Eigen::Matrix<double, ZDim, D> Matrix2D; // F
|
typedef Eigen::Matrix<double, ZDim, D> Matrix2D; // F
|
||||||
typedef Eigen::Matrix<double, D, ZDim> MatrixD2; // F'
|
typedef Eigen::Matrix<double, D, ZDim> MatrixD2; // F'
|
||||||
typedef std::pair<Key, Matrix2D> KeyMatrix2D; // Fblocks
|
typedef std::pair<Key, Matrix2D> KeyMatrix2D; // Fblocks
|
||||||
|
|
@ -70,11 +65,39 @@ protected:
|
||||||
typedef Eigen::Matrix<double, D, 1> VectorD;
|
typedef Eigen::Matrix<double, D, 1> VectorD;
|
||||||
typedef Eigen::Matrix<double, ZDim, ZDim> Matrix2;
|
typedef Eigen::Matrix<double, ZDim, ZDim> Matrix2;
|
||||||
|
|
||||||
/// shorthand for base class type
|
/**
|
||||||
typedef NonlinearFactor Base;
|
* 2D measurement and noise model for each of the m views
|
||||||
|
* We keep a copy of measurements for I/O and computing the error.
|
||||||
|
* The order is kept the same as the keys that we use to create the factor.
|
||||||
|
*/
|
||||||
|
std::vector<Z> measured_;
|
||||||
|
|
||||||
/// shorthand for this class
|
/**
|
||||||
typedef SmartFactorBase<CAMERA, D> This;
|
* As of Feb 22, 2015, the noise model is the same for all measurements and
|
||||||
|
* is isotropic. This allows for moving most calculations of Schur complement
|
||||||
|
* etc to be moved to CameraSet very easily, and also agrees pragmatically
|
||||||
|
* with what is normally done.
|
||||||
|
*/
|
||||||
|
SharedIsotropic noiseModel_;
|
||||||
|
|
||||||
|
/// An optional sensor pose, in the body frame (one for all cameras)
|
||||||
|
/// This seems to make sense for a CameraTrack, not for a CameraSet
|
||||||
|
boost::optional<Pose3> body_P_sensor_;
|
||||||
|
|
||||||
|
// check that noise model is isotropic and the same
|
||||||
|
void maybeSetNoiseModel(const SharedNoiseModel& sharedNoiseModel) {
|
||||||
|
if (!sharedNoiseModel)
|
||||||
|
return;
|
||||||
|
SharedIsotropic sharedIsotropic = boost::dynamic_pointer_cast<
|
||||||
|
noiseModel::Isotropic>(sharedNoiseModel);
|
||||||
|
if (!sharedIsotropic)
|
||||||
|
throw std::runtime_error("SmartFactorBase: needs isotropic");
|
||||||
|
if (!noiseModel_)
|
||||||
|
noiseModel_ = sharedIsotropic;
|
||||||
|
else if (!sharedIsotropic->equals(*noiseModel_))
|
||||||
|
throw std::runtime_error(
|
||||||
|
"SmartFactorBase: cannot add measurements with different noise model");
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
@ -97,21 +120,6 @@ public:
|
||||||
virtual ~SmartFactorBase() {
|
virtual ~SmartFactorBase() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// check that noise model is isotropic and the same
|
|
||||||
void maybeSetNoiseModel(const SharedNoiseModel& sharedNoiseModel) {
|
|
||||||
if (!sharedNoiseModel)
|
|
||||||
return;
|
|
||||||
SharedIsotropic sharedIsotropic = boost::dynamic_pointer_cast<
|
|
||||||
noiseModel::Isotropic>(sharedNoiseModel);
|
|
||||||
if (!sharedIsotropic)
|
|
||||||
throw std::runtime_error("SmartFactorBase: needs isotropic");
|
|
||||||
if (!noiseModel_)
|
|
||||||
noiseModel_ = sharedIsotropic;
|
|
||||||
else if (!sharedIsotropic->equals(*noiseModel_))
|
|
||||||
throw std::runtime_error(
|
|
||||||
"SmartFactorBase: cannot add measurements with different noise model");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a new measurement and pose key
|
* Add a new measurement and pose key
|
||||||
* @param measured_i is the 2m dimensional projection of a single landmark
|
* @param measured_i is the 2m dimensional projection of a single landmark
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue