Removed SLAM namespaces from testSerializationSLAM. Instead of testing each SLAM namespace individually, a single test was created that instanciates all variable-factor combinations. However, there is currently an issue with LieVector that should be resolved.

release/4.3a0
Stephen Williams 2012-07-23 22:50:21 +00:00
parent 01bcd9e939
commit c2daf40c5d
1 changed files with 422 additions and 103 deletions

View File

@ -18,11 +18,31 @@
#include <tests/smallExample.h> #include <tests/smallExample.h>
#include <gtsam/slam/planarSLAM.h> #include <gtsam/slam/PriorFactor.h>
#include <gtsam/slam/visualSLAM.h> #include <gtsam/slam/BetweenFactor.h>
#include <gtsam/slam/BearingFactor.h>
#include <gtsam/slam/RangeFactor.h>
#include <gtsam/slam/BearingRangeFactor.h>
#include <gtsam/slam/ProjectionFactor.h>
#include <gtsam/nonlinear/NonlinearEquality.h>
#include <gtsam/nonlinear/Symbol.h> #include <gtsam/nonlinear/Symbol.h>
#include <gtsam/linear/GaussianISAM.h> #include <gtsam/linear/GaussianISAM.h>
#include <gtsam/linear/GaussianMultifrontalSolver.h> #include <gtsam/linear/GaussianMultifrontalSolver.h>
#include <gtsam/base/LieVector.h>
#include <gtsam/base/LieMatrix.h>
#include <gtsam/geometry/Point2.h>
#include <gtsam/geometry/StereoPoint2.h>
#include <gtsam/geometry/Point3.h>
#include <gtsam/geometry/Rot2.h>
#include <gtsam/geometry/Rot3.h>
#include <gtsam/geometry/Pose2.h>
#include <gtsam/geometry/Pose3.h>
#include <gtsam/geometry/Cal3_S2.h>
#include <gtsam/geometry/Cal3DS2.h>
#include <gtsam/geometry/Cal3_S2Stereo.h>
#include <gtsam/geometry/CalibratedCamera.h>
#include <gtsam/geometry/SimpleCamera.h>
#include <gtsam/base/serializationTestHelpers.h> #include <gtsam/base/serializationTestHelpers.h>
#include <CppUnitLite/TestHarness.h> #include <CppUnitLite/TestHarness.h>
@ -30,17 +50,70 @@ using namespace std;
using namespace gtsam; using namespace gtsam;
using namespace gtsam::serializationTestHelpers; using namespace gtsam::serializationTestHelpers;
// Creating as many permutations of factors as possible
typedef PriorFactor<LieVector> PriorFactorLieVector;
typedef PriorFactor<LieMatrix> PriorFactorLieMatrix;
typedef PriorFactor<Point2> PriorFactorPoint2;
typedef PriorFactor<StereoPoint2> PriorFactorStereoPoint2;
typedef PriorFactor<Point3> PriorFactorPoint3;
typedef PriorFactor<Rot2> PriorFactorRot2;
typedef PriorFactor<Rot3> PriorFactorRot3;
typedef PriorFactor<Pose2> PriorFactorPose2;
typedef PriorFactor<Pose3> PriorFactorPose3;
typedef PriorFactor<Cal3_S2> PriorFactorCal3_S2;
typedef PriorFactor<Cal3DS2> PriorFactorCal3DS2;
typedef PriorFactor<CalibratedCamera> PriorFactorCalibratedCamera;
typedef PriorFactor<SimpleCamera> PriorFactorSimpleCamera;
typedef BetweenFactor<LieVector> BetweenFactorLieVector;
typedef BetweenFactor<LieMatrix> BetweenFactorLieMatrix;
typedef BetweenFactor<Point2> BetweenFactorPoint2;
typedef BetweenFactor<Point3> BetweenFactorPoint3;
typedef BetweenFactor<Rot2> BetweenFactorRot2;
typedef BetweenFactor<Rot3> BetweenFactorRot3;
typedef BetweenFactor<Pose2> BetweenFactorPose2;
typedef BetweenFactor<Pose3> BetweenFactorPose3;
typedef NonlinearEquality<LieVector> NonlinearEqualityLieVector;
typedef NonlinearEquality<LieMatrix> NonlinearEqualityLieMatrix;
typedef NonlinearEquality<Point2> NonlinearEqualityPoint2;
typedef NonlinearEquality<StereoPoint2> NonlinearEqualityStereoPoint2;
typedef NonlinearEquality<Point3> NonlinearEqualityPoint3;
typedef NonlinearEquality<Rot2> NonlinearEqualityRot2;
typedef NonlinearEquality<Rot3> NonlinearEqualityRot3;
typedef NonlinearEquality<Pose2> NonlinearEqualityPose2;
typedef NonlinearEquality<Pose3> NonlinearEqualityPose3;
typedef NonlinearEquality<Cal3_S2> NonlinearEqualityCal3_S2;
typedef NonlinearEquality<Cal3DS2> NonlinearEqualityCal3DS2;
typedef NonlinearEquality<CalibratedCamera> NonlinearEqualityCalibratedCamera;
typedef NonlinearEquality<SimpleCamera> NonlinearEqualitySimpleCamera;
typedef RangeFactor<Pose2, Point2> RangeFactorPosePoint2;
typedef RangeFactor<Pose3, Point3> RangeFactorPosePoint3;
typedef RangeFactor<Pose2, Pose2> RangeFactorPose2;
typedef RangeFactor<Pose3, Pose3> RangeFactorPose3;
typedef RangeFactor<CalibratedCamera, Point3> RangeFactorCalibratedCameraPoint;
typedef RangeFactor<SimpleCamera, Point3> RangeFactorSimpleCameraPoint;
typedef RangeFactor<CalibratedCamera, CalibratedCamera> RangeFactorCalibratedCamera;
typedef RangeFactor<SimpleCamera, SimpleCamera> RangeFactorSimpleCamera;
typedef BearingFactor<Pose2, Point2, Rot2> BearingFactor2D;
typedef BearingFactor<Pose3, Point3, Rot3> BearingFactor3D;
typedef BearingRangeFactor<Pose2, Point2> BearingRangeFactor2D;
typedef BearingRangeFactor<Pose3, Point3> BearingRangeFactor3D;
typedef GenericProjectionFactor<Pose3, Point3, Cal3_S2> GenericProjectionFactorCal3_S2;
typedef GenericProjectionFactor<Pose3, Point3, Cal3DS2> GenericProjectionFactorCal3DS2;
// Convenience for named keys // Convenience for named keys
using symbol_shorthand::X; using symbol_shorthand::X;
using symbol_shorthand::L; using symbol_shorthand::L;
/* Create GUIDs for factors */
/* ************************************************************************* */
BOOST_CLASS_EXPORT_GUID(gtsam::JacobianFactor, "gtsam::JacobianFactor");
BOOST_CLASS_EXPORT_GUID(gtsam::HessianFactor , "gtsam::HessianFactor");
/* Create GUIDs for Noisemodels */
/* ************************************************************************* */ /* ************************************************************************* */
// Export Noisemodels
BOOST_CLASS_EXPORT_GUID(gtsam::noiseModel::Constrained, "gtsam_noiseModel_Constrained"); BOOST_CLASS_EXPORT_GUID(gtsam::noiseModel::Constrained, "gtsam_noiseModel_Constrained");
BOOST_CLASS_EXPORT_GUID(gtsam::noiseModel::Diagonal, "gtsam_noiseModel_Diagonal"); BOOST_CLASS_EXPORT_GUID(gtsam::noiseModel::Diagonal, "gtsam_noiseModel_Diagonal");
BOOST_CLASS_EXPORT_GUID(gtsam::noiseModel::Gaussian, "gtsam_noiseModel_Gaussian"); BOOST_CLASS_EXPORT_GUID(gtsam::noiseModel::Gaussian, "gtsam_noiseModel_Gaussian");
@ -50,6 +123,82 @@ BOOST_CLASS_EXPORT_GUID(gtsam::noiseModel::Isotropic, "gtsam_noiseModel_Isotropi
BOOST_CLASS_EXPORT_GUID(gtsam::SharedNoiseModel, "gtsam_SharedNoiseModel"); BOOST_CLASS_EXPORT_GUID(gtsam::SharedNoiseModel, "gtsam_SharedNoiseModel");
BOOST_CLASS_EXPORT_GUID(gtsam::SharedDiagonal, "gtsam_SharedDiagonal"); BOOST_CLASS_EXPORT_GUID(gtsam::SharedDiagonal, "gtsam_SharedDiagonal");
/* Create GUIDs for geometry */
/* ************************************************************************* */
BOOST_CLASS_EXPORT(gtsam::LieVector);
BOOST_CLASS_EXPORT(gtsam::LieMatrix);
BOOST_CLASS_EXPORT(gtsam::Point2);
BOOST_CLASS_EXPORT(gtsam::StereoPoint2);
BOOST_CLASS_EXPORT(gtsam::Point3);
BOOST_CLASS_EXPORT(gtsam::Rot2);
BOOST_CLASS_EXPORT(gtsam::Rot3);
BOOST_CLASS_EXPORT(gtsam::Pose2);
BOOST_CLASS_EXPORT(gtsam::Pose3);
BOOST_CLASS_EXPORT(gtsam::Cal3_S2);
BOOST_CLASS_EXPORT(gtsam::Cal3DS2);
BOOST_CLASS_EXPORT(gtsam::CalibratedCamera);
BOOST_CLASS_EXPORT(gtsam::SimpleCamera);
/* Create GUIDs for factors */
/* ************************************************************************* */
BOOST_CLASS_EXPORT_GUID(gtsam::JacobianFactor, "gtsam::JacobianFactor");
BOOST_CLASS_EXPORT_GUID(gtsam::HessianFactor , "gtsam::HessianFactor");
BOOST_CLASS_EXPORT_GUID(PriorFactorLieVector, "gtsam::PriorFactorLieVector");
BOOST_CLASS_EXPORT_GUID(PriorFactorLieMatrix, "gtsam::PriorFactorLieMatrix");
BOOST_CLASS_EXPORT_GUID(PriorFactorPoint2, "gtsam::PriorFactorPoint2");
BOOST_CLASS_EXPORT_GUID(PriorFactorStereoPoint2, "gtsam::PriorFactorStereoPoint2");
BOOST_CLASS_EXPORT_GUID(PriorFactorPoint3, "gtsam::PriorFactorPoint3");
BOOST_CLASS_EXPORT_GUID(PriorFactorRot2, "gtsam::PriorFactorRot2");
BOOST_CLASS_EXPORT_GUID(PriorFactorRot3, "gtsam::PriorFactorRot3");
BOOST_CLASS_EXPORT_GUID(PriorFactorPose2, "gtsam::PriorFactorPose2");
BOOST_CLASS_EXPORT_GUID(PriorFactorPose3, "gtsam::PriorFactorPose3");
BOOST_CLASS_EXPORT_GUID(PriorFactorCal3_S2, "gtsam::PriorFactorCal3_S2");
BOOST_CLASS_EXPORT_GUID(PriorFactorCal3DS2, "gtsam::PriorFactorCal3DS2");
BOOST_CLASS_EXPORT_GUID(PriorFactorCalibratedCamera, "gtsam::PriorFactorCalibratedCamera");
BOOST_CLASS_EXPORT_GUID(PriorFactorSimpleCamera, "gtsam::PriorFactorSimpleCamera");
BOOST_CLASS_EXPORT_GUID(BetweenFactorLieVector, "gtsam::BetweenFactorLieVector");
BOOST_CLASS_EXPORT_GUID(BetweenFactorLieMatrix, "gtsam::BetweenFactorLieMatrix");
BOOST_CLASS_EXPORT_GUID(BetweenFactorPoint2, "gtsam::BetweenFactorPoint2");
BOOST_CLASS_EXPORT_GUID(BetweenFactorPoint3, "gtsam::BetweenFactorPoint3");
BOOST_CLASS_EXPORT_GUID(BetweenFactorRot2, "gtsam::BetweenFactorRot2");
BOOST_CLASS_EXPORT_GUID(BetweenFactorRot3, "gtsam::BetweenFactorRot3");
BOOST_CLASS_EXPORT_GUID(BetweenFactorPose2, "gtsam::BetweenFactorPose2");
BOOST_CLASS_EXPORT_GUID(BetweenFactorPose3, "gtsam::BetweenFactorPose3");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityLieVector, "gtsam::NonlinearEqualityLieVector");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityLieMatrix, "gtsam::NonlinearEqualityLieMatrix");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityPoint2, "gtsam::NonlinearEqualityPoint2");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityStereoPoint2, "gtsam::NonlinearEqualityStereoPoint2");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityPoint3, "gtsam::NonlinearEqualityPoint3");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityRot2, "gtsam::NonlinearEqualityRot2");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityRot3, "gtsam::NonlinearEqualityRot3");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityPose2, "gtsam::NonlinearEqualityPose2");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityPose3, "gtsam::NonlinearEqualityPose3");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityCal3_S2, "gtsam::NonlinearEqualityCal3_S2");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityCal3DS2, "gtsam::NonlinearEqualityCal3DS2");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualityCalibratedCamera, "gtsam::NonlinearEqualityCalibratedCamera");
BOOST_CLASS_EXPORT_GUID(NonlinearEqualitySimpleCamera, "gtsam::NonlinearEqualitySimpleCamera");
BOOST_CLASS_EXPORT_GUID(RangeFactorPosePoint2, "gtsam::RangeFactorPosePoint2");
BOOST_CLASS_EXPORT_GUID(RangeFactorPosePoint3, "gtsam::RangeFactorPosePoint3");
BOOST_CLASS_EXPORT_GUID(RangeFactorPose2, "gtsam::RangeFactorPose2");
BOOST_CLASS_EXPORT_GUID(RangeFactorPose3, "gtsam::RangeFactorPose3");
BOOST_CLASS_EXPORT_GUID(RangeFactorCalibratedCameraPoint, "gtsam::RangeFactorCalibratedCameraPoint");
BOOST_CLASS_EXPORT_GUID(RangeFactorSimpleCameraPoint, "gtsam::RangeFactorSimpleCameraPoint");
BOOST_CLASS_EXPORT_GUID(RangeFactorCalibratedCamera, "gtsam::RangeFactorCalibratedCamera");
BOOST_CLASS_EXPORT_GUID(RangeFactorSimpleCamera, "gtsam::RangeFactorSimpleCamera");
BOOST_CLASS_EXPORT_GUID(BearingFactor2D, "gtsam::BearingFactor2D");
BOOST_CLASS_EXPORT_GUID(BearingRangeFactor2D, "gtsam::BearingRangeFactor2D");
BOOST_CLASS_EXPORT_GUID(GenericProjectionFactorCal3_S2, "gtsam::GenericProjectionFactorCal3_S2");
BOOST_CLASS_EXPORT_GUID(GenericProjectionFactorCal3DS2, "gtsam::GenericProjectionFactorCal3DS2");
/* ************************************************************************* */ /* ************************************************************************* */
TEST (Serialization, smallExample_linear) { TEST (Serialization, smallExample_linear) {
using namespace example; using namespace example;
@ -85,12 +234,11 @@ TEST (Serialization, gaussianISAM) {
BOOST_CLASS_EXPORT_GUID(simulated2D::Prior, "gtsam::simulated2D::Prior" ) BOOST_CLASS_EXPORT_GUID(simulated2D::Prior, "gtsam::simulated2D::Prior" )
BOOST_CLASS_EXPORT_GUID(simulated2D::Odometry, "gtsam::simulated2D::Odometry" ) BOOST_CLASS_EXPORT_GUID(simulated2D::Odometry, "gtsam::simulated2D::Odometry" )
BOOST_CLASS_EXPORT_GUID(simulated2D::Measurement, "gtsam::simulated2D::Measurement") BOOST_CLASS_EXPORT_GUID(simulated2D::Measurement, "gtsam::simulated2D::Measurement")
BOOST_CLASS_EXPORT(gtsam::Point2)
/* ************************************************************************* */ /* ************************************************************************* */
TEST (Serialization, smallExample) { TEST (Serialization, smallExample_nonlinear) {
using namespace example; using namespace example;
Graph nfg = createNonlinearFactorGraph(); NonlinearFactorGraph nfg = createNonlinearFactorGraph();
Values c1 = createValues(); Values c1 = createValues();
EXPECT(equalsObj(nfg)); EXPECT(equalsObj(nfg));
EXPECT(equalsXML(nfg)); EXPECT(equalsXML(nfg));
@ -100,113 +248,284 @@ TEST (Serialization, smallExample) {
} }
/* ************************************************************************* */ /* ************************************************************************* */
/* Create GUIDs for factors */ TEST (Serialization, factors) {
BOOST_CLASS_EXPORT_GUID(planarSLAM::Prior, "gtsam::planarSLAM::Prior");
BOOST_CLASS_EXPORT_GUID(planarSLAM::Bearing, "gtsam::planarSLAM::Bearing");
BOOST_CLASS_EXPORT_GUID(planarSLAM::Range, "gtsam::planarSLAM::Range");
BOOST_CLASS_EXPORT_GUID(planarSLAM::BearingRange,"gtsam::planarSLAM::BearingRange");
BOOST_CLASS_EXPORT_GUID(planarSLAM::Odometry, "gtsam::planarSLAM::Odometry");
BOOST_CLASS_EXPORT_GUID(planarSLAM::Constraint, "gtsam::planarSLAM::Constraint");
BOOST_CLASS_EXPORT(gtsam::Pose2) LieVector lieVector(4, 1.0, 2.0, 3.0, 4.0);
LieMatrix lieMatrix(2, 3, 1.0, 2.0, 3.0, 4.0, 5.0 ,6.0);
Point2 point2(1.0, 2.0);
StereoPoint2 stereoPoint2(1.0, 2.0, 3.0);
Point3 point3(1.0, 2.0, 3.0);
Rot2 rot2(1.0);
Rot3 rot3(Rot3::RzRyRx(1.0, 2.0, 3.0));
Pose2 pose2(rot2, point2);
Pose3 pose3(rot3, point3);
Cal3_S2 cal3_s2(1.0, 2.0, 3.0, 4.0, 5.0);
Cal3DS2 cal3ds2(1.0, 2.0, 3.0, 4.0, 5.0,6.0, 7.0, 8.0, 9.0);
CalibratedCamera calibratedCamera(pose3);
SimpleCamera simpleCamera(pose3, cal3_s2);
Symbol a01('a',1), a02('a',2), a03('a',3), a04('a',4), a05('a',5), a06('a',6), a07('a',7), a08('a',8), a09('a',9), a10('a',10), a11('a',11), a12('a',12), a13('a',13);
Symbol b01('b',1), b02('b',2), b03('b',3), b04('b',4), b05('b',5), b06('b',6), b07('b',7), b08('b',8), b09('b',9), b10('b',10), b11('b',11), b12('b',12), b13('b',13);
Values values;
// values.insert(a01, lieVector);
// values.insert(a02, lieMatrix);
values.insert(a03, point2);
values.insert(a04, stereoPoint2);
values.insert(a05, point3);
values.insert(a06, rot2);
values.insert(a07, rot3);
values.insert(a08, pose2);
values.insert(a09, pose3);
values.insert(a10, cal3_s2);
values.insert(a11, cal3ds2);
values.insert(a12, calibratedCamera);
values.insert(a13, simpleCamera);
/* ************************************************************************* */
TEST (Serialization, planar_system) {
using namespace planarSLAM;
planarSLAM::Values values;
Symbol i2('x',2), i3('x',3), i4('x',4), i9('x',9), j3('l',3), j5('l',5), j9('l',9);
values.insert(j3, Point2(1.0, 2.0));
values.insert(i4, Pose2(1.0, 2.0, 0.3));
SharedNoiseModel model1 = noiseModel::Isotropic::Sigma(1, 0.3); SharedNoiseModel model1 = noiseModel::Isotropic::Sigma(1, 0.3);
SharedNoiseModel model2 = noiseModel::Isotropic::Sigma(2, 0.3); SharedNoiseModel model2 = noiseModel::Isotropic::Sigma(2, 0.3);
SharedNoiseModel model3 = noiseModel::Isotropic::Sigma(3, 0.3); SharedNoiseModel model3 = noiseModel::Isotropic::Sigma(3, 0.3);
SharedNoiseModel model4 = noiseModel::Isotropic::Sigma(4, 0.3);
SharedNoiseModel model5 = noiseModel::Isotropic::Sigma(5, 0.3);
SharedNoiseModel model6 = noiseModel::Isotropic::Sigma(6, 0.3);
SharedNoiseModel model9 = noiseModel::Isotropic::Sigma(9, 0.3);
SharedNoiseModel model11 = noiseModel::Isotropic::Sigma(11, 0.3);
Prior prior(i3, Pose2(0.1,-0.3, 0.2), model1);
Bearing bearing(i3, j5, Rot2::fromDegrees(0.5), model1);
Range range(i2, j9, 7.0, model1);
BearingRange bearingRange(i2, j3, Rot2::fromDegrees(0.6), 2.0, model2);
Odometry odometry(i2, i3, Pose2(1.0, 2.0, 0.3), model3);
Constraint constraint(i9, Pose2(2.0,-1.0, 0.2));
Graph graph;
graph.add(prior); PriorFactorLieVector priorFactorLieVector(a01, lieVector, model4);
graph.add(bearing); PriorFactorLieMatrix priorFactorLieMatrix(a02, lieMatrix, model6);
graph.add(range); PriorFactorPoint2 priorFactorPoint2(a03, point2, model2);
graph.add(bearingRange); PriorFactorStereoPoint2 priorFactorStereoPoint2(a04, stereoPoint2, model3);
graph.add(odometry); PriorFactorPoint3 priorFactorPoint3(a05, point3, model3);
graph.add(constraint); PriorFactorRot2 priorFactorRot2(a06, rot2, model1);
PriorFactorRot3 priorFactorRot3(a07, rot3, model3);
PriorFactorPose2 priorFactorPose2(a08, pose2, model3);
PriorFactorPose3 priorFactorPose3(a09, pose3, model6);
PriorFactorCal3_S2 priorFactorCal3_S2(a10, cal3_s2, model5);
PriorFactorCal3DS2 priorFactorCal3DS2(a11, cal3ds2, model9);
PriorFactorCalibratedCamera priorFactorCalibratedCamera(a12, calibratedCamera, model6);
PriorFactorSimpleCamera priorFactorSimpleCamera(a13, simpleCamera, model11);
BetweenFactorLieVector betweenFactorLieVector(a01, b01, lieVector, model4);
BetweenFactorLieMatrix betweenFactorLieMatrix(a02, b02, lieMatrix, model6);
BetweenFactorPoint2 betweenFactorPoint2(a03, b03, point2, model2);
BetweenFactorPoint3 betweenFactorPoint3(a05, b05, point3, model3);
BetweenFactorRot2 betweenFactorRot2(a06, b06, rot2, model1);
BetweenFactorRot3 betweenFactorRot3(a07, b07, rot3, model3);
BetweenFactorPose2 betweenFactorPose2(a08, b08, pose2, model3);
BetweenFactorPose3 betweenFactorPose3(a09, b09, pose3, model6);
NonlinearEqualityLieVector nonlinearEqualityLieVector(a01, lieVector);
NonlinearEqualityLieMatrix nonlinearEqualityLieMatrix(a02, lieMatrix);
NonlinearEqualityPoint2 nonlinearEqualityPoint2(a03, point2);
NonlinearEqualityStereoPoint2 nonlinearEqualityStereoPoint2(a04, stereoPoint2);
NonlinearEqualityPoint3 nonlinearEqualityPoint3(a05, point3);
NonlinearEqualityRot2 nonlinearEqualityRot2(a06, rot2);
NonlinearEqualityRot3 nonlinearEqualityRot3(a07, rot3);
NonlinearEqualityPose2 nonlinearEqualityPose2(a08, pose2);
NonlinearEqualityPose3 nonlinearEqualityPose3(a09, pose3);
NonlinearEqualityCal3_S2 nonlinearEqualityCal3_S2(a10, cal3_s2);
NonlinearEqualityCal3DS2 nonlinearEqualityCal3DS2(a11, cal3ds2);
NonlinearEqualityCalibratedCamera nonlinearEqualityCalibratedCamera(a12, calibratedCamera);
NonlinearEqualitySimpleCamera nonlinearEqualitySimpleCamera(a13, simpleCamera);
RangeFactorPosePoint2 rangeFactorPosePoint2(a08, a03, 2.0, model1);
RangeFactorPosePoint3 rangeFactorPosePoint3(a09, a05, 2.0, model1);
RangeFactorPose2 rangeFactorPose2(a08, b08, 2.0, model1);
RangeFactorPose3 rangeFactorPose3(a09, b09, 2.0, model1);
RangeFactorCalibratedCameraPoint rangeFactorCalibratedCameraPoint(a12, a05, 2.0, model1);
RangeFactorSimpleCameraPoint rangeFactorSimpleCameraPoint(a13, a05, 2.0, model1);
RangeFactorCalibratedCamera rangeFactorCalibratedCamera(a12, b12, 2.0, model1);
RangeFactorSimpleCamera rangeFactorSimpleCamera(a13, b13, 2.0, model1);
BearingFactor2D bearingFactor2D(a08, a03, rot2, model1);
BearingRangeFactor2D bearingRangeFactor2D(a08, a03, rot2, 2.0, model2);
GenericProjectionFactorCal3_S2 genericProjectionFactorCal3_S2(point2, model2, a09, a05, boost::make_shared<Cal3_S2>(cal3_s2));
GenericProjectionFactorCal3DS2 genericProjectionFactorCal3DS2(point2, model2, a09, a05, boost::make_shared<Cal3DS2>(cal3ds2));
NonlinearFactorGraph graph;
// graph.add(priorFactorLieVector);
// graph.add(priorFactorLieMatrix);
graph.add(priorFactorPoint2);
graph.add(priorFactorStereoPoint2);
graph.add(priorFactorPoint3);
graph.add(priorFactorRot2);
graph.add(priorFactorRot3);
graph.add(priorFactorPose2);
graph.add(priorFactorPose3);
graph.add(priorFactorCal3_S2);
graph.add(priorFactorCal3_S2);
graph.add(priorFactorCalibratedCamera);
graph.add(priorFactorSimpleCamera);
// graph.add(betweenFactorLieVector);
// graph.add(betweenFactorLieMatrix);
graph.add(betweenFactorPoint2);
graph.add(betweenFactorPoint3);
graph.add(betweenFactorRot2);
graph.add(betweenFactorRot3);
graph.add(betweenFactorPose2);
graph.add(betweenFactorPose3);
// graph.add(nonlinearEqualityLieVector);
// graph.add(nonlinearEqualityLieMatrix);
graph.add(nonlinearEqualityPoint2);
graph.add(nonlinearEqualityStereoPoint2);
graph.add(nonlinearEqualityPoint3);
graph.add(nonlinearEqualityRot2);
graph.add(nonlinearEqualityRot3);
graph.add(nonlinearEqualityPose2);
graph.add(nonlinearEqualityPose3);
graph.add(nonlinearEqualityCal3_S2);
graph.add(nonlinearEqualityCal3DS2);
graph.add(nonlinearEqualityCalibratedCamera);
graph.add(nonlinearEqualitySimpleCamera);
graph.add(rangeFactorPosePoint2);
graph.add(rangeFactorPosePoint3);
graph.add(rangeFactorPose2);
graph.add(rangeFactorPose3);
graph.add(rangeFactorCalibratedCameraPoint);
graph.add(rangeFactorSimpleCameraPoint);
graph.add(rangeFactorCalibratedCamera);
graph.add(rangeFactorSimpleCamera);
graph.add(bearingFactor2D);
graph.add(bearingRangeFactor2D);
graph.add(genericProjectionFactorCal3_S2);
graph.add(genericProjectionFactorCal3DS2);
// text // text
EXPECT(equalsObj<Symbol>(i2)); EXPECT(equalsObj<Symbol>(a01));
EXPECT(equalsObj<Symbol>(j3)); EXPECT(equalsObj<Symbol>(b02));
EXPECT(equalsObj<planarSLAM::Values>(values)); EXPECT(equalsObj<Values>(values));
EXPECT(equalsObj<Prior>(prior)); EXPECT(equalsObj<NonlinearFactorGraph>(graph));
EXPECT(equalsObj<Bearing>(bearing));
EXPECT(equalsObj<BearingRange>(bearingRange)); // EXPECT(equalsObj<PriorFactorLieVector>(priorFactorLieVector));
EXPECT(equalsObj<Range>(range)); // EXPECT(equalsObj<PriorFactorLieMatrix>(priorFactorLieMatrix));
EXPECT(equalsObj<Odometry>(odometry)); EXPECT(equalsObj<PriorFactorPoint2>(priorFactorPoint2));
EXPECT(equalsObj<Constraint>(constraint)); EXPECT(equalsObj<PriorFactorStereoPoint2>(priorFactorStereoPoint2));
EXPECT(equalsObj<Graph>(graph)); EXPECT(equalsObj<PriorFactorPoint3>(priorFactorPoint3));
EXPECT(equalsObj<PriorFactorRot2>(priorFactorRot2));
EXPECT(equalsObj<PriorFactorRot3>(priorFactorRot3));
EXPECT(equalsObj<PriorFactorPose2>(priorFactorPose2));
EXPECT(equalsObj<PriorFactorPose3>(priorFactorPose3));
EXPECT(equalsObj<PriorFactorCal3_S2>(priorFactorCal3_S2));
EXPECT(equalsObj<PriorFactorCal3DS2>(priorFactorCal3DS2));
EXPECT(equalsObj<PriorFactorCalibratedCamera>(priorFactorCalibratedCamera));
EXPECT(equalsObj<PriorFactorSimpleCamera>(priorFactorSimpleCamera));
// EXPECT(equalsObj<BetweenFactorLieVector>(betweenFactorLieVector));
// EXPECT(equalsObj<BetweenFactorLieMatrix>(betweenFactorLieMatrix));
EXPECT(equalsObj<BetweenFactorPoint2>(betweenFactorPoint2));
EXPECT(equalsObj<BetweenFactorPoint3>(betweenFactorPoint3));
EXPECT(equalsObj<BetweenFactorRot2>(betweenFactorRot2));
EXPECT(equalsObj<BetweenFactorRot3>(betweenFactorRot3));
EXPECT(equalsObj<BetweenFactorPose2>(betweenFactorPose2));
EXPECT(equalsObj<BetweenFactorPose3>(betweenFactorPose3));
// EXPECT(equalsObj<NonlinearEqualityLieVector>(nonlinearEqualityLieVector));
// EXPECT(equalsObj<NonlinearEqualityLieMatrix>(nonlinearEqualityLieMatrix));
EXPECT(equalsObj<NonlinearEqualityPoint2>(nonlinearEqualityPoint2));
EXPECT(equalsObj<NonlinearEqualityStereoPoint2>(nonlinearEqualityStereoPoint2));
EXPECT(equalsObj<NonlinearEqualityPoint3>(nonlinearEqualityPoint3));
EXPECT(equalsObj<NonlinearEqualityRot2>(nonlinearEqualityRot2));
EXPECT(equalsObj<NonlinearEqualityRot3>(nonlinearEqualityRot3));
EXPECT(equalsObj<NonlinearEqualityPose2>(nonlinearEqualityPose2));
EXPECT(equalsObj<NonlinearEqualityPose3>(nonlinearEqualityPose3));
EXPECT(equalsObj<NonlinearEqualityCal3_S2>(nonlinearEqualityCal3_S2));
EXPECT(equalsObj<NonlinearEqualityCal3DS2>(nonlinearEqualityCal3DS2));
EXPECT(equalsObj<NonlinearEqualityCalibratedCamera>(nonlinearEqualityCalibratedCamera));
EXPECT(equalsObj<NonlinearEqualitySimpleCamera>(nonlinearEqualitySimpleCamera));
EXPECT(equalsObj<RangeFactorPosePoint2>(rangeFactorPosePoint2));
EXPECT(equalsObj<RangeFactorPosePoint3>(rangeFactorPosePoint3));
EXPECT(equalsObj<RangeFactorPose2>(rangeFactorPose2));
EXPECT(equalsObj<RangeFactorPose3>(rangeFactorPose3));
EXPECT(equalsObj<RangeFactorCalibratedCameraPoint>(rangeFactorCalibratedCameraPoint));
EXPECT(equalsObj<RangeFactorSimpleCameraPoint>(rangeFactorSimpleCameraPoint));
EXPECT(equalsObj<RangeFactorCalibratedCamera>(rangeFactorCalibratedCamera));
EXPECT(equalsObj<RangeFactorSimpleCamera>(rangeFactorSimpleCamera));
EXPECT(equalsObj<BearingFactor2D>(bearingFactor2D));
EXPECT(equalsObj<BearingRangeFactor2D>(bearingRangeFactor2D));
EXPECT(equalsObj<GenericProjectionFactorCal3_S2>(genericProjectionFactorCal3_S2));
EXPECT(equalsObj<GenericProjectionFactorCal3DS2>(genericProjectionFactorCal3DS2));
// xml // xml
EXPECT(equalsXML<Symbol>(i2)); EXPECT(equalsXML<Symbol>(a01));
EXPECT(equalsXML<Symbol>(j3)); EXPECT(equalsXML<Symbol>(b02));
EXPECT(equalsXML<planarSLAM::Values>(values)); EXPECT(equalsXML<Values>(values));
EXPECT(equalsXML<Prior>(prior)); EXPECT(equalsXML<NonlinearFactorGraph>(graph));
EXPECT(equalsXML<Bearing>(bearing));
EXPECT(equalsXML<BearingRange>(bearingRange)); // EXPECT(equalsXML<PriorFactorLieVector>(priorFactorLieVector));
EXPECT(equalsXML<Range>(range)); // EXPECT(equalsXML<PriorFactorLieMatrix>(priorFactorLieMatrix));
EXPECT(equalsXML<Odometry>(odometry)); EXPECT(equalsXML<PriorFactorPoint2>(priorFactorPoint2));
EXPECT(equalsXML<Constraint>(constraint)); EXPECT(equalsXML<PriorFactorStereoPoint2>(priorFactorStereoPoint2));
EXPECT(equalsXML<Graph>(graph)); EXPECT(equalsXML<PriorFactorPoint3>(priorFactorPoint3));
EXPECT(equalsXML<PriorFactorRot2>(priorFactorRot2));
EXPECT(equalsXML<PriorFactorRot3>(priorFactorRot3));
EXPECT(equalsXML<PriorFactorPose2>(priorFactorPose2));
EXPECT(equalsXML<PriorFactorPose3>(priorFactorPose3));
EXPECT(equalsXML<PriorFactorCal3_S2>(priorFactorCal3_S2));
EXPECT(equalsXML<PriorFactorCal3DS2>(priorFactorCal3DS2));
EXPECT(equalsXML<PriorFactorCalibratedCamera>(priorFactorCalibratedCamera));
EXPECT(equalsXML<PriorFactorSimpleCamera>(priorFactorSimpleCamera));
// EXPECT(equalsXML<BetweenFactorLieVector>(betweenFactorLieVector));
// EXPECT(equalsXML<BetweenFactorLieMatrix>(betweenFactorLieMatrix));
EXPECT(equalsXML<BetweenFactorPoint2>(betweenFactorPoint2));
EXPECT(equalsXML<BetweenFactorPoint3>(betweenFactorPoint3));
EXPECT(equalsXML<BetweenFactorRot2>(betweenFactorRot2));
EXPECT(equalsXML<BetweenFactorRot3>(betweenFactorRot3));
EXPECT(equalsXML<BetweenFactorPose2>(betweenFactorPose2));
EXPECT(equalsXML<BetweenFactorPose3>(betweenFactorPose3));
// EXPECT(equalsXML<NonlinearEqualityLieVector>(nonlinearEqualityLieVector));
// EXPECT(equalsXML<NonlinearEqualityLieMatrix>(nonlinearEqualityLieMatrix));
EXPECT(equalsXML<NonlinearEqualityPoint2>(nonlinearEqualityPoint2));
EXPECT(equalsXML<NonlinearEqualityStereoPoint2>(nonlinearEqualityStereoPoint2));
EXPECT(equalsXML<NonlinearEqualityPoint3>(nonlinearEqualityPoint3));
EXPECT(equalsXML<NonlinearEqualityRot2>(nonlinearEqualityRot2));
EXPECT(equalsXML<NonlinearEqualityRot3>(nonlinearEqualityRot3));
EXPECT(equalsXML<NonlinearEqualityPose2>(nonlinearEqualityPose2));
EXPECT(equalsXML<NonlinearEqualityPose3>(nonlinearEqualityPose3));
EXPECT(equalsXML<NonlinearEqualityCal3_S2>(nonlinearEqualityCal3_S2));
EXPECT(equalsXML<NonlinearEqualityCal3DS2>(nonlinearEqualityCal3DS2));
EXPECT(equalsXML<NonlinearEqualityCalibratedCamera>(nonlinearEqualityCalibratedCamera));
EXPECT(equalsXML<NonlinearEqualitySimpleCamera>(nonlinearEqualitySimpleCamera));
EXPECT(equalsXML<RangeFactorPosePoint2>(rangeFactorPosePoint2));
EXPECT(equalsXML<RangeFactorPosePoint3>(rangeFactorPosePoint3));
EXPECT(equalsXML<RangeFactorPose2>(rangeFactorPose2));
EXPECT(equalsXML<RangeFactorPose3>(rangeFactorPose3));
EXPECT(equalsXML<RangeFactorCalibratedCameraPoint>(rangeFactorCalibratedCameraPoint));
EXPECT(equalsXML<RangeFactorSimpleCameraPoint>(rangeFactorSimpleCameraPoint));
EXPECT(equalsXML<RangeFactorCalibratedCamera>(rangeFactorCalibratedCamera));
EXPECT(equalsXML<RangeFactorSimpleCamera>(rangeFactorSimpleCamera));
EXPECT(equalsXML<BearingFactor2D>(bearingFactor2D));
EXPECT(equalsXML<BearingRangeFactor2D>(bearingRangeFactor2D));
EXPECT(equalsXML<GenericProjectionFactorCal3_S2>(genericProjectionFactorCal3_S2));
EXPECT(equalsXML<GenericProjectionFactorCal3DS2>(genericProjectionFactorCal3DS2));
} }
/* ************************************************************************* */
/* Create GUIDs for factors */
BOOST_CLASS_EXPORT_GUID(visualSLAM::PoseConstraint, "gtsam::visualSLAM::PoseConstraint");
BOOST_CLASS_EXPORT_GUID(visualSLAM::PointConstraint, "gtsam::visualSLAM::PointConstraint");
BOOST_CLASS_EXPORT_GUID(visualSLAM::PosePrior, "gtsam::visualSLAM::PosePrior");
BOOST_CLASS_EXPORT_GUID(visualSLAM::PointPrior, "gtsam::visualSLAM::PointPrior");
BOOST_CLASS_EXPORT_GUID(visualSLAM::ProjectionFactor,"gtsam::visualSLAM::ProjectionFactor");
BOOST_CLASS_EXPORT_GUID(visualSLAM::StereoFactor, "gtsam::visualSLAM::StereoFactor");
BOOST_CLASS_EXPORT(gtsam::Pose3)
BOOST_CLASS_EXPORT(gtsam::Point3)
static Point3 pt3(1.0, 2.0, 3.0);
static Rot3 rt3 = Rot3::RzRyRx(1.0, 3.0, 2.0);
static Pose3 pose3(rt3, pt3);
static Cal3_S2 cal1(1.0, 2.0, 0.3, 0.1, 0.5);
/* ************************************************************************* */
TEST (Serialization, visual_system) {
using namespace visualSLAM;
visualSLAM::Values values;
Symbol x1('x',1), x2('x',2);
Symbol l1('l',1), l2('l',2);
Pose3 pose1 = pose3, pose2 = pose3.inverse();
Point3 pt1(1.0, 2.0, 3.0), pt2(4.0, 5.0, 6.0);
values.insert(x1, pose1);
values.insert(l1, pt1);
SharedNoiseModel model2 = noiseModel::Isotropic::Sigma(2, 0.3);
SharedNoiseModel model3 = noiseModel::Isotropic::Sigma(3, 0.3);
SharedNoiseModel model6 = noiseModel::Isotropic::Sigma(6, 0.3);
boost::shared_ptr<Cal3_S2> K(new Cal3_S2(cal1));
Graph graph;
graph.addMeasurement(Point2(1.0, 2.0), model2, x1, l1, K);
graph.addPointConstraint(l1, pt1);
graph.addPointPrior(l1, pt2, model3);
graph.addPoseConstraint(x1, pose1);
graph.addPosePrior(x1, pose2, model6);
EXPECT(equalsObj(values));
EXPECT(equalsObj(graph));
EXPECT(equalsXML(values));
EXPECT(equalsXML(graph));
}
/* ************************************************************************* */ /* ************************************************************************* */
int main() { TestResult tr; return TestRegistry::runAllTests(tr); } int main() { TestResult tr; return TestRegistry::runAllTests(tr); }