ORB_SLAM2 windows配置
ORB_SLAM2的下载地址 https://github.com/raulmur/ORB_SLAM2.git
软件环境
- VS Visual Studio Community 2019
- cmake 3.15.1
需要用到的库
- opencv 2.4.13
- g2o 默认的
- DBoW2 默认的
- eigen 3.3.7
- Pangolin 最新的
编译顺序
1 opencv
2 DBoW2
3 g2o
4 Pangolin
5 ORB_SLAM2
opencv 的编译
opencv的编译比较简单,把编译不过的注释掉就OK了
DBoW2的编译
由于是在windows上编译,需要注释掉RB_SLAM2\Thirdparty\DBoW2\DBoW2\FORB.cpp
//#include <stdint-gcc.h>
[外链图片转存失败(img-QlYFh7Jo-1566053711585)(./DBoW2.png)]修改CmakeList.txt
g2o的编译
需要修改
105 solverNameColumnLength = std::max(solverNameColumnLength, (*it)->property().name.size());
为
105 solverNameColumnLength = std::fmax(solverNameColumnLength, (*it)->property().name.size());
由于ORB_SLAM2中,可能有部分函数不能导出,所有编译为静态库,修改CMakeLists.txt
SET (G2O_LIB_TYPE SHARED)
SET (G2O_LIB_TYPE " ")
Pangolin的编译
Pangolin选择最新的库下载编译即可
ORB_SLAM2的编译
修改代码中 所有的usleep为Sleep,修改src/MapPoint.cc文件下的
const size_t N = vDescriptors.size();
size_t N = vDescriptors.size();
//float Distances[N][N];
float** Distances = new float* [N];
for (int i = 0; i < N; i++)
Distances[i] = new float[N];
// 使用完记得释放,在该函数的最后一行进行释放
delete[] Distances;
修改CMakeList.txt,需要注释掉
# Check C++11 or C++0x support
# include(CheckCXXCompilerFlag)
# CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
# CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
# if(COMPILER_SUPPORTS_CXX11)
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# add_definitions(-DCOMPILEDWITHC11)
# message(STATUS "Using flag -std=c++11.")
# elseif(COMPILER_SUPPORTS_CXX0X)
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
# add_definitions(-DCOMPILEDWITHC0X)
# message(STATUS "Using flag -std=c++0x.")
# else()
# message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11
# support. Please use a different C++ compiler.")
# endif()
set(OpenCV_DIR "D:/Code/SLAM/ORB_SLAM2/Thirdparty/opencv/sources/build/install/lib")
set(EIGEN3_INCLUDE_DIR "D:/Code/SLAM/ORB_SLAM2/Thirdparty/g2o/eigen")
find_package(Eigen3 REQUIRED)
target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
# need modiry
${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/Debug/DBoW2.lib
# need modiry
${PROJECT_SOURCE_DIR}/Thirdparty/g2o/bin/Debug/g2o.lib
)
到此,ORB_SLAM2的编译过程就完成了