From b3df8d336a894eaf9a90775934c950ef0fd04518 Mon Sep 17 00:00:00 2001 From: Richard Roberts Date: Fri, 27 Jan 2012 16:43:31 +0000 Subject: [PATCH] For ASPN release, added temporary ENABLE_SPCG flag to avoid conflict with boost::variant --- examples/Pose2SLAMwSPCG_advanced.cpp | 12 ++++++++++++ examples/Pose2SLAMwSPCG_easy.cpp | 12 ++++++++++++ gtsam/inference/FactorGraph-inl.h | 1 - gtsam/nonlinear/ISAM2-inl.h | 8 ++++---- gtsam/nonlinear/ISAM2.h | 3 ++- gtsam/nonlinear/NonlinearOptimization-inl.h | 7 +++++++ gtsam/nonlinear/NonlinearOptimization.h | 2 ++ tests/testPose2SLAMwSPCG.cpp | 2 ++ 8 files changed, 41 insertions(+), 6 deletions(-) diff --git a/examples/Pose2SLAMwSPCG_advanced.cpp b/examples/Pose2SLAMwSPCG_advanced.cpp index b298ed92a..a04083986 100644 --- a/examples/Pose2SLAMwSPCG_advanced.cpp +++ b/examples/Pose2SLAMwSPCG_advanced.cpp @@ -16,6 +16,10 @@ * Created October 21, 2010 */ +#include + +#if ENABLE_SPCG + #include #include @@ -95,3 +99,11 @@ int main(void) { return 0 ; } +#else + +int main() { + std::cout << "SPCG is currently disabled" << std::endl; + return 0; +} + +#endif diff --git a/examples/Pose2SLAMwSPCG_easy.cpp b/examples/Pose2SLAMwSPCG_easy.cpp index 3cce81d48..131b19443 100644 --- a/examples/Pose2SLAMwSPCG_easy.cpp +++ b/examples/Pose2SLAMwSPCG_easy.cpp @@ -16,6 +16,10 @@ * Created October 21, 2010 */ +#include + +#if ENABLE_SPCG + #include #include @@ -73,3 +77,11 @@ int main(void) { return 0 ; } +#else + +int main() { + std::cout << "SPCG is currently disabled" << std::endl; + return 0; +} + +#endif diff --git a/gtsam/inference/FactorGraph-inl.h b/gtsam/inference/FactorGraph-inl.h index 5689eff0a..337b571c6 100644 --- a/gtsam/inference/FactorGraph-inl.h +++ b/gtsam/inference/FactorGraph-inl.h @@ -29,7 +29,6 @@ #include #include #include -#include #include #include diff --git a/gtsam/nonlinear/ISAM2-inl.h b/gtsam/nonlinear/ISAM2-inl.h index 338427b2c..8a2fc6e35 100644 --- a/gtsam/nonlinear/ISAM2-inl.h +++ b/gtsam/nonlinear/ISAM2-inl.h @@ -44,7 +44,7 @@ ISAM2::ISAM2(const ISAM2Params& params): delta_(Permutation(), deltaUnpermuted_), params_(params) { // See note in gtsam/base/boost_variant_with_workaround.h if(params_.optimizationParams.type() == typeid(ISAM2DoglegParams)) - doglegDelta_ = variant_workaround::get(params_.optimizationParams).initialDelta; + doglegDelta_ = boost::get(params_.optimizationParams).initialDelta; } /* ************************************************************************* */ @@ -53,7 +53,7 @@ ISAM2::ISAM2(): delta_(Permutation(), deltaUnpermuted_) { // See note in gtsam/base/boost_variant_with_workaround.h if(params_.optimizationParams.type() == typeid(ISAM2DoglegParams)) - doglegDelta_ = variant_workaround::get(params_.optimizationParams).initialDelta; + doglegDelta_ = boost::get(params_.optimizationParams).initialDelta; } /* ************************************************************************* */ @@ -533,7 +533,7 @@ ISAM2Result ISAM2::update( if(params_.optimizationParams.type() == typeid(ISAM2GaussNewtonParams)) { // See note in gtsam/base/boost_variant_with_workaround.h const ISAM2GaussNewtonParams& gaussNewtonParams = - variant_workaround::get(params_.optimizationParams); + boost::get(params_.optimizationParams); if (gaussNewtonParams.wildfireThreshold <= 0.0 || disableReordering) { VectorValues newDelta(theta_.dims(ordering_)); optimize2(this->root(), newDelta); @@ -557,7 +557,7 @@ ISAM2Result ISAM2::update( } else if(params_.optimizationParams.type() == typeid(ISAM2DoglegParams)) { // See note in gtsam/base/boost_variant_with_workaround.h const ISAM2DoglegParams& doglegParams = - variant_workaround::get(params_.optimizationParams); + boost::get(params_.optimizationParams); // Do one Dogleg iteration DoglegOptimizerImpl::IterationResult doglegResult = DoglegOptimizerImpl::Iterate( *doglegDelta_, doglegParams.adaptationMode, *this, nonlinearFactors_, theta_, ordering_, nonlinearFactors_.error(theta_), doglegParams.verbose); diff --git a/gtsam/nonlinear/ISAM2.h b/gtsam/nonlinear/ISAM2.h index 7e2a51ffa..a97d9d4ed 100644 --- a/gtsam/nonlinear/ISAM2.h +++ b/gtsam/nonlinear/ISAM2.h @@ -24,7 +24,8 @@ #include // Workaround for boost < 1.47, see note in file -#include +//#include +#include namespace gtsam { diff --git a/gtsam/nonlinear/NonlinearOptimization-inl.h b/gtsam/nonlinear/NonlinearOptimization-inl.h index 36d3cccd0..105a9de19 100644 --- a/gtsam/nonlinear/NonlinearOptimization-inl.h +++ b/gtsam/nonlinear/NonlinearOptimization-inl.h @@ -21,7 +21,10 @@ #include #include +#if ENABLE_SPCG #include +#endif + #include using namespace std; @@ -74,6 +77,7 @@ namespace gtsam { return *optimizer.gaussNewton().values(); } +#if ENABLE_SPCG /** * The sparse preconditioned conjugate gradient solver */ @@ -101,6 +105,7 @@ namespace gtsam { else return *optimizer.gaussNewton().values(); } +#endif /** * optimization that returns the values @@ -116,10 +121,12 @@ namespace gtsam { case MULTIFRONTAL: return optimizeMultiFrontal(graph, initialEstimate, parameters, nonlinear_method == LM); +#if ENABLE_SPCG case SPCG: // return optimizeSPCG(graph, initialEstimate, parameters, // nonlinear_method == LM); throw runtime_error("optimize: SPCG not supported yet due to the specific pose constraint"); +#endif } throw runtime_error("optimize: undefined solver"); } diff --git a/gtsam/nonlinear/NonlinearOptimization.h b/gtsam/nonlinear/NonlinearOptimization.h index a477d4fd5..b563796eb 100644 --- a/gtsam/nonlinear/NonlinearOptimization.h +++ b/gtsam/nonlinear/NonlinearOptimization.h @@ -36,7 +36,9 @@ namespace gtsam { typedef enum { SEQUENTIAL, // Sequential elimination MULTIFRONTAL, // Multi-frontal elimination +#if ENABLE_SPCG SPCG, // Subgraph Preconditioned Conjugate Gradient +#endif } LinearSolver; /** diff --git a/tests/testPose2SLAMwSPCG.cpp b/tests/testPose2SLAMwSPCG.cpp index 1b3d9f455..c345b37b2 100644 --- a/tests/testPose2SLAMwSPCG.cpp +++ b/tests/testPose2SLAMwSPCG.cpp @@ -14,6 +14,7 @@ using namespace pose2SLAM; const double tol = 1e-5; +#if ENABLE_SPCG /* ************************************************************************* */ TEST(testPose2SLAMwSPCG, example1) { @@ -66,6 +67,7 @@ TEST(testPose2SLAMwSPCG, example1) { EXPECT(assert_equal(expected, actual, tol)); } +#endif /* ************************************************************************* */ int main() { TestResult tr; return TestRegistry::runAllTests(tr); }