For ASPN release, added temporary ENABLE_SPCG flag to avoid conflict with boost::variant

release/4.3a0
Richard Roberts 2012-01-27 16:43:31 +00:00
parent 977888e956
commit b3df8d336a
8 changed files with 41 additions and 6 deletions

View File

@ -16,6 +16,10 @@
* Created October 21, 2010 * Created October 21, 2010
*/ */
#include <iostream>
#if ENABLE_SPCG
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <gtsam/slam/pose2SLAM.h> #include <gtsam/slam/pose2SLAM.h>
@ -95,3 +99,11 @@ int main(void) {
return 0 ; return 0 ;
} }
#else
int main() {
std::cout << "SPCG is currently disabled" << std::endl;
return 0;
}
#endif

View File

@ -16,6 +16,10 @@
* Created October 21, 2010 * Created October 21, 2010
*/ */
#include <iostream>
#if ENABLE_SPCG
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <gtsam/slam/pose2SLAM.h> #include <gtsam/slam/pose2SLAM.h>
@ -73,3 +77,11 @@ int main(void) {
return 0 ; return 0 ;
} }
#else
int main() {
std::cout << "SPCG is currently disabled" << std::endl;
return 0;
}
#endif

View File

@ -29,7 +29,6 @@
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple.hpp>
#include <boost/format.hpp> #include <boost/format.hpp>
#include <boost/bind.hpp> #include <boost/bind.hpp>
#include <boost/graph/prim_minimum_spanning_tree.hpp>
#include <boost/iterator/transform_iterator.hpp> #include <boost/iterator/transform_iterator.hpp>
#include <stdio.h> #include <stdio.h>

View File

@ -44,7 +44,7 @@ ISAM2<CONDITIONAL, VALUES, GRAPH>::ISAM2(const ISAM2Params& params):
delta_(Permutation(), deltaUnpermuted_), params_(params) { delta_(Permutation(), deltaUnpermuted_), params_(params) {
// See note in gtsam/base/boost_variant_with_workaround.h // See note in gtsam/base/boost_variant_with_workaround.h
if(params_.optimizationParams.type() == typeid(ISAM2DoglegParams)) if(params_.optimizationParams.type() == typeid(ISAM2DoglegParams))
doglegDelta_ = variant_workaround::get<ISAM2DoglegParams>(params_.optimizationParams).initialDelta; doglegDelta_ = boost::get<ISAM2DoglegParams>(params_.optimizationParams).initialDelta;
} }
/* ************************************************************************* */ /* ************************************************************************* */
@ -53,7 +53,7 @@ ISAM2<CONDITIONAL, VALUES, GRAPH>::ISAM2():
delta_(Permutation(), deltaUnpermuted_) { delta_(Permutation(), deltaUnpermuted_) {
// See note in gtsam/base/boost_variant_with_workaround.h // See note in gtsam/base/boost_variant_with_workaround.h
if(params_.optimizationParams.type() == typeid(ISAM2DoglegParams)) if(params_.optimizationParams.type() == typeid(ISAM2DoglegParams))
doglegDelta_ = variant_workaround::get<ISAM2DoglegParams>(params_.optimizationParams).initialDelta; doglegDelta_ = boost::get<ISAM2DoglegParams>(params_.optimizationParams).initialDelta;
} }
/* ************************************************************************* */ /* ************************************************************************* */
@ -533,7 +533,7 @@ ISAM2Result ISAM2<CONDITIONAL, VALUES, GRAPH>::update(
if(params_.optimizationParams.type() == typeid(ISAM2GaussNewtonParams)) { if(params_.optimizationParams.type() == typeid(ISAM2GaussNewtonParams)) {
// See note in gtsam/base/boost_variant_with_workaround.h // See note in gtsam/base/boost_variant_with_workaround.h
const ISAM2GaussNewtonParams& gaussNewtonParams = const ISAM2GaussNewtonParams& gaussNewtonParams =
variant_workaround::get<ISAM2GaussNewtonParams>(params_.optimizationParams); boost::get<ISAM2GaussNewtonParams>(params_.optimizationParams);
if (gaussNewtonParams.wildfireThreshold <= 0.0 || disableReordering) { if (gaussNewtonParams.wildfireThreshold <= 0.0 || disableReordering) {
VectorValues newDelta(theta_.dims(ordering_)); VectorValues newDelta(theta_.dims(ordering_));
optimize2(this->root(), newDelta); optimize2(this->root(), newDelta);
@ -557,7 +557,7 @@ ISAM2Result ISAM2<CONDITIONAL, VALUES, GRAPH>::update(
} else if(params_.optimizationParams.type() == typeid(ISAM2DoglegParams)) { } else if(params_.optimizationParams.type() == typeid(ISAM2DoglegParams)) {
// See note in gtsam/base/boost_variant_with_workaround.h // See note in gtsam/base/boost_variant_with_workaround.h
const ISAM2DoglegParams& doglegParams = const ISAM2DoglegParams& doglegParams =
variant_workaround::get<ISAM2DoglegParams>(params_.optimizationParams); boost::get<ISAM2DoglegParams>(params_.optimizationParams);
// Do one Dogleg iteration // Do one Dogleg iteration
DoglegOptimizerImpl::IterationResult doglegResult = DoglegOptimizerImpl::Iterate( DoglegOptimizerImpl::IterationResult doglegResult = DoglegOptimizerImpl::Iterate(
*doglegDelta_, doglegParams.adaptationMode, *this, nonlinearFactors_, theta_, ordering_, nonlinearFactors_.error(theta_), doglegParams.verbose); *doglegDelta_, doglegParams.adaptationMode, *this, nonlinearFactors_, theta_, ordering_, nonlinearFactors_.error(theta_), doglegParams.verbose);

View File

@ -24,7 +24,8 @@
#include <gtsam/inference/BayesTree.h> #include <gtsam/inference/BayesTree.h>
// Workaround for boost < 1.47, see note in file // Workaround for boost < 1.47, see note in file
#include <gtsam/base/boost_variant_with_workaround.h> //#include <gtsam/base/boost_variant_with_workaround.h>
#include <boost/variant.hpp>
namespace gtsam { namespace gtsam {

View File

@ -21,7 +21,10 @@
#include <gtsam/linear/GaussianSequentialSolver.h> #include <gtsam/linear/GaussianSequentialSolver.h>
#include <gtsam/linear/GaussianMultifrontalSolver.h> #include <gtsam/linear/GaussianMultifrontalSolver.h>
#if ENABLE_SPCG
#include <gtsam/linear/SubgraphSolver.h> #include <gtsam/linear/SubgraphSolver.h>
#endif
#include <gtsam/nonlinear/NonlinearOptimizer.h> #include <gtsam/nonlinear/NonlinearOptimizer.h>
using namespace std; using namespace std;
@ -74,6 +77,7 @@ namespace gtsam {
return *optimizer.gaussNewton().values(); return *optimizer.gaussNewton().values();
} }
#if ENABLE_SPCG
/** /**
* The sparse preconditioned conjugate gradient solver * The sparse preconditioned conjugate gradient solver
*/ */
@ -101,6 +105,7 @@ namespace gtsam {
else else
return *optimizer.gaussNewton().values(); return *optimizer.gaussNewton().values();
} }
#endif
/** /**
* optimization that returns the values * optimization that returns the values
@ -116,10 +121,12 @@ namespace gtsam {
case MULTIFRONTAL: case MULTIFRONTAL:
return optimizeMultiFrontal<G,T>(graph, initialEstimate, parameters, return optimizeMultiFrontal<G,T>(graph, initialEstimate, parameters,
nonlinear_method == LM); nonlinear_method == LM);
#if ENABLE_SPCG
case SPCG: case SPCG:
// return optimizeSPCG<G,T>(graph, initialEstimate, parameters, // return optimizeSPCG<G,T>(graph, initialEstimate, parameters,
// nonlinear_method == LM); // nonlinear_method == LM);
throw runtime_error("optimize: SPCG not supported yet due to the specific pose constraint"); throw runtime_error("optimize: SPCG not supported yet due to the specific pose constraint");
#endif
} }
throw runtime_error("optimize: undefined solver"); throw runtime_error("optimize: undefined solver");
} }

View File

@ -36,7 +36,9 @@ namespace gtsam {
typedef enum { typedef enum {
SEQUENTIAL, // Sequential elimination SEQUENTIAL, // Sequential elimination
MULTIFRONTAL, // Multi-frontal elimination MULTIFRONTAL, // Multi-frontal elimination
#if ENABLE_SPCG
SPCG, // Subgraph Preconditioned Conjugate Gradient SPCG, // Subgraph Preconditioned Conjugate Gradient
#endif
} LinearSolver; } LinearSolver;
/** /**

View File

@ -14,6 +14,7 @@ using namespace pose2SLAM;
const double tol = 1e-5; const double tol = 1e-5;
#if ENABLE_SPCG
/* ************************************************************************* */ /* ************************************************************************* */
TEST(testPose2SLAMwSPCG, example1) { TEST(testPose2SLAMwSPCG, example1) {
@ -66,6 +67,7 @@ TEST(testPose2SLAMwSPCG, example1) {
EXPECT(assert_equal(expected, actual, tol)); EXPECT(assert_equal(expected, actual, tol));
} }
#endif
/* ************************************************************************* */ /* ************************************************************************* */
int main() { TestResult tr; return TestRegistry::runAllTests(tr); } int main() { TestResult tr; return TestRegistry::runAllTests(tr); }