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的編譯過程就完成了