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

iii. 正常的CMAKE编译安装,无特殊情况

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

i. 注意TUMX.yaml需要修改,如果下载的是freiburg1,修改成TUMX1.yaml等等

ii. PATH_TO_SEQUENCE_FOLDER是指解压缩后的目录,包含了depth, rgb目录以及若干文本文件

E. 正确情况会看到窗口启动正常显示

如何在M1 MACBOOK上准备好ORB-SLAM2的环境的更多相关文章

  1. ORB SLAM2在Ubuntu 16.04上的运行配置

    http://www.mamicode.com/info-detail-1773781.html 安装依赖 安装OpenGL 1. 安装opengl Library$sudo apt-get inst ...

  2. 如何在Macbook上安装MySQL ?

    MySQL是常用的一款开源数据库,对各个平台都提供了支持,而Macbook又作为程序员的一款主力开发工具经常被使用.因此怎么在Macbook上安装MySQL进行程序开发也成了一项基本技能.下面来跟随本 ...

  3. M1 MacBook安装Homebrew

    在装载M1芯片的MacBook产品上,默认是不带有homebrew这款包管理工具的,具体原因官方解释为适配问题,原有的homebrew无法与silicon Mac机型匹配.但是这并不意味着我们不可以在 ...

  4. [译]How to Install Node.js on Ubuntu 14.04 如何在ubuntu14.04上安装node.js

    原文链接为 http://www.hostingadvice.com/how-to/install-nodejs-ubuntu-14-04/ 由作者Jacob Nicholson 发表于October ...

  5. 如何在iOS地图上高效的显示大量数据

    2016-01-13 / 23:02:13 刚才在微信上看到这篇由cocoachina翻译小组成员翻译的文章,觉得还是挺值得参考的,因此转载至此,原文请移步:http://robots.thought ...

  6. GPT分区基础知识及如何在GPT分区上安装WIN7

    大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘,更快速的启动win8,预装系统都采取了GPT分区 ...

  7. 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据

    http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPa ...

  8. 如何在Ubuntu Unity上修改应用程序图标

    转自如何在Ubuntu Unity上修改应用程序图标 这篇文章将教大家在Ubuntu Unity上修改应用程序图标,这个教程适合于Ubuntu 14.04, Ubuntu 13.10, Ubuntu ...

  9. 如何在CentOS 7上修改主机名

    如何在CentOS 7上修改主机名 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty).“静态”主机名也称为内核主机名,是系统在启动时 ...

  10. 如何在 Android 手机上实现抓包?

    如何在 Android 手机上实现抓包? http://www.zhihu.com/question/20467503 我想知道某个应用究竟在数据提交到哪里,提交了什么.网上的教程太复杂,不想麻烦.有 ...

随机推荐

  1. 基于proteus的555的门铃计数电路

    基于proteus的555的门铃计数电路 1.实验原理 555定时器可以作为单稳态触发器完成计数所需的时钟.门铃工作时,需要进行一次计数.计数器使用前面使用的4026就可以将结果直接显示在数码管上. ...

  2. archlinux virtualbox 启用usb支持

    参照 https://linux.cn/article-15287-1.html 1.安装virtualbox扩展包 (1)从archlinuxcn社区库安装 sudo pacman -S virtu ...

  3. https://codeforces.com/gym/496962

    A略. B最大最小即为答案. C略. DE记录 t 的每个字母 在 s 中出现的最左和最右,特判端点. FG先贪心后反悔 or 背包. *H:不会.AC自动机.

  4. #线性dp#洛谷 5999 [CEOI2016]kangaroo

    题目 问有多少个长度为 \(n\) 的排列满足首项为 \(st\),末项为 \(ed\), 并且 \(\forall i\in (1,n),\left[a_{i-1}<a_i \oplus a_ ...

  5. #差分,前缀和#nssl 1469 U

    分析 考虑离线,因为异或和很难在线处理 然后可以用两个数组来差分斜与横的情况,然后将答案竖着传 时间复杂度\(O(n^2)\) 代码 #include <cstdio> #include ...

  6. 《深入理解Java虚拟机》读书笔记: 虚拟机类加载的时机和过程

    虚拟机类加载的时机和过程 一.类加载的时机 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading).验证(Verification).准备(Preparation ...

  7. redis 简单整理——阻塞问题[二十五]

    前言 简单介绍一下redis的阻塞问题. 正文 Redis是典型的单线程架构,所有的读写操作都是在一条主线程中完成 的.当Redis用于高并发场景时,这条线程就变成了它的生命线.如果出现 阻塞,哪怕是 ...

  8. redis 简单整理——Lua[十一]

    前言 简单介绍一下Lua. 正文 为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集 成Lua脚本来解决这个问题. 前面提及到pipline,也提及到pipline 并不是原子性的,如 ...

  9. c# 解决死锁问题Monitor

    前言 在高并发中,一个很关键的问题就是要避免死锁. 那么为什么会产生死锁呢?这种情况多见吗? 举一个例子: 比如方法一中先lock(object1),在lock(object1)中lock(objec ...

  10. python中的赋值、浅拷贝、深拷贝的区别

    赋值: 可变类型:赋值前后id不会变,赋值后的数据会随源数据变化: 不可变类型:赋值前后id不会变,赋值后的数据不会随源数据变化: 浅拷贝(copy): 可变类型:copy前后id会变,可变类型中存储 ...