Wrap many SLAM classes
parent
25a2deb952
commit
43addb5ee9
|
@ -162,12 +162,79 @@ enum DegeneracyMode { IGNORE_DEGENERACY, ZERO_ON_DEGENERACY, HANDLE_INFINITY };
|
||||||
|
|
||||||
class SmartProjectionParams {
|
class SmartProjectionParams {
|
||||||
SmartProjectionParams();
|
SmartProjectionParams();
|
||||||
|
SmartProjectionParams(gtsam::LinearizationMode linMode = gtsam::LinearizationMode::HESSIAN,
|
||||||
|
gtsam::DegeneracyMode degMode = gtsam::DegeneracyMode::IGNORE_DEGENERACY, bool throwCheirality = false,
|
||||||
|
bool verboseCheirality = false, double retriangulationTh = 1e-5);
|
||||||
|
|
||||||
void setLinearizationMode(gtsam::LinearizationMode linMode);
|
void setLinearizationMode(gtsam::LinearizationMode linMode);
|
||||||
void setDegeneracyMode(gtsam::DegeneracyMode degMode);
|
void setDegeneracyMode(gtsam::DegeneracyMode degMode);
|
||||||
void setRankTolerance(double rankTol);
|
void setRankTolerance(double rankTol);
|
||||||
void setEnableEPI(bool enableEPI);
|
void setEnableEPI(bool enableEPI);
|
||||||
void setLandmarkDistanceThreshold(bool landmarkDistanceThreshold);
|
void setLandmarkDistanceThreshold(bool landmarkDistanceThreshold);
|
||||||
void setDynamicOutlierRejectionThreshold(bool dynOutRejectionThreshold);
|
void setDynamicOutlierRejectionThreshold(bool dynOutRejectionThreshold);
|
||||||
|
|
||||||
|
void print(const std::string& str = "") const;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <CAMERA = {gtsam::PinholeCamera<gtsam::Cal3_S2>}>
|
||||||
|
class SmartProjectionFactor : gtsam::NonlinearFactor {
|
||||||
|
SmartProjectionFactor();
|
||||||
|
|
||||||
|
SmartProjectionFactor(
|
||||||
|
const gtsam::noiseModel::Base* sharedNoiseModel,
|
||||||
|
const gtsam::SmartProjectionParams& params = gtsam::SmartProjectionParams());
|
||||||
|
|
||||||
|
void print(const std::string& s = "", const gtsam::KeyFormatter& keyFormatter =
|
||||||
|
gtsam::DefaultKeyFormatter) const;
|
||||||
|
bool equals(const gtsam::NonlinearFactor& p, double tol = 1e-9) const;
|
||||||
|
|
||||||
|
bool decideIfTriangulate(const gtsam::CameraSet<CAMERA>& cameras) const;
|
||||||
|
gtsam::TriangulationResult triangulateSafe(const gtsam::CameraSet<CAMERA>& cameras) const;
|
||||||
|
bool triangulateForLinearize(const gtsam::CameraSet<CAMERA>& cameras) const;
|
||||||
|
|
||||||
|
gtsam::HessianFactor createHessianFactor(
|
||||||
|
const gtsam::CameraSet<CAMERA>& cameras, const double lambda = 0.0,
|
||||||
|
bool diagonalDamping = false) const;
|
||||||
|
gtsam::JacobianFactor createJacobianQFactor(
|
||||||
|
const gtsam::CameraSet<CAMERA>& cameras, double lambda) const;
|
||||||
|
gtsam::JacobianFactor createJacobianQFactor(
|
||||||
|
const gtsam::Values& values, double lambda) const;
|
||||||
|
gtsam::JacobianFactor createJacobianSVDFactor(
|
||||||
|
const gtsam::CameraSet<CAMERA>& cameras, double lambda) const;
|
||||||
|
gtsam::HessianFactor linearizeToHessian(
|
||||||
|
const gtsam::Values& values, double lambda = 0.0) const;
|
||||||
|
gtsam::JacobianFactor linearizeToJacobian(
|
||||||
|
const gtsam::Values& values, double lambda = 0.0) const;
|
||||||
|
|
||||||
|
gtsam::GaussianFactor linearizeDamped(const gtsam::CameraSet<CAMERA>& cameras,
|
||||||
|
const double lambda = 0.0) const;
|
||||||
|
|
||||||
|
gtsam::GaussianFactor linearizeDamped(const gtsam::Values& values,
|
||||||
|
const double lambda = 0.0) const;
|
||||||
|
|
||||||
|
gtsam::GaussianFactor linearize(
|
||||||
|
const gtsam::Values& values) const;
|
||||||
|
|
||||||
|
bool triangulateAndComputeE(gtsam::Matrix& E, const gtsam::CameraSet<CAMERA>& cameras) const;
|
||||||
|
|
||||||
|
bool triangulateAndComputeE(gtsam::Matrix& E, const gtsam::Values& values) const;
|
||||||
|
|
||||||
|
gtsam::Vector reprojectionErrorAfterTriangulation(const gtsam::Values& values) const;
|
||||||
|
|
||||||
|
double totalReprojectionError(const gtsam::CameraSet<CAMERA>& cameras,
|
||||||
|
gtsam::Point3 externalPoint) const;
|
||||||
|
|
||||||
|
double error(const gtsam::Values& values) const;
|
||||||
|
|
||||||
|
gtsam::TriangulationResult point() const;
|
||||||
|
|
||||||
|
gtsam::TriangulationResult point(const gtsam::Values& values) const;
|
||||||
|
|
||||||
|
bool isValid() const;
|
||||||
|
bool isDegenerate() const;
|
||||||
|
bool isPointBehindCamera() const;
|
||||||
|
bool isOutlier() const;
|
||||||
|
bool isFarPoint() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include <gtsam/slam/SmartProjectionPoseFactor.h>
|
#include <gtsam/slam/SmartProjectionPoseFactor.h>
|
||||||
|
@ -198,6 +265,42 @@ virtual class SmartProjectionPoseFactor : gtsam::NonlinearFactor {
|
||||||
typedef gtsam::SmartProjectionPoseFactor<gtsam::Cal3_S2>
|
typedef gtsam::SmartProjectionPoseFactor<gtsam::Cal3_S2>
|
||||||
SmartProjectionPose3Factor;
|
SmartProjectionPose3Factor;
|
||||||
|
|
||||||
|
// WIP
|
||||||
|
// #include <gtsam/geometry/PinholeCamera.h>
|
||||||
|
// typedef gtsam::PinholeCamera<gtsam::Cal3_S2> PinholeCameraCal3_S2;
|
||||||
|
// #include <gtsam/slam/SmartProjectionRigFactor.h>
|
||||||
|
// template <CAMERA = {PinholeCameraCal3_S2}>
|
||||||
|
// class SmartProjectionRigFactor : gtsam::SmartProjectionFactor<CAMERA> {
|
||||||
|
// SmartProjectionRigFactor();
|
||||||
|
|
||||||
|
// SmartProjectionRigFactor(
|
||||||
|
// const gtsam::noiseModel::Base* sharedNoiseModel,
|
||||||
|
// const gtsam::CameraSet<CAMERA>& cameraRig,
|
||||||
|
// const gtsam::SmartProjectionParams& params = gtsam::SmartProjectionParams());
|
||||||
|
|
||||||
|
// void add(const CAMERA::Measurement& measured, const gtsam::Key& poseKey,
|
||||||
|
// const size_t& cameraId = 0);
|
||||||
|
|
||||||
|
// void add(const CAMERA::MeasurementVector& measurements, const gtsam::KeyVector& poseKeys,
|
||||||
|
// const gtsam::FastVector<size_t>& cameraIds = gtsam::FastVector<size_t>());
|
||||||
|
|
||||||
|
// const gtsam::KeyVector& nonUniqueKeys() const;
|
||||||
|
|
||||||
|
// const gtsam::CameraSet<CAMERA>& cameraRig() const;
|
||||||
|
|
||||||
|
// const gtsam::FastVector<size_t>& cameraIds() const;
|
||||||
|
|
||||||
|
// void print(
|
||||||
|
// const std::string& s = "",
|
||||||
|
// const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const;
|
||||||
|
|
||||||
|
// bool equals(const gtsam::NonlinearFactor& p, double tol = 1e-9) const;
|
||||||
|
|
||||||
|
// gtsam::CameraSet<CAMERA> cameras(const gtsam::Values& values) const;
|
||||||
|
|
||||||
|
// double error(const gtsam::Values& values) const;
|
||||||
|
// };
|
||||||
|
|
||||||
#include <gtsam/slam/StereoFactor.h>
|
#include <gtsam/slam/StereoFactor.h>
|
||||||
template <POSE, LANDMARK>
|
template <POSE, LANDMARK>
|
||||||
virtual class GenericStereoFactor : gtsam::NoiseModelFactor {
|
virtual class GenericStereoFactor : gtsam::NoiseModelFactor {
|
||||||
|
@ -227,11 +330,72 @@ virtual class GenericStereoFactor : gtsam::NoiseModelFactor {
|
||||||
typedef gtsam::GenericStereoFactor<gtsam::Pose3, gtsam::Point3>
|
typedef gtsam::GenericStereoFactor<gtsam::Pose3, gtsam::Point3>
|
||||||
GenericStereoFactor3D;
|
GenericStereoFactor3D;
|
||||||
|
|
||||||
|
#include <gtsam/slam/ReferenceFrameFactor.h>
|
||||||
|
template<LANDMARK, POSE>
|
||||||
|
class ReferenceFrameFactor : gtsam::NoiseModelFactor {
|
||||||
|
ReferenceFrameFactor(gtsam::Key globalKey, gtsam::Key transKey,
|
||||||
|
gtsam::Key localKey, const gtsam::noiseModel::Base* model);
|
||||||
|
|
||||||
|
gtsam::Vector evaluateError(const LANDMARK& global, const POSE& trans, const LANDMARK& local);
|
||||||
|
|
||||||
|
void print(const std::string& s="",
|
||||||
|
const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter);
|
||||||
|
};
|
||||||
|
|
||||||
|
#include <gtsam/slam/RotateFactor.h>
|
||||||
|
class RotateFactor : gtsam::NoiseModelFactor {
|
||||||
|
RotateFactor(gtsam::Key key, const gtsam::Rot3& P, const gtsam::Rot3& Z,
|
||||||
|
const gtsam::noiseModel::Base* model);
|
||||||
|
|
||||||
|
void print(const std::string& s = "",
|
||||||
|
const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const;
|
||||||
|
|
||||||
|
gtsam::Vector evaluateError(const gtsam::Rot3& R) const;
|
||||||
|
};
|
||||||
|
class RotateDirectionsFactor : gtsam::NoiseModelFactor {
|
||||||
|
RotateDirectionsFactor(gtsam::Key key, const gtsam::Unit3& i_p, const gtsam::Unit3& c_z,
|
||||||
|
const gtsam::noiseModel::Base* model);
|
||||||
|
|
||||||
|
static gtsam::Rot3 Initialize(const gtsam::Unit3& i_p, const gtsam::Unit3& c_z);
|
||||||
|
|
||||||
|
void print(const std::string& s = "",
|
||||||
|
const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const;
|
||||||
|
|
||||||
|
gtsam::Vector evaluateError(const gtsam::Rot3& iRc) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#include <gtsam/slam/OrientedPlane3Factor.h>
|
||||||
|
class OrientedPlane3Factor : gtsam::NoiseModelFactor {
|
||||||
|
OrientedPlane3Factor();
|
||||||
|
OrientedPlane3Factor(const gtsam::Vector& z, const gtsam::noiseModel::Gaussian* noiseModel,
|
||||||
|
gtsam::Key poseKey, gtsam::Key landmarkKey);
|
||||||
|
|
||||||
|
void print(const std::string& s = "OrientedPlane3Factor",
|
||||||
|
const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const;
|
||||||
|
|
||||||
|
gtsam::Vector evaluateError(
|
||||||
|
const gtsam::Pose3& pose, const gtsam::OrientedPlane3& plane) const;
|
||||||
|
};
|
||||||
|
class OrientedPlane3DirectionPrior : gtsam::NoiseModelFactor {
|
||||||
|
OrientedPlane3DirectionPrior();
|
||||||
|
OrientedPlane3DirectionPrior(gtsam::Key key, const gtsam::Vector& z,
|
||||||
|
const gtsam::noiseModel::Gaussian* noiseModel);
|
||||||
|
|
||||||
|
void print(const std::string& s = "OrientedPlane3DirectionPrior",
|
||||||
|
const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const;
|
||||||
|
|
||||||
|
bool equals(const gtsam::NonlinearFactor& expected, double tol = 1e-9) const;
|
||||||
|
|
||||||
|
gtsam::Vector evaluateError(const gtsam::OrientedPlane3& plane) const;
|
||||||
|
};
|
||||||
|
|
||||||
#include <gtsam/slam/PoseTranslationPrior.h>
|
#include <gtsam/slam/PoseTranslationPrior.h>
|
||||||
template <POSE>
|
template <POSE>
|
||||||
virtual class PoseTranslationPrior : gtsam::NoiseModelFactor {
|
virtual class PoseTranslationPrior : gtsam::NoiseModelFactor {
|
||||||
|
PoseTranslationPrior(size_t key, const POSE::Translation& measured,
|
||||||
|
const gtsam::noiseModel::Base* model);
|
||||||
PoseTranslationPrior(size_t key, const POSE& pose_z,
|
PoseTranslationPrior(size_t key, const POSE& pose_z,
|
||||||
const gtsam::noiseModel::Base* noiseModel);
|
const gtsam::noiseModel::Base* model);
|
||||||
POSE::Translation measured() const;
|
POSE::Translation measured() const;
|
||||||
|
|
||||||
// enabling serialization functionality
|
// enabling serialization functionality
|
||||||
|
@ -244,8 +408,10 @@ typedef gtsam::PoseTranslationPrior<gtsam::Pose3> PoseTranslationPrior3D;
|
||||||
#include <gtsam/slam/PoseRotationPrior.h>
|
#include <gtsam/slam/PoseRotationPrior.h>
|
||||||
template <POSE>
|
template <POSE>
|
||||||
virtual class PoseRotationPrior : gtsam::NoiseModelFactor {
|
virtual class PoseRotationPrior : gtsam::NoiseModelFactor {
|
||||||
|
PoseRotationPrior(size_t key, const POSE::Rotation& rot_z,
|
||||||
|
const gtsam::noiseModel::Base* model);
|
||||||
PoseRotationPrior(size_t key, const POSE& pose_z,
|
PoseRotationPrior(size_t key, const POSE& pose_z,
|
||||||
const gtsam::noiseModel::Base* noiseModel);
|
const gtsam::noiseModel::Base* model);
|
||||||
POSE::Rotation measured() const;
|
POSE::Rotation measured() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -404,6 +570,14 @@ gtsam::Rot3 FindKarcherMean(const gtsam::Rot3Vector& rotations);
|
||||||
gtsam::noiseModel::Isotropic* ConvertNoiseModel(gtsam::noiseModel::Base* model,
|
gtsam::noiseModel::Isotropic* ConvertNoiseModel(gtsam::noiseModel::Base* model,
|
||||||
size_t d);
|
size_t d);
|
||||||
|
|
||||||
|
template <T = {gtsam::Rot2, gtsam::Rot3, gtsam::SO3, gtsam::SO4, gtsam::Pose2, gtsam::Pose3}>
|
||||||
|
class FrobeniusPrior : gtsam::NoiseModelFactor {
|
||||||
|
FrobeniusPrior(gtsam::Key j, const gtsam::Matrix& M,
|
||||||
|
const gtsam::noiseModel::Base* model);
|
||||||
|
|
||||||
|
gtsam::Vector evaluateError(const T& g) const;
|
||||||
|
};
|
||||||
|
|
||||||
template <T = {gtsam::Rot2, gtsam::Rot3, gtsam::SO3, gtsam::SO4, gtsam::Pose2, gtsam::Pose3}>
|
template <T = {gtsam::Rot2, gtsam::Rot3, gtsam::SO3, gtsam::SO4, gtsam::Pose2, gtsam::Pose3}>
|
||||||
virtual class FrobeniusFactor : gtsam::NoiseModelFactor {
|
virtual class FrobeniusFactor : gtsam::NoiseModelFactor {
|
||||||
FrobeniusFactor(size_t key1, size_t key2);
|
FrobeniusFactor(size_t key1, size_t key2);
|
||||||
|
|
Loading…
Reference in New Issue