如何在M1 MACBOOK上准备好ORB-SLAM2的环境
1. 环境
-
M1 Macbook Air
-
Parallels Desktop 17
-
关于虚拟机,在之前尝试了UTM,但是性能欠佳,卡顿情况比较多,而且未能解决联网问题,最终只能含泪放弃
-
Parallels Desktop真的好贵~
-
-
Ubuntu 20.04 ARM 64系统
2. 需要哪些元素
A. Eigen
B. Pangolin
C. Opencv
D. Orb-slam2
3. 如何准备
这里只记录准备的过程,不对相关的库或者内容进行介绍
A. Eigen
i. 下载地址:https://eigen.tuxfamily.org/index.php?title=Main_Page
ii. 我下载的是当时最新版本:3.4.0
B. Panolin
i. Github地址:https://github.com/stevenlovegrove/Pangolin
ii. 按照readme进行安装,无特殊情况
# Get Pangolin cd ~/your_fav_code_directory git clone --recursive https://github.com/stevenlovegrove/Pangolin.git cd Pangolin # Install dependencies (as described above, or your preferred method) ./scripts/install_prerequisites.sh recommended # Configure and build mkdir build && cd build cmake .. cmake --build .
iv. 值得注意的是,在进行代码clone时,需要添加—recursive
C. Opencv
i. 下载地址:https://opencv.org/releases/
ii. 我下载的是当时最新版本:4.5.4
iii. 安装操作:
cd opencv4.5.4 mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j6 sudo make install
D. Orb-slam 2
i. Github 地址:https://github.com/raulmur/ORB_SLAM2
ii. 完成代码clone之后,需要进行修改:
1. CMakeLists.txt:
a. 需要添加对cpp 14特性的支持:
if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + set(CMAKE_CXX_STANDARD 14) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_EXTENSIONS OFF) add_definitions(-DCOMPILEDWITHC11) message(STATUS "Using flag -std=c++11.")
b. 修改opencv版本要求:
-find_package(OpenCV 3.0 QUIET) +find_package(OpenCV 4.5 QUIET)
c. 修改对Eigen3的要求:
-find_package(Eigen3 3.1.0 REQUIRED) +find_package(Eigen3 3.1.0 REQUIRED NO_MODULE)
2. Thirdparty/DBoW2/CMakeLists.txt
a. 修改opencv版本要求:
-find_package(OpenCV 3.0 QUIET) +find_package(OpenCV 4.5 QUIET)
3. include/LoopClosing.h
a. 修改类别定义问题:
- Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose; + Eigen::aligned_allocator<std::pair<KeyFrame* const, g2o::Sim3> > > KeyFrameAndPose;
4. include/ORBextractor.h
a. 修改opencv头文件引用问题:
-#include <opencv/cv.h> +#include <opencv2/imgproc/imgproc_c.h> +#include <opencv2/highgui/highgui_c.h>
5. include/System.h
a. 解决找不到CV_LOAD_IMAGE_UNCHANGED问题:
+#include<opencv2/imgcodecs/legacy/constants_c.h>
b. 解决usleep函数不存在问题:
+#include<unistd.h>
iii. 修改完,进行编译:
cd ORB_SLAM2 chmod +x build.sh ./build.sh
4. 测试是否成功
A. 下载测试数据:http://vision.in.tum.de/data/datasets/rgbd-dataset/download
B. 例如下载:Sequence 'freiburg1_360',注意下载时是freiburg1还是freiburg2
C. 下载完成解压缩
D. 回到orb-slam2的目录:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER