SLAM-学习笔记(V):安装 ORB SLAM 2
ORB-SLAM2 是一个用于单目、双目和 RGB-D 相机的实时 SLAM 库,用于计算相机轨迹和稀疏 3D 重建(在立体和 RGB-D 情况下具有真实比例)。它能够检测循环并实时重新定位摄像机。
依赖
C++11 或 C++0x 编译器
ORB-SLAM2 使用 C++11 的 thread 和 chrono 新功能。
sudo apt-get update
sudo apt-get install cmake gcc g++ git
sudo apt-get install libblas-dev liblapack-dev
Pangolin
- 下载源代码并解压
Pangolin-0.6.zip - 安装依赖
sudo apt install libgl1-mesa-dev libglew-dev cmake libpython2.7-dev libwayland-dev libxkbcommon-dev wayland-protocols libepoxy-dev python3-pip -y python3 -m pip install wheel - 构建编译
cd Pangolin-0.6 cmake -B build cd build make -j4 sudo make install
Eigen3
安装 ROS Noetic Desktop Full 安装了 Eigen3.3.7,经测可以使用
OpenCV 3.4.5
由于 ORB-SLAM2 代码是基于 OpenCV 2/3 ,但是在安装 ROS Noetic Desktop Full 安装了 OpenCV 4,故需要下载旧版 OpenCV 或修改 ORB-SLAM2 代码
修改代码做适配目前对笔者要求较高,拼尽全力无法完成通过编译,所以选择下载旧版 OpenCV 3.4.5 但是由于系统存在两个版本的 OpenCV 可能会导致出现奇怪的报错
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev libcanberra-gtk*
cd opencv-3.4.5
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j8
sudo make install
pkg-config --modversion opencv
安装编译 ORB-SLAM2
安装好上述依赖后,终于可以直接 git clone ORB-SLAM2 的代码然后编译运行了吗?!大错特错。由于 Ubuntu 20.04 配套的 C++ 版本为14,而 ORB-SLAM2 的 CMakeLists 指定了是 11,请修改 ORB-SLAM2 下的 CMakeLists.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()
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
if(COMPILER_SUPPORTS_CXX14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
add_definitions(-DCOMPILEDWITHC14)
message(STATUS "Using flag -std=c++14.")
elseif(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_definitions(-DCOMPILEDWITHC11)
message(STATUS "Using flag -std=c++11.")
else()
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++14 or C++11 support. Please use a different C++ compiler.")
endif()
还没完,将代码中所有出现 std::chrono::monotonic_clock 的地方替换为 std::chrono::steady_clock。
还有一件事。 ORB_SLAM2/include/LoopClosing.h 中大概 50行 的位置,将
typedef map<KeyFrame*,g2o::Sim3 std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
修改为
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<KeyFrame* const, g2o::Sim3> > > KeyFrameAndPose;
然后就可以编译了
cd ORB_SLAM2
chmod +x build.sh
./build.sh
包了这么多碟醋,就是为了这顿饺子
然后下载数据集测试是否成功运行即可!
ORB-SLAM2 ROS
由于上面安装了 OpenCV 3.4.5 ,会导致编译 ROS 节点时出错,这里采用重新编译 cv_bridge 的方法解决这个问题,首先下载好noetic 版本的 cv_bridge
修改 cv_bridge CmakeLists.txt
# set(_opencv_version 4)
# find_package(OpenCV 4 QUIET)
# if(NOT OpenCV_FOUND)
# message(STATUS "Did not find OpenCV 4, trying OpenCV 3")
# set(_opencv_version 3)
# endif()
set(_opencv_version 4)
编译安装 cv-bridge
# 卸载 cv-bridge 软件包
sudo apt-get remove ros-noetic-cv-bridge
cd vision_opencv/cv_bridge
mkdir build
cd build
cmake ..
make
sudo make install
最后运行 build_ros.sh
cd ORB_SLAM2
chmod +x build_ros.sh
./build_ros.sh
最后下载数据集测试是否成功运行即可!


227

被折叠的 条评论
为什么被折叠?



