got rid of second constructor
parent
c105aa4e1e
commit
2c2e43ee5b
|
@ -105,29 +105,6 @@ class SmartProjectionRigFactor : public SmartProjectionFactor<CAMERA> {
|
|||
"linearizationMode must be set to HESSIAN");
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param sharedNoiseModel isotropic noise model for the 2D feature
|
||||
* measurements
|
||||
* @param camera single camera (fixed poses wrt body and intrinsics)
|
||||
* @param params parameters for the smart projection factors
|
||||
*/
|
||||
SmartProjectionRigFactor(
|
||||
const SharedNoiseModel& sharedNoiseModel, const Camera& camera,
|
||||
const SmartProjectionParams& params = SmartProjectionParams())
|
||||
: Base(sharedNoiseModel, params) {
|
||||
// throw exception if configuration is not supported by this factor
|
||||
if (Base::params_.degeneracyMode != gtsam::ZERO_ON_DEGENERACY)
|
||||
throw std::runtime_error(
|
||||
"SmartProjectionRigFactor: "
|
||||
"degeneracyMode must be set to ZERO_ON_DEGENERACY");
|
||||
if (Base::params_.linearizationMode != gtsam::HESSIAN)
|
||||
throw std::runtime_error(
|
||||
"SmartProjectionRigFactor: "
|
||||
"linearizationMode must be set to HESSIAN");
|
||||
cameraRig_.push_back(camera);
|
||||
}
|
||||
|
||||
/** Virtual destructor */
|
||||
~SmartProjectionRigFactor() override = default;
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#include <iostream>
|
||||
|
||||
#include "smartFactorScenarios.h"
|
||||
#define DISABLE_TIMING
|
||||
//#define DISABLE_TIMING
|
||||
|
||||
using namespace boost::assign;
|
||||
using namespace std::placeholders;
|
||||
|
@ -110,17 +110,6 @@ TEST(SmartProjectionRigFactor, Constructor4) {
|
|||
factor1.add(measurement1, x1, cameraId1);
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(SmartProjectionRigFactor, Constructor5) {
|
||||
using namespace vanillaRig;
|
||||
SmartProjectionParams params2(
|
||||
gtsam::HESSIAN,
|
||||
gtsam::ZERO_ON_DEGENERACY); // only config that works with rig factors
|
||||
params2.setRankTolerance(rankTol);
|
||||
SmartRigFactor factor1(model, Camera(Pose3::identity(), sharedK), params2);
|
||||
factor1.add(measurement1, x1, cameraId1);
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(SmartProjectionRigFactor, Equals) {
|
||||
using namespace vanillaRig;
|
||||
|
@ -138,8 +127,8 @@ TEST(SmartProjectionRigFactor, Equals) {
|
|||
CHECK(assert_equal(*factor1, *factor2));
|
||||
|
||||
SmartRigFactor::shared_ptr factor3(
|
||||
new SmartRigFactor(model, Camera(Pose3::identity(), sharedK), params));
|
||||
factor3->add(measurement1, x1); // now use default
|
||||
new SmartRigFactor(model, cameraRig, params));
|
||||
factor3->add(measurement1, x1); // now use default camera ID
|
||||
|
||||
CHECK(assert_equal(*factor1, *factor3));
|
||||
}
|
||||
|
@ -152,7 +141,10 @@ TEST(SmartProjectionRigFactor, noiseless) {
|
|||
Point2 level_uv = level_camera.project(landmark1);
|
||||
Point2 level_uv_right = level_camera_right.project(landmark1);
|
||||
|
||||
SmartRigFactor factor(model, Camera(Pose3::identity(), sharedK), params);
|
||||
Cameras cameraRig; // single camera in the rig
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
|
||||
SmartRigFactor factor(model, cameraRig, params);
|
||||
factor.add(level_uv, x1); // both taken from the same camera
|
||||
factor.add(level_uv_right, x2);
|
||||
|
||||
|
@ -504,8 +496,11 @@ TEST(SmartProjectionRigFactor, Factors) {
|
|||
KeyVector views{x1, x2};
|
||||
FastVector<size_t> cameraIds{0, 0};
|
||||
|
||||
Cameras cameraRig; // single camera in the rig
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
|
||||
SmartRigFactor::shared_ptr smartFactor1 = boost::make_shared<SmartRigFactor>(
|
||||
model, Camera(Pose3::identity(), sharedK), params);
|
||||
model, cameraRig, params);
|
||||
smartFactor1->add(measurements_cam1,
|
||||
views); // we have a single camera so use default cameraIds
|
||||
|
||||
|
|
|
@ -109,28 +109,6 @@ class SmartProjectionPoseFactorRollingShutter
|
|||
"linearizationMode must be set to HESSIAN");
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param Isotropic measurement noise
|
||||
* @param camera single camera (fixed poses wrt body and intrinsics)
|
||||
* @param params internal parameters of the smart factors
|
||||
*/
|
||||
SmartProjectionPoseFactorRollingShutter(
|
||||
const SharedNoiseModel& sharedNoiseModel, const Camera& camera,
|
||||
const SmartProjectionParams& params = SmartProjectionParams())
|
||||
: Base(sharedNoiseModel, params) {
|
||||
// throw exception if configuration is not supported by this factor
|
||||
if (Base::params_.degeneracyMode != gtsam::ZERO_ON_DEGENERACY)
|
||||
throw std::runtime_error(
|
||||
"SmartProjectionRigFactor: "
|
||||
"degeneracyMode must be set to ZERO_ON_DEGENERACY");
|
||||
if (Base::params_.linearizationMode != gtsam::HESSIAN)
|
||||
throw std::runtime_error(
|
||||
"SmartProjectionRigFactor: "
|
||||
"linearizationMode must be set to HESSIAN");
|
||||
cameraRig_.push_back(camera);
|
||||
}
|
||||
|
||||
/** Virtual destructor */
|
||||
~SmartProjectionPoseFactorRollingShutter() override = default;
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#include <iostream>
|
||||
|
||||
#include "gtsam/slam/tests/smartFactorScenarios.h"
|
||||
#define DISABLE_TIMING
|
||||
//#define DISABLE_TIMING
|
||||
|
||||
using namespace gtsam;
|
||||
using namespace boost::assign;
|
||||
|
@ -87,22 +87,28 @@ typedef SmartProjectionPoseFactorRollingShutter<PinholePose<Cal3_S2>>
|
|||
/* ************************************************************************* */
|
||||
TEST(SmartProjectionPoseFactorRollingShutter, Constructor) {
|
||||
using namespace vanillaPoseRS;
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
SmartFactorRS::shared_ptr factor1(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(SmartProjectionPoseFactorRollingShutter, Constructor2) {
|
||||
using namespace vanillaPoseRS;
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
params.setRankTolerance(rankTol);
|
||||
SmartFactorRS factor1(model, Camera(Pose3::identity(), sharedK), params);
|
||||
SmartFactorRS factor1(model, cameraRig, params);
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(SmartProjectionPoseFactorRollingShutter, add) {
|
||||
using namespace vanillaPoseRS;
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
SmartFactorRS::shared_ptr factor1(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
factor1->add(measurement1, x1, x2, interp_factor);
|
||||
}
|
||||
|
||||
|
@ -226,7 +232,10 @@ TEST(SmartProjectionPoseFactorRollingShutter, noiselessErrorAndJacobians) {
|
|||
Point2 level_uv_right = cam2.project(landmark1);
|
||||
Pose3 body_P_sensorId = Pose3::identity();
|
||||
|
||||
SmartFactorRS factor(model, Camera(body_P_sensorId, sharedK), params);
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(body_P_sensorId, sharedK));
|
||||
|
||||
SmartFactorRS factor(model, cameraRig, params);
|
||||
factor.add(level_uv, x1, x2, interp_factor1);
|
||||
factor.add(level_uv_right, x2, x3, interp_factor2);
|
||||
|
||||
|
@ -301,7 +310,10 @@ TEST(SmartProjectionPoseFactorRollingShutter, noisyErrorAndJacobians) {
|
|||
Point2 level_uv_right = cam2.project(landmark1);
|
||||
Pose3 body_P_sensorNonId = body_P_sensor;
|
||||
|
||||
SmartFactorRS factor(model, Camera(body_P_sensorNonId, sharedK), params);
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(body_P_sensorNonId, sharedK));
|
||||
|
||||
SmartFactorRS factor(model, cameraRig, params);
|
||||
factor.add(level_uv, x1, x2, interp_factor1);
|
||||
factor.add(level_uv_right, x2, x3, interp_factor2);
|
||||
|
||||
|
@ -392,16 +404,19 @@ TEST(SmartProjectionPoseFactorRollingShutter, optimization_3poses) {
|
|||
interp_factors.push_back(interp_factor2);
|
||||
interp_factors.push_back(interp_factor3);
|
||||
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor1(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor1->add(measurements_lmk1, key_pairs, interp_factors);
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor2(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor2->add(measurements_lmk2, key_pairs, interp_factors);
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor3(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor3->add(measurements_lmk3, key_pairs, interp_factors);
|
||||
|
||||
const SharedDiagonal noisePrior = noiseModel::Isotropic::Sigma(6, 0.10);
|
||||
|
@ -633,8 +648,11 @@ TEST(SmartProjectionPoseFactorRollingShutter, hessian_simple_2poses) {
|
|||
measurements_lmk1.push_back(cam1.project(landmark1));
|
||||
measurements_lmk1.push_back(cam2.project(landmark1));
|
||||
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(body_P_sensorId, sharedKSimple));
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor1(
|
||||
new SmartFactorRS(model, Camera(body_P_sensorId, sharedKSimple), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
double interp_factor = 0; // equivalent to measurement taken at pose 1
|
||||
smartFactor1->add(measurements_lmk1[0], x1, x2, interp_factor);
|
||||
interp_factor = 1; // equivalent to measurement taken at pose 2
|
||||
|
@ -728,13 +746,16 @@ TEST(SmartProjectionPoseFactorRollingShutter, optimization_3poses_EPI) {
|
|||
params.setLandmarkDistanceThreshold(excludeLandmarksFutherThanDist);
|
||||
params.setEnableEPI(true);
|
||||
|
||||
SmartFactorRS smartFactor1(model, Camera(Pose3::identity(), sharedK), params);
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
|
||||
SmartFactorRS smartFactor1(model, cameraRig, params);
|
||||
smartFactor1.add(measurements_lmk1, key_pairs, interp_factors);
|
||||
|
||||
SmartFactorRS smartFactor2(model, Camera(Pose3::identity(), sharedK), params);
|
||||
SmartFactorRS smartFactor2(model, cameraRig, params);
|
||||
smartFactor2.add(measurements_lmk2, key_pairs, interp_factors);
|
||||
|
||||
SmartFactorRS smartFactor3(model, Camera(Pose3::identity(), sharedK), params);
|
||||
SmartFactorRS smartFactor3(model, cameraRig, params);
|
||||
smartFactor3.add(measurements_lmk3, key_pairs, interp_factors);
|
||||
|
||||
const SharedDiagonal noisePrior = noiseModel::Isotropic::Sigma(6, 0.10);
|
||||
|
@ -794,13 +815,16 @@ TEST(SmartProjectionPoseFactorRollingShutter,
|
|||
params.setLandmarkDistanceThreshold(excludeLandmarksFutherThanDist);
|
||||
params.setEnableEPI(false);
|
||||
|
||||
SmartFactorRS smartFactor1(model, Camera(Pose3::identity(), sharedK), params);
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
|
||||
SmartFactorRS smartFactor1(model, cameraRig, params);
|
||||
smartFactor1.add(measurements_lmk1, key_pairs, interp_factors);
|
||||
|
||||
SmartFactorRS smartFactor2(model, Camera(Pose3::identity(), sharedK), params);
|
||||
SmartFactorRS smartFactor2(model, cameraRig, params);
|
||||
smartFactor2.add(measurements_lmk2, key_pairs, interp_factors);
|
||||
|
||||
SmartFactorRS smartFactor3(model, Camera(Pose3::identity(), sharedK), params);
|
||||
SmartFactorRS smartFactor3(model, cameraRig, params);
|
||||
smartFactor3.add(measurements_lmk3, key_pairs, interp_factors);
|
||||
|
||||
const SharedDiagonal noisePrior = noiseModel::Isotropic::Sigma(6, 0.10);
|
||||
|
@ -869,20 +893,23 @@ TEST(SmartProjectionPoseFactorRollingShutter,
|
|||
params.setDynamicOutlierRejectionThreshold(dynamicOutlierRejectionThreshold);
|
||||
params.setEnableEPI(false);
|
||||
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor1(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor1->add(measurements_lmk1, key_pairs, interp_factors);
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor2(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor2->add(measurements_lmk2, key_pairs, interp_factors);
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor3(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor3->add(measurements_lmk3, key_pairs, interp_factors);
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor4(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor4->add(measurements_lmk4, key_pairs, interp_factors);
|
||||
|
||||
const SharedDiagonal noisePrior = noiseModel::Isotropic::Sigma(6, 0.10);
|
||||
|
@ -933,8 +960,11 @@ TEST(SmartProjectionPoseFactorRollingShutter,
|
|||
interp_factors.push_back(interp_factor2);
|
||||
interp_factors.push_back(interp_factor3);
|
||||
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor1(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor1->add(measurements_lmk1, key_pairs, interp_factors);
|
||||
|
||||
Pose3 noise_pose = Pose3(Rot3::Ypr(-M_PI / 100, 0., -M_PI / 100),
|
||||
|
@ -1071,8 +1101,11 @@ TEST(SmartProjectionPoseFactorRollingShutter,
|
|||
interp_factors.push_back(interp_factor3);
|
||||
interp_factors.push_back(interp_factor1);
|
||||
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor1(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor1->add(measurements_lmk1_redundant, key_pairs, interp_factors);
|
||||
|
||||
Pose3 noise_pose = Pose3(Rot3::Ypr(-M_PI / 100, 0., -M_PI / 100),
|
||||
|
@ -1227,17 +1260,20 @@ TEST(SmartProjectionPoseFactorRollingShutter,
|
|||
interp_factors_redundant.push_back(
|
||||
interp_factors.at(0)); // we readd the first interp factor
|
||||
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(Pose3::identity(), sharedK));
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor1(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor1->add(measurements_lmk1_redundant, key_pairs_redundant,
|
||||
interp_factors_redundant);
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor2(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor2->add(measurements_lmk2, key_pairs, interp_factors);
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactor3(
|
||||
new SmartFactorRS(model, Camera(Pose3::identity(), sharedK), params));
|
||||
new SmartFactorRS(model, cameraRig, params));
|
||||
smartFactor3->add(measurements_lmk3, key_pairs, interp_factors);
|
||||
|
||||
const SharedDiagonal noisePrior = noiseModel::Isotropic::Sigma(6, 0.10);
|
||||
|
@ -1313,8 +1349,11 @@ TEST(SmartProjectionPoseFactorRollingShutter, timing) {
|
|||
size_t nrTests = 10000;
|
||||
|
||||
for (size_t i = 0; i < nrTests; i++) {
|
||||
Cameras cameraRig;
|
||||
cameraRig.push_back(Camera(body_P_sensorId, sharedKSimple));
|
||||
|
||||
SmartFactorRS::shared_ptr smartFactorRS(new SmartFactorRS(
|
||||
model, Camera(body_P_sensorId, sharedKSimple), params));
|
||||
model, cameraRig, params));
|
||||
double interp_factor = 0; // equivalent to measurement taken at pose 1
|
||||
smartFactorRS->add(measurements_lmk1[0], x1, x2, interp_factor);
|
||||
interp_factor = 1; // equivalent to measurement taken at pose 2
|
||||
|
|
Loading…
Reference in New Issue