Fixed build with g2o on Windows

This commit is contained in:
matlabbe
2016-01-14 17:07:01 -05:00
parent 444879ffc6
commit 2d6965aa4b
6 changed files with 44 additions and 24 deletions
+17 -8
View File
@@ -1,6 +1,8 @@
#Pre-requisites: Look for csparse #Pre-requisites: Look for csparse
FIND_PATH(CSPARSE_INCLUDE_DIR NAMES cs.h PATH_SUFFIXES suitesparse ) FIND_PATH(CSPARSE_INCLUDE_DIR NAMES cs.h PATH_SUFFIXES suitesparse csparse
FIND_LIBRARY(CSPARSE_LIBRARY NAMES cxsparse) PATHS "C:\\Program Files\\g2o\\include\\EXTERNAL")
FIND_LIBRARY(CSPARSE_LIBRARY NAMES cxsparse g2o_ext_csparse
PATHS "C:\\Program Files\\g2o\\lib")
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(CSPARSE DEFAULT_MSG CSPARSE_INCLUDE_DIR CSPARSE_LIBRARY) find_package_handle_standard_args(CSPARSE DEFAULT_MSG CSPARSE_INCLUDE_DIR CSPARSE_LIBRARY)
@@ -8,7 +10,8 @@ find_package_handle_standard_args(CSPARSE DEFAULT_MSG CSPARSE_INCLUDE_DIR CSPARS
# G2O: Find the header files # G2O: Find the header files
FIND_PATH(G2O_INCLUDE_DIR g2o/core/base_vertex.h) FIND_PATH(G2O_INCLUDE_DIR g2o/core/base_vertex.h
PATHS "C:\\Program Files\\g2o\\include")
# Macro to unify finding both the debug and release versions of the # Macro to unify finding both the debug and release versions of the
# libraries; this is adapted from the OpenSceneGraph FIND_LIBRARY # libraries; this is adapted from the OpenSceneGraph FIND_LIBRARY
@@ -18,11 +21,11 @@ MACRO(FIND_G2O_LIBRARY MYLIBRARY MYLIBRARYNAME)
FIND_LIBRARY("${MYLIBRARY}_DEBUG" FIND_LIBRARY("${MYLIBRARY}_DEBUG"
NAMES "g2o_${MYLIBRARYNAME}_d" NAMES "g2o_${MYLIBRARYNAME}_d"
) PATHS "C:\\Program Files\\g2o\\lib")
FIND_LIBRARY(${MYLIBRARY} FIND_LIBRARY(${MYLIBRARY}
NAMES "g2o_${MYLIBRARYNAME}" NAMES "g2o_${MYLIBRARYNAME}"
) PATHS "C:\\Program Files\\g2o\\lib")
IF(NOT ${MYLIBRARY}_DEBUG) IF(NOT ${MYLIBRARY}_DEBUG)
IF(MYLIBRARY) IF(MYLIBRARY)
@@ -66,19 +69,25 @@ ENDIF(G2O_SOLVER_CHOLMOD OR G2O_SOLVER_CSPARSE OR G2O_SOLVER_DENSE OR G2O_SOLVER
# G2O itself declared found if we found the core libraries and at least one solver # G2O itself declared found if we found the core libraries and at least one solver
SET(G2O_FOUND "NO") SET(G2O_FOUND "NO")
SET(G2O_CHOMOLD_FOUND "NO")
FIND_LIBRARY(CHOLMOD_LIB cholmod) FIND_LIBRARY(CHOLMOD_LIB cholmod)
IF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND AND CSPARSE_FOUND) IF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND AND CSPARSE_FOUND)
SET(G2O_INCLUDE_DIRS ${G2O_INCLUDE_DIR} ${CSPARSE_INCLUDE_DIR}) SET(G2O_INCLUDE_DIRS ${G2O_INCLUDE_DIR} ${CSPARSE_INCLUDE_DIR})
SET(G2O_LIBRARIES SET(G2O_LIBRARIES
${G2O_STUFF_LIBRARY} ${G2O_STUFF_LIBRARY}
${G2O_CORE_LIBRARY} ${G2O_CORE_LIBRARY}
${G2O_SOLVER_CHOLMOD}
${G2O_SOLVER_CSPARSE} ${G2O_SOLVER_CSPARSE}
${G2O_SOLVER_CSPARSE_EXTENSION} ${G2O_SOLVER_CSPARSE_EXTENSION}
${G2O_TYPES_SLAM2D} ${G2O_TYPES_SLAM2D}
${G2O_TYPES_SLAM3D} ${G2O_TYPES_SLAM3D}
${CSPARSE_LIBRARY} ${CSPARSE_LIBRARY})
${CHOLMOD_LIB}) IF(G2O_SOLVER_CHOLMOD)
SET(G2O_LIBRARIES
${G2O_LIBRARIES}
${G2O_SOLVER_CHOLMOD}
${CHOLMOD_LIB})
SET(G2O_CHOMOLD_FOUND "YES")
ENDIF(G2O_SOLVER_CHOLMOD)
SET(G2O_FOUND "YES") SET(G2O_FOUND "YES")
ELSEIF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR) ELSEIF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR)
MESSAGE(STATUS "g2o core libraries found but some solvers are missing. Make sure to install \"libsuitesparse-dev\" before building/installing g2o.") MESSAGE(STATUS "g2o core libraries found but some solvers are missing. Make sure to install \"libsuitesparse-dev\" before building/installing g2o.")
+3 -1
View File
@@ -157,6 +157,9 @@ IF(FlyCapture2_FOUND)
ENDIF(FlyCapture2_FOUND) ENDIF(FlyCapture2_FOUND)
IF(G2O_FOUND) IF(G2O_FOUND)
IF(G2O_CHOMOLD_FOUND)
ADD_DEFINITIONS("-DWITH_G2O_CHOMOLD")
ENDIF(G2O_CHOMOLD_FOUND)
ADD_DEFINITIONS("-DWITH_G2O") ADD_DEFINITIONS("-DWITH_G2O")
SET(INCLUDE_DIRS SET(INCLUDE_DIRS
${INCLUDE_DIRS} ${INCLUDE_DIRS}
@@ -169,7 +172,6 @@ IF(G2O_FOUND)
SET(SRC_FILES SET(SRC_FILES
${SRC_FILES} ${SRC_FILES}
vertigo/g2o/edge_se2MaxMixture.cpp
vertigo/g2o/edge_se2Switchable.cpp vertigo/g2o/edge_se2Switchable.cpp
vertigo/g2o/edge_se3Switchable.cpp vertigo/g2o/edge_se3Switchable.cpp
vertigo/g2o/edge_switchPrior.cpp vertigo/g2o/edge_switchPrior.cpp
+20 -11
View File
@@ -42,8 +42,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "g2o/core/optimization_algorithm_gauss_newton.h" #include "g2o/core/optimization_algorithm_gauss_newton.h"
#include "g2o/core/optimization_algorithm_levenberg.h" #include "g2o/core/optimization_algorithm_levenberg.h"
#include "g2o/solvers/csparse/linear_solver_csparse.h" #include "g2o/solvers/csparse/linear_solver_csparse.h"
#include "g2o/solvers/cholmod/linear_solver_cholmod.h"
#include "g2o/solvers/pcg/linear_solver_pcg.h" #include "g2o/solvers/pcg/linear_solver_pcg.h"
#ifdef WITH_G2O_CHOMOLD
#include "g2o/solvers/cholmod/linear_solver_cholmod.h"
#endif
#include "g2o/types/slam3d/vertex_se3.h" #include "g2o/types/slam3d/vertex_se3.h"
#include "g2o/types/slam3d/edge_se3.h" #include "g2o/types/slam3d/edge_se3.h"
#include "g2o/types/slam2d/vertex_se2.h" #include "g2o/types/slam2d/vertex_se2.h"
@@ -51,8 +53,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
typedef g2o::BlockSolver< g2o::BlockSolverTraits<-1, -1> > SlamBlockSolver; typedef g2o::BlockSolver< g2o::BlockSolverTraits<-1, -1> > SlamBlockSolver;
typedef g2o::LinearSolverCSparse<SlamBlockSolver::PoseMatrixType> SlamLinearCSparseSolver; typedef g2o::LinearSolverCSparse<SlamBlockSolver::PoseMatrixType> SlamLinearCSparseSolver;
typedef g2o::LinearSolverCholmod<SlamBlockSolver::PoseMatrixType> SlamLinearCholmodSolver;
typedef g2o::LinearSolverPCG<SlamBlockSolver::PoseMatrixType> SlamLinearPCGSolver; typedef g2o::LinearSolverPCG<SlamBlockSolver::PoseMatrixType> SlamLinearPCGSolver;
#ifdef WITH_G2O_CHOMOLD
typedef g2o::LinearSolverCholmod<SlamBlockSolver::PoseMatrixType> SlamLinearCholmodSolver;
#endif
#include "vertigo/g2o/edge_switchPrior.h" #include "vertigo/g2o/edge_switchPrior.h"
#include "vertigo/g2o/edge_se2Switchable.h" #include "vertigo/g2o/edge_se2Switchable.h"
@@ -94,26 +98,31 @@ std::map<int, Transform> OptimizerG2O::optimize(
int optimizationApproach = 1; int optimizationApproach = 1;
SlamBlockSolver * blockSolver; SlamBlockSolver * blockSolver;
if(solverApproach == 1) #ifdef WITH_G2O_CHOMOLD
if(solverApproach == 0)
{
//chmold
SlamLinearCholmodSolver * linearSolver = new SlamLinearCholmodSolver();
linearSolver->setBlockOrdering(false);
blockSolver = new SlamBlockSolver(linearSolver);
}
else if
#else
if
#endif
(solverApproach == 1)
{ {
//pcg //pcg
SlamLinearPCGSolver * linearSolver = new SlamLinearPCGSolver(); SlamLinearPCGSolver * linearSolver = new SlamLinearPCGSolver();
blockSolver = new SlamBlockSolver(linearSolver); blockSolver = new SlamBlockSolver(linearSolver);
} }
else if(solverApproach == 2) else
{ {
//csparse //csparse
SlamLinearCSparseSolver* linearSolver = new SlamLinearCSparseSolver(); SlamLinearCSparseSolver* linearSolver = new SlamLinearCSparseSolver();
linearSolver->setBlockOrdering(false); linearSolver->setBlockOrdering(false);
blockSolver = new SlamBlockSolver(linearSolver); blockSolver = new SlamBlockSolver(linearSolver);
} }
else
{
//chmold
SlamLinearCholmodSolver * linearSolver = new SlamLinearCholmodSolver();
linearSolver->setBlockOrdering(false);
blockSolver = new SlamBlockSolver(linearSolver);
}
if(optimizationApproach == 1) if(optimizationApproach == 1)
{ {
@@ -8,12 +8,11 @@
#include "edge_se2MaxMixture.h" #include "edge_se2MaxMixture.h"
#include <GL/gl.h>
using namespace std; using namespace std;
using namespace Eigen; using namespace Eigen;
// ================================================ // ================================================
EdgeSE2MaxMixture::EdgeSE2MaxMixture() : g2o::EdgeSE2::EdgeSE2() EdgeSE2MaxMixture::EdgeSE2MaxMixture()
{ {
nullHypothesisMoreLikely = false; nullHypothesisMoreLikely = false;
} }
@@ -89,6 +88,7 @@ void EdgeSE2MaxMixture::computeError()
} }
/* /*
#include <GL/gl.h>
// ================================================ // ================================================
#ifdef G2O_HAVE_OPENGL #ifdef G2O_HAVE_OPENGL
EdgeSE2MaxMixtureDrawAction::EdgeSE2MaxMixtureDrawAction(): DrawAction(typeid(EdgeSE2MaxMixture).name()){} EdgeSE2MaxMixtureDrawAction::EdgeSE2MaxMixtureDrawAction(): DrawAction(typeid(EdgeSE2MaxMixture).name()){}
@@ -10,7 +10,6 @@
#include "vertigo/g2o/edge_se2Switchable.h" #include "vertigo/g2o/edge_se2Switchable.h"
#include "vertigo/g2o/vertex_switchLinear.h" #include "vertigo/g2o/vertex_switchLinear.h"
#include <GL/gl.h>
using namespace std; using namespace std;
using namespace Eigen; using namespace Eigen;
@@ -103,6 +102,7 @@ void EdgeSE2Switchable::computeError()
} }
/* /*
#include <GL/gl.h>
#ifdef G2O_HAVE_OPENGL #ifdef G2O_HAVE_OPENGL
EdgeSE2SwitchableDrawAction::EdgeSE2SwitchableDrawAction(): DrawAction(typeid(EdgeSE2Switchable).name()){} EdgeSE2SwitchableDrawAction::EdgeSE2SwitchableDrawAction(): DrawAction(typeid(EdgeSE2Switchable).name()){}
@@ -10,7 +10,6 @@
#include "vertigo/g2o/edge_se3Switchable.h" #include "vertigo/g2o/edge_se3Switchable.h"
#include "vertigo/g2o/vertex_switchLinear.h" #include "vertigo/g2o/vertex_switchLinear.h"
#include <GL/gl.h>
#include "g2o/types/slam3d/vertex_se3.h" #include "g2o/types/slam3d/vertex_se3.h"
#include "g2o/types/slam3d/isometry3d_gradients.h" #include "g2o/types/slam3d/isometry3d_gradients.h"
@@ -93,6 +92,7 @@ void EdgeSE3Switchable::computeError()
} }
/* /*
#include <GL/gl.h>
#ifdef G2O_HAVE_OPENGL #ifdef G2O_HAVE_OPENGL
EdgeSE3SwitchableDrawAction::EdgeSE3SwitchableDrawAction(): DrawAction(typeid(EdgeSE3Switchable).name()){} EdgeSE3SwitchableDrawAction::EdgeSE3SwitchableDrawAction(): DrawAction(typeid(EdgeSE3Switchable).name()){}