created SmartFactorParams class collecting common parameters in smartProjectionFactor and smartStereoProjectFactor classes. This largely reduced copy-paste. SmartStereoProjectionParams is now a typedef
parent
edcf94591d
commit
c1b00e28b1
|
|
@ -35,16 +35,6 @@
|
||||||
|
|
||||||
namespace gtsam {
|
namespace gtsam {
|
||||||
|
|
||||||
/// Linearization mode: what factor to linearize to
|
|
||||||
enum LinearizationMode {
|
|
||||||
HESSIAN, IMPLICIT_SCHUR, JACOBIAN_Q, JACOBIAN_SVD
|
|
||||||
};
|
|
||||||
|
|
||||||
/// How to manage degeneracy
|
|
||||||
enum DegeneracyMode {
|
|
||||||
IGNORE_DEGENERACY, ZERO_ON_DEGENERACY, HANDLE_INFINITY
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Base class for smart factors
|
* @brief Base class for smart factors
|
||||||
* This base class has no internal point, but it has a measurement, noise model
|
* This base class has no internal point, but it has a measurement, noise model
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,134 @@
|
||||||
|
/* ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
|
||||||
|
* Atlanta, Georgia 30332-0415
|
||||||
|
* All Rights Reserved
|
||||||
|
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
|
||||||
|
|
||||||
|
* See LICENSE for the license information
|
||||||
|
|
||||||
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file SmartFactorParams
|
||||||
|
* @brief Collect common parameters for SmartProjection and SmartStereoProjection factors
|
||||||
|
* @author Luca Carlone
|
||||||
|
* @author Zsolt Kira
|
||||||
|
* @author Frank Dellaert
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <gtsam/geometry/triangulation.h>
|
||||||
|
|
||||||
|
namespace gtsam {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SmartFactorParams: parameters and (linearization/degeneracy) modes for SmartProjection and SmartStereoProjection factors
|
||||||
|
*/
|
||||||
|
/// Linearization mode: what factor to linearize to
|
||||||
|
enum LinearizationMode {
|
||||||
|
HESSIAN, IMPLICIT_SCHUR, JACOBIAN_Q, JACOBIAN_SVD
|
||||||
|
};
|
||||||
|
|
||||||
|
/// How to manage degeneracy
|
||||||
|
enum DegeneracyMode {
|
||||||
|
IGNORE_DEGENERACY, ZERO_ON_DEGENERACY, HANDLE_INFINITY
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parameters for the smart (stereo) projection factors
|
||||||
|
*/
|
||||||
|
struct GTSAM_EXPORT SmartProjectionParams {
|
||||||
|
|
||||||
|
LinearizationMode linearizationMode; ///< How to linearize the factor
|
||||||
|
DegeneracyMode degeneracyMode; ///< How to linearize the factor
|
||||||
|
|
||||||
|
/// @name Parameters governing the triangulation
|
||||||
|
/// @{
|
||||||
|
TriangulationParameters triangulation;
|
||||||
|
double retriangulationThreshold; ///< threshold to decide whether to re-triangulate
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// @name Parameters governing how triangulation result is treated
|
||||||
|
/// @{
|
||||||
|
bool throwCheirality; ///< If true, re-throws Cheirality exceptions (default: false)
|
||||||
|
bool verboseCheirality; ///< If true, prints text for Cheirality exceptions (default: false)
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
SmartProjectionParams(LinearizationMode linMode = HESSIAN,
|
||||||
|
DegeneracyMode degMode = IGNORE_DEGENERACY, bool throwCheirality = false,
|
||||||
|
bool verboseCheirality = false, double retriangulationTh = 1e-5) :
|
||||||
|
linearizationMode(linMode), degeneracyMode(degMode), retriangulationThreshold(
|
||||||
|
retriangulationTh), throwCheirality(throwCheirality), verboseCheirality(
|
||||||
|
verboseCheirality) {
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~SmartProjectionParams() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void print(const std::string& str) const {
|
||||||
|
std::cout << "linearizationMode: " << linearizationMode << "\n";
|
||||||
|
std::cout << " degeneracyMode: " << degeneracyMode << "\n";
|
||||||
|
std::cout << triangulation << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get class variables
|
||||||
|
LinearizationMode getLinearizationMode() const {
|
||||||
|
return linearizationMode;
|
||||||
|
}
|
||||||
|
DegeneracyMode getDegeneracyMode() const {
|
||||||
|
return degeneracyMode;
|
||||||
|
}
|
||||||
|
TriangulationParameters getTriangulationParameters() const {
|
||||||
|
return triangulation;
|
||||||
|
}
|
||||||
|
bool getVerboseCheirality() const {
|
||||||
|
return verboseCheirality;
|
||||||
|
}
|
||||||
|
bool getThrowCheirality() const {
|
||||||
|
return throwCheirality;
|
||||||
|
}
|
||||||
|
double getRetriangulationThreshold() const {
|
||||||
|
return retriangulationThreshold;
|
||||||
|
}
|
||||||
|
// set class variables
|
||||||
|
void setLinearizationMode(LinearizationMode linMode) {
|
||||||
|
linearizationMode = linMode;
|
||||||
|
}
|
||||||
|
void setDegeneracyMode(DegeneracyMode degMode) {
|
||||||
|
degeneracyMode = degMode;
|
||||||
|
}
|
||||||
|
void setRetriangulationThreshold(double retriangulationTh) {
|
||||||
|
retriangulationThreshold = retriangulationTh;
|
||||||
|
}
|
||||||
|
void setRankTolerance(double rankTol) {
|
||||||
|
triangulation.rankTolerance = rankTol;
|
||||||
|
}
|
||||||
|
void setEnableEPI(bool enableEPI) {
|
||||||
|
triangulation.enableEPI = enableEPI;
|
||||||
|
}
|
||||||
|
void setLandmarkDistanceThreshold(double landmarkDistanceThreshold) {
|
||||||
|
triangulation.landmarkDistanceThreshold = landmarkDistanceThreshold;
|
||||||
|
}
|
||||||
|
void setDynamicOutlierRejectionThreshold(double dynOutRejectionThreshold) {
|
||||||
|
triangulation.dynamicOutlierRejectionThreshold = dynOutRejectionThreshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
/// Serialization function
|
||||||
|
friend class boost::serialization::access;
|
||||||
|
template<class ARCHIVE>
|
||||||
|
void serialize(ARCHIVE & ar, const unsigned int version) {
|
||||||
|
ar & BOOST_SERIALIZATION_NVP(linearizationMode);
|
||||||
|
ar & BOOST_SERIALIZATION_NVP(degeneracyMode);
|
||||||
|
ar & BOOST_SERIALIZATION_NVP(triangulation);
|
||||||
|
ar & BOOST_SERIALIZATION_NVP(retriangulationThreshold);
|
||||||
|
ar & BOOST_SERIALIZATION_NVP(throwCheirality);
|
||||||
|
ar & BOOST_SERIALIZATION_NVP(verboseCheirality);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // \ namespace gtsam
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <gtsam/slam/SmartFactorBase.h>
|
#include <gtsam/slam/SmartFactorBase.h>
|
||||||
|
#include <gtsam/slam/SmartFactorParams.h>
|
||||||
|
|
||||||
#include <gtsam/geometry/triangulation.h>
|
#include <gtsam/geometry/triangulation.h>
|
||||||
#include <gtsam/inference/Symbol.h>
|
#include <gtsam/inference/Symbol.h>
|
||||||
|
|
@ -31,99 +32,6 @@
|
||||||
|
|
||||||
namespace gtsam {
|
namespace gtsam {
|
||||||
|
|
||||||
/*
|
|
||||||
* Parameters for the smart projection factors
|
|
||||||
*/
|
|
||||||
struct GTSAM_EXPORT SmartProjectionParams {
|
|
||||||
|
|
||||||
LinearizationMode linearizationMode; ///< How to linearize the factor
|
|
||||||
DegeneracyMode degeneracyMode; ///< How to linearize the factor
|
|
||||||
|
|
||||||
/// @name Parameters governing the triangulation
|
|
||||||
/// @{
|
|
||||||
TriangulationParameters triangulation;
|
|
||||||
double retriangulationThreshold; ///< threshold to decide whether to re-triangulate
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
/// @name Parameters governing how triangulation result is treated
|
|
||||||
/// @{
|
|
||||||
bool throwCheirality; ///< If true, re-throws Cheirality exceptions (default: false)
|
|
||||||
bool verboseCheirality; ///< If true, prints text for Cheirality exceptions (default: false)
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
// Constructor
|
|
||||||
SmartProjectionParams(LinearizationMode linMode = HESSIAN,
|
|
||||||
DegeneracyMode degMode = IGNORE_DEGENERACY, bool throwCheirality = false,
|
|
||||||
bool verboseCheirality = false, double retriangulationTh = 1e-5) :
|
|
||||||
linearizationMode(linMode), degeneracyMode(degMode), retriangulationThreshold(
|
|
||||||
retriangulationTh), throwCheirality(throwCheirality), verboseCheirality(
|
|
||||||
verboseCheirality) {
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~SmartProjectionParams() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void print(const std::string& str) const {
|
|
||||||
std::cout << "linearizationMode: " << linearizationMode << "\n";
|
|
||||||
std::cout << " degeneracyMode: " << degeneracyMode << "\n";
|
|
||||||
std::cout << triangulation << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
LinearizationMode getLinearizationMode() const {
|
|
||||||
return linearizationMode;
|
|
||||||
}
|
|
||||||
DegeneracyMode getDegeneracyMode() const {
|
|
||||||
return degeneracyMode;
|
|
||||||
}
|
|
||||||
TriangulationParameters getTriangulationParameters() const {
|
|
||||||
return triangulation;
|
|
||||||
}
|
|
||||||
bool getVerboseCheirality() const {
|
|
||||||
return verboseCheirality;
|
|
||||||
}
|
|
||||||
bool getThrowCheirality() const {
|
|
||||||
return throwCheirality;
|
|
||||||
}
|
|
||||||
double getRetriangulationThreshold() const {
|
|
||||||
return retriangulationThreshold;
|
|
||||||
}
|
|
||||||
void setLinearizationMode(LinearizationMode linMode) {
|
|
||||||
linearizationMode = linMode;
|
|
||||||
}
|
|
||||||
void setRetriangulationThreshold(double retriangulationTh) {
|
|
||||||
retriangulationThreshold = retriangulationTh;
|
|
||||||
}
|
|
||||||
void setDegeneracyMode(DegeneracyMode degMode) {
|
|
||||||
degeneracyMode = degMode;
|
|
||||||
}
|
|
||||||
void setRankTolerance(double rankTol) {
|
|
||||||
triangulation.rankTolerance = rankTol;
|
|
||||||
}
|
|
||||||
void setEnableEPI(bool enableEPI) {
|
|
||||||
triangulation.enableEPI = enableEPI;
|
|
||||||
}
|
|
||||||
void setLandmarkDistanceThreshold(double landmarkDistanceThreshold) {
|
|
||||||
triangulation.landmarkDistanceThreshold = landmarkDistanceThreshold;
|
|
||||||
}
|
|
||||||
void setDynamicOutlierRejectionThreshold(double dynOutRejectionThreshold) {
|
|
||||||
triangulation.dynamicOutlierRejectionThreshold = dynOutRejectionThreshold;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
/// Serialization function
|
|
||||||
friend class boost::serialization::access;
|
|
||||||
template<class ARCHIVE>
|
|
||||||
void serialize(ARCHIVE & ar, const unsigned int version) {
|
|
||||||
ar & BOOST_SERIALIZATION_NVP(linearizationMode);
|
|
||||||
ar & BOOST_SERIALIZATION_NVP(degeneracyMode);
|
|
||||||
ar & BOOST_SERIALIZATION_NVP(triangulation);
|
|
||||||
ar & BOOST_SERIALIZATION_NVP(retriangulationThreshold);
|
|
||||||
ar & BOOST_SERIALIZATION_NVP(throwCheirality);
|
|
||||||
ar & BOOST_SERIALIZATION_NVP(verboseCheirality);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SmartProjectionFactor: triangulates point and keeps an estimate of it around.
|
* SmartProjectionFactor: triangulates point and keeps an estimate of it around.
|
||||||
* This factor operates with monocular cameras, where a camera is expected to
|
* This factor operates with monocular cameras, where a camera is expected to
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <gtsam/slam/SmartFactorBase.h>
|
#include <gtsam/slam/SmartFactorBase.h>
|
||||||
|
#include <gtsam/slam/SmartFactorParams.h>
|
||||||
|
|
||||||
#include <gtsam/geometry/triangulation.h>
|
#include <gtsam/geometry/triangulation.h>
|
||||||
#include <gtsam/geometry/Pose3.h>
|
#include <gtsam/geometry/Pose3.h>
|
||||||
|
|
@ -35,87 +36,10 @@
|
||||||
|
|
||||||
namespace gtsam {
|
namespace gtsam {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parameters for the smart stereo projection factors
|
* Parameters for the smart stereo projection factors (identical to the SmartProjectionParams)
|
||||||
*/
|
*/
|
||||||
struct GTSAM_EXPORT SmartStereoProjectionParams {
|
typedef SmartProjectionParams SmartStereoProjectionParams;
|
||||||
|
|
||||||
LinearizationMode linearizationMode; ///< How to linearize the factor
|
|
||||||
DegeneracyMode degeneracyMode; ///< How to linearize the factor
|
|
||||||
|
|
||||||
/// @name Parameters governing the triangulation
|
|
||||||
/// @{
|
|
||||||
TriangulationParameters triangulation;
|
|
||||||
double retriangulationThreshold; ///< threshold to decide whether to re-triangulate
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
/// @name Parameters governing how triangulation result is treated
|
|
||||||
/// @{
|
|
||||||
bool throwCheirality; ///< If true, re-throws Cheirality exceptions (default: false)
|
|
||||||
bool verboseCheirality; ///< If true, prints text for Cheirality exceptions (default: false)
|
|
||||||
/// @}
|
|
||||||
|
|
||||||
|
|
||||||
/// Constructor
|
|
||||||
SmartStereoProjectionParams(LinearizationMode linMode = HESSIAN,
|
|
||||||
DegeneracyMode degMode = IGNORE_DEGENERACY, bool throwCheirality = false,
|
|
||||||
bool verboseCheirality = false) :
|
|
||||||
linearizationMode(linMode), degeneracyMode(degMode), retriangulationThreshold(
|
|
||||||
1e-5), throwCheirality(throwCheirality), verboseCheirality(
|
|
||||||
verboseCheirality) {
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~SmartStereoProjectionParams() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void print(const std::string& str) const {
|
|
||||||
std::cout << "linearizationMode: " << linearizationMode << "\n";
|
|
||||||
std::cout << " degeneracyMode: " << degeneracyMode << "\n";
|
|
||||||
std::cout << triangulation << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get class variables
|
|
||||||
LinearizationMode getLinearizationMode() const {
|
|
||||||
return linearizationMode;
|
|
||||||
}
|
|
||||||
DegeneracyMode getDegeneracyMode() const {
|
|
||||||
return degeneracyMode;
|
|
||||||
}
|
|
||||||
TriangulationParameters getTriangulationParameters() const {
|
|
||||||
return triangulation;
|
|
||||||
}
|
|
||||||
bool getVerboseCheirality() const {
|
|
||||||
return verboseCheirality;
|
|
||||||
}
|
|
||||||
bool getThrowCheirality() const {
|
|
||||||
return throwCheirality;
|
|
||||||
}
|
|
||||||
double getRetriangulationThreshold() const {
|
|
||||||
return retriangulationThreshold;
|
|
||||||
}
|
|
||||||
// set class variables
|
|
||||||
void setLinearizationMode(LinearizationMode linMode) {
|
|
||||||
linearizationMode = linMode;
|
|
||||||
}
|
|
||||||
void setDegeneracyMode(DegeneracyMode degMode) {
|
|
||||||
degeneracyMode = degMode;
|
|
||||||
}
|
|
||||||
void setRetriangulationThreshold(double retriangulationTh) {
|
|
||||||
retriangulationThreshold = retriangulationTh;
|
|
||||||
}
|
|
||||||
void setRankTolerance(double rankTol) {
|
|
||||||
triangulation.rankTolerance = rankTol;
|
|
||||||
}
|
|
||||||
void setEnableEPI(bool enableEPI) {
|
|
||||||
triangulation.enableEPI = enableEPI;
|
|
||||||
}
|
|
||||||
void setLandmarkDistanceThreshold(double landmarkDistanceThreshold) {
|
|
||||||
triangulation.landmarkDistanceThreshold = landmarkDistanceThreshold;
|
|
||||||
}
|
|
||||||
void setDynamicOutlierRejectionThreshold(double dynOutRejectionThreshold) {
|
|
||||||
triangulation.dynamicOutlierRejectionThreshold = dynOutRejectionThreshold;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SmartStereoProjectionFactor: triangulates point and keeps an estimate of it around.
|
* SmartStereoProjectionFactor: triangulates point and keeps an estimate of it around.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue