ORB-SLAM3在windows11下的编译使用

news2025/1/19 20:23:14

01 写在前面

近期在学习SLAM,想部署一下ORB-SLAM3,但是自己电脑是win11系统,因此就想着在win11上部署一下。但是网上看了一些教程,有一些博客,但是可能不适合我这种情况把,就很纠结。先说下结果,配置成功,过程极其痛苦。

02 参考工作

所参考的资料如下,感谢各位技术大佬的付出。

1、https://github.com/ds-ly/orbslam3-windows

2、ORB-SLAM3在Windows环境下的编译配置 | 北远山村

3、ORB-SLAM3在windows下的编译使用 - 知乎

03 基础环境

  1. CPU:i7-12700K;
  2. GPU:RTX A4000;
  3. 操作系统:Windows 11 64位专业版;
  4. Microsoft Visual Studio 2022; (此软件默认大家已经装好,在此对vs的安装不赘述)
  5. CMake GUI;(不赘述too)

04 开始配置

04-1 下载源码

本方案是基于https://github.com/ds-ly/orbslam3-windows

该方案中在Thirdparty中包含了一些博客中提到的DBoW2、eigen、g2o、Pangolin等几个关键的包,所以大家也不用额外再去搜,直接在此方案下配置,配置的时候地址也比较集中,很方便。不必担心忘记安装在哪里了。但是在这之前有两个软件需要额外先安装一下,opencv和boost。当然了你也可以Thirdparty下安装。但是考虑到我自己的需要,我是在其他路径下安装的。都一样,记住安装位置就行了。

04-2 安装opencv

因为的自己的opencv之前就安装过,所以在此没有同步记录,推荐一些博客或者大家搜索自行安装opencv。

Windows下 OpenCV 的下载安装教程(详细)_opencv下载-CSDN博客

04-3 安装boost

boost安装,首先从官网下载相应文件。(Boost C++ Libraries)

选择下载,然后将下载的文件解压到你想要安装的路径下:

进入boost_1_83_0文件夹,开始安装

(1)双击bootstrap.bat文件,生成b2.exe;(也可以通过终端命令执行)

(2)接下来应该对b2.exe进行操作,操作之前,请先看这个:

        

说明:

        这里通过双击b2.exe进行编译的,默认在stage下生成lib文件夹,里面只包含着静态库。
如果想要生成dll动态库,可./b2 --help查看参数说明,然后需要输入相应的编译命令样式如:

./b2.exe toolset=msvc-14.1 link=static runtime-link=shared threading=multi variant=debug


        其中

toolset:指定编译器,可选的如minGW、msvc等。
vs2017 : msvc-14.1,vs2015 : msvc-14.0, linux :gcc

link:生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。

runtime-link:动态/静态链接运行时库。同样有shared和static两种方式,标记如何连接C++运行库,是包含就用静态,使用系统运行库就用动态。

threading:单/多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。

variant:编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。

  • 以“lib”开头的是“link=static”版本(静态链接库版本,没有dll),而直接以“boost”开头的是“link=shared”版本(动态链接库版本,包含lib和dll)。
  • 所有的库都含有"boost"前缀。
  • 紧随其后的是boost库名称(比如date_time库)。
  • 然后是编译器的版本,与库名称之间以"-"而不是下划线"_"分隔(比如 -vc120)。
  • 有“mt”的为“threading=multi”版本,没有的则是“threading=single”版本。
  • 有“s”的为“runtime-link=static”版本,没有的则是“runtime-link=shared”版本。
  • 有“gd”的为debug版本,没有的则是release版本。
  • 所有的库都含有boost库的版本号结尾(比如1_56,其中的"."以下划线"_"代替)
     

之所以要说这个,是因为后面要用到boost里面一个很重要的文件libboost_serialization-vc143-mt-s-x64-1_83.lib。 我第一遍生成的时候,是生成“gd”的了,反正我是默认直接生成,他给我生成这个了,后期我死活找不到这个文件,编译不成功。后来知道这个问题后重新生成了一些就好了,也就是说,我们要生成带s的。

所以可以直接:

.\b2.exe link=static runtime-link=static

(其他参数没动)

(3)等待编译完成,时间不等。结束后会生成bin.v2和stage两个文件夹,其中bin.v2下是生成的中间文件,大小在2.4G左右,可以直接删除(看别的博客说的)。stage/lib下是要用的文件。

(4)配置boost环境

通过VS2022创建一个空项目,点击“项目”,点击“属性”,然后:

1)找到“配置属性/ VC++目录”,点击“包含目录”。在里面添加boost的根目录。(如我的是:D:\boost\boost_1_83_0)

2)找到“配置属性/ VC++目录”,点击“库目录”。在里面添加boost的链接库目录。(如我的是:D:\boost\boost_1_83_0\stage\lib)

2)找到“配置属性/链接器/常规”,点击“附加库目录”,同上述库目录:D:\boost\boost_1_83_0\stage\lib

(要熟悉这种包含目录啊库目录的操作,后面要频繁用到)

操作完以上,Boost环境应该就配置好了。可以进行测试一下。

(5)测试

测试代码如下:

#include <iostream>
#include <boost/version.hpp>
#include <boost/config.hpp>
 
using namespace std;
int main()
{
	cout<<BOOST_VERSION<<endl;
	cout<<BOOST_LIB_VERSION<<endl;
	cout<<BOOST_PLATFORM<<endl;
	cout<<BOOST_COMPILER<<endl;
	cout<<BOOST_STDLIB<<endl;
	getchar();
	return 0;
}

有结果输出,说明boost部署成功~,因为我这没啥错,大家如果有啥错了先自行解决一下=-=。

04-4 第三方库的配置

eigen

eigen:线性算术的C++模板库(属于g2o的依赖),刚开始我没有用这套源码的时候,一个个单独安装依靠包,是相当啰嗦麻烦,有了这个源码的Thirdparty,就方便很多了。这个包放这就行。只要保证后面项目生成的时候有这个路径即可。

DBoW2

用于SLAM回环检测,这里需要opencv环境的支持。

(1)在Thirdparty/DBoW2路径下新建一个build文件夹;

(2)打开Thirdparty/DBoW2/CMakeLists.txt,在里面配置自己安装opencv的路径。

原版是这样式儿的:

然后我给改了一下,把那几行给删除了。

就是根据自己的opencv路径,set(OpenCV_DIR "D:\opencv\opencv3_4\opencv\build"

这个opencv路径设置也可以通过后面的cmake来设置,但是我觉得这样方便点。

(3)打开cmake。把cmake上的俩路径改了(根据自己路径来)。然后点击“condigure”,出现done,再点击“Generate”。出现done。则表示配置成功。

如果出现报错,大概率就是opencv的路径问题。

如果成功,会在build文件中看到,DBoW2.sln。

(4)用vs2022打开build/DBoW2.sln

(5)

  • 将配置改成release
  • 右键项目==> 属性 ==> 常规 ==> 配置类型 ==> 静态库(.lib)
  • 属性 ==> 高级 ==> 目标文件扩展名 ==> .lib
  • C/C++ ==> 代码生成 ==> 运行库 ==> 多线程 (/MT)
  • 右键项目 ==> 生成,即可看到生成好的lib文件Thirdparty/DBoW2/lib/Release/DBoW2.lib

g2o

g2o用于图优化的框架

然后熟悉的操作来了:

(1)在Thirdparty/g2o路径下新建一个build文件夹

(2)打开cmake,把cmake上的俩路径改了(根据自己路径来)。然后点击“condigure”,出现done,再点击“Generate”。出现done。则表示配置成功。 (这个不用设置opencv路径)

(3)用vs2022打开build/g2o.sln

(4)

  • 将配置改成release,同时
  • 右键项目==> 属性 ==> 常规 ==> 配置类型 ==> 静态库(.lib)
  • 属性 ==> 高级 ==> 目标文件扩展名 ==> .lib
  • C/C++ ==> 代码生成 ==> 运行库 ==> 多线程 (/MT)
  • C/C++ ==> 预处理器 ==>最上面加入WINDOWS
  • 右键项目 ==> 生成,即可看到生成好的lib文件Thirdparty/g2o/build/Release/g2o.lib

Pangolin

用于3D视觉和3D导航的视觉图和用户之间的交互。这里其实和编译ORB_SLAM3没有关系,但是我们使用ORB_SLAM3库的时候应用的例子上是需要这个库的。

(1)在Thirdparty/g2o路径下新建一个build文件夹

(2)打开cmake,把cmake上的俩路径改了(根据自己路径来)。然后点击“condigure”,出现done,再点击“Generate”。出现done。则表示配置成功。

(3)用vs2022打开build/Pangolin.sln

(4)

  • 将配置改成release
  • 右键项目==> 属性 ==> 常规 ==> 配置类型 ==> 静态库(.lib)
  • 属性 ==> 高级 ==> 目标文件扩展名 ==> .lib
  • C/C++ ==> 代码生成 ==> 运行库 ==> 多线程 (/MT)
  • 右键项目 ==> 生成,即可看到生成好的lib文件ThirdParty/Pangolin/lib/Release/pangolin.lib

至此所有的准备工作完成,开始编译ORB_SLAM3

05 编译ORB_SLAM3

(1) 找到orbslam3-windows/CMakeLists.txt文件,配置opencv3.4.11的路径。

同样我时在txt文件中直接给,跟上文操作一样:

(2)在orbslam3-windows的路径下新建一个build文件夹

(3)打开cmake,把cmake上的俩路径改了(根据自己路径来)。然后点击“condigure”,出现done.

(4)用vs2022打开build/ORB_SLAM3.sln

(5)

  • 将配置改成release;
  • 同时右键项目==> 属性 ==> 常规 ==> 配置类型 ==> 静态库(.lib)
  • 属性 ==> 高级 ==> 目标文件扩展名 ==> .lib
  • C/C++ ==> 代码生成 ==> 运行库 ==> 多线程 (/MT)
  • C/C++ ==> 预处理器 ,添加以下预编译器定义
    WINDOWS
    COMPILEDWITHC11
  • 右键项目 ==> 生成,即可看到生成好的lib文件ORB_SLAM3/build/Release/ORB-SLAM3.lib

这步可能会有一些报错,大多都是相应的boost包、第三方库啥的路径没设置对,特别是opencv,因为我这个博客中没有提到对opencv的设置,默认为大家都设置好了,所以在这步相应的包含目录啊、库目录啊都要有相应依赖性的路径。简而言之,就是你所编译的这个ORBSLAM3的项目,里面设置路径的地方要把上面的依赖包都包含进去。

06 展示案例

我是测试的单目方案,大家根据自己的需要来。

在orbslam3-windows\Examples文件中包含单目、双目、RGB项目等。

1、下载数据集

(1)下载数据集,我是用的The EuRoC MAV Dataset数据集,地址如下,我下载了MH_01_easy。

kmavvisualinertialdatasets – ASL Datasets

下载后我是放到Examples\Monocular文件夹中,解压。

2、编译案例Monocular

  • 用vs2019打开build/ORB_SLAM3.sln
  • 将配置改成release
  • 同时右键项目mono_euroc(如果想编译其他案例就选择自己需要的) ==> 属性 ==> C/C++ ==> 代码生成 ==> 运行库 ==> 多线程 (/MT)
  • C/C++ ==> 预处理器 ,添加以下预编译器定义COMPILEDWITHC11
  • 链接器 ==> 高级 ==> 导入库,改为
  • 链接器 ==> 输入 ==> 去掉..\Thirdparty\boost_1_67_0\lib64-msvc-14.1\libboost_serialization-vc141-mt-s-x64-1_67.lib,改为自己路径下的lib,此处我的为:D:\boost\boost_1_83_0\stage\lib\libboost_serialization-vc143-mt-s-x64-1_83.lib
  • 右键项目 ==> 生成,即可看到生成好的exe文件orbslam3-windows\Examples\Monocular\Release\mono_euroc.exe

如果有exe文件生成,说明案例编译成功了。

3、运行案例Monocular

指令用法

Usage: ./mono_euroc path_to_vocabulary path_to_settings path_to_sequence_folder_1 path_to_times_file_1 (path_to_image_folder_2 path_to_times_file_2 ... path_to_image_folder_N path_to_times_file_N) (trajectory_file_name)

分析一下:

./mono_euroc

path_to_vocabulary # 字典文件

path_to_settings  # 参数设置文件

path_to_sequence_folder_1 # 影像序列文件夹路径

path_to_times_file_1 # 对应的时间戳文件

trajectory_file_name

我在orbslam3-windows目录下运行:

 .\Examples\Monocular\Release\mono_euroc.exe Vocabulary\ORBvoc.txt Examples\Monocular\EuRoC.yaml Examples\Monocular\MH_01_easy Examples\Monocular\EuRoC_TimeStamps\MH01.txt dataset-MH01_monocular

不管写绝对路径还是相对路径,只要写对了就行。

最后!运行成功!!!

哈哈部署成功还是很开心的~

祝大家顺利~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1239026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

写单元测试,没你想得那么简单!

前言 单元测试是什么我们就简单介绍一下&#xff1a; 单元测试是针对程序模块&#xff08;软件设计的最小单位&#xff09;来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。 接下来是本人对单元测试的理解和实践。里面没有废话&#xff0c;希望每句话能说到你心…

【数据库】数据库中的检查点Checkpoint,数据落盘的重要时刻

检查点(checkpoint) ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定…

天空分割技术解决方案

图像处理技术已经成为企业提升用户体验、优化产品和服务的重要工具。美摄科技&#xff0c;作为全球领先的AI图像处理技术提供商&#xff0c;一直致力于研发和应用最先进的技术&#xff0c;以满足企业的各种需求。今天&#xff0c;我们很高兴地向大家介绍我们的新一代产品——美…

git中的分支管理:git branch,git checkout,解决git中的分支冲突的方法【Git学习三】

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;Git等软件工具技术的使用 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要…

2023感恩节大促:跨境卖家如何借助海外网红营销赢得市场关注

随着全球贸易的日益发展&#xff0c;跨境电商行业变得愈发竞争激烈&#xff0c;各家卖家纷纷寻找新的营销策略以在大促期间脱颖而出。在2023年感恩节即将来临之际&#xff0c;海外网红营销成为许多卖家关注的热点。本文Nox聚星将和大家探讨跨境卖家如何充分利用海外网红营销&am…

《C++ Primer》第9章 顺序容器(三)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 9.5 额外的string操作&#xff08;P320&#xff09; 9.5.1 构造string的其他方法 const char *cp "hello, world!"; char arr[] { h,\0,i,\0 }; string s1(cp); // s1 "hello, world!…

什么是索引下推

索引下推介绍 索引下推&#xff08;INDEX CONDITION PUSHDOWN&#xff0c;简称 ICP&#xff09;是在 MySQL 5.6 针对扫描二级索引的一项优化改进。总的来说是通过把索引过滤条件下推到存储引擎&#xff0c;来减少 MySQL 存储引擎访问基表的次数以及 MySQL 服务层访问存储引擎的…

CSS伪类选择器详细讲解

前言 伪类选择器在CSS中起到的作用可以说是至关重要的&#xff0c;如果CSS没有伪类选择器&#xff0c;有很多效果都要借助js来完成&#xff0c;这样不仅代码量增加&#xff0c;维护起来你难度也大。这样程序员的工作量大&#xff0c;也违背了CSS诞生的作用&#xff0c;就是提高…

在Spring Boot中使用ECharts绘制数据图表

使用ECharts来完成一些花里胡哨的图表吧&#xff0c;一般这种需求我们在我们的客户端不太常见&#xff0c;但是&#xff0c;我们在后端进行各种数据统计的时候就会发现ECharts的优点了&#xff0c;比如我们常常做的柱状图&#xff0c;折线图&#xff0c;雷达图等可视化形式&…

阿里云发送短信

官方代码如下&#xff1a; // This file is auto-generated, dont edit it. Thanks. package com.aliyun.sample;import com.aliyun.tea.*;public class Sample {/*** 使用AK&SK初始化账号Client* param accessKeyId* param accessKeySecret* return Client* throws Excep…

windows系统安装ubuntu22.04虚拟机

镜像文件准备 镜像文件 官网 企业开源和Linux | Ubuntu 镜像下载地址 https://cn.ubuntu.com/download/server/step1 选择合适的版本下载 虚拟机安装 文件-- 新建虚拟机 选择镜像 修改安装路径 修改大小&#xff0c;最好60g&#xff0c;大一点 设置用户信息 设置虚拟机网络…

【NLP】培训LLM的不同方式

在大型语言模型&#xff08;LLM&#xff09;领域&#xff0c;存在多种具有不同手段、要求和目标的培训机制。由于它们有不同的用途&#xff0c;因此重要的是不要将它们相互混淆并了解它们适用的不同场景。 在本文中&#xff0c;我想概述一些最重要的训练机制&#xff0c;包括预…

技术or管理?浅谈测试人员的未来职业发展

我们在工作了一段时间之后&#xff0c;势必会感觉到自己已经积累了一些工作经验了&#xff0c;会开始考虑下一阶段的职业生涯会如何发展。测试人员在职业生涯中的不确定因素还是不少的&#xff0c;由于其入门门槛不高&#xff0c;不用学习太多技术性知识即可入行&#xff0c;所…

RH850 G3KH异常处理简述

目录 1.概述 2.异常处理后现场恢复 3.异常处理地址识别 4.小结 1.概述 我们首先来看&#xff0c;G3KH的关键寄存器&#xff0c;PSW PSW--Program status word PSW寄存器里有表征程序状态的flag&#xff0c;CPU操作状态的flag。如下 UM---是否是user mode&#xff1b;0--…

Java Spring

文章目录 SpringSpring 是什么&#xff1f;从Spring中获取Beanxml获取注解存储类注解⽅法注解bean命名规则类注解之间的关系 注解获取bean属性注⼊缺点 构造⽅法注⼊Setter 注⼊三种注⼊优缺点分析Resource&#xff1a;另⼀种注⼊关键字同⼀类型多个 Bean 报错处理 获取bean对象…

谈一谈什么是接口测试?怎样做接口测试?

扫盲内容&#xff1a; 1.什么是接口&#xff1f; 2.接口都有哪些类型&#xff1f; 3.接口的本质是什么&#xff1f; 4.什么是接口测试&#xff1f; 5.问什么要做接口测试&#xff1f; 6.怎样做接口测试&#xff1f; 7.接口测测试点是什么&#xff1f; 8.接口测试都要掌…

​极氪,中国传统汽车品牌电动化的样板间

这篇文章早就想写了&#xff0c;因为太忙的原因就一直跳票&#xff0c;正好最近两件事的出现&#xff0c;又触发了想写这篇文章的冲动。 两件事主要是&#xff1a; 一&#xff0c;10 月份各家陆续公布了单月销量以及累计销量&#xff1b; 二&#xff0c;极氪在北京正式发布了 …

CTF靶场搭建及Web赛题制作与终端docker环境部署

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 写在前面 ╔═══════════════════════════════════════════════════…

OSG文字-渐变文字(4)

渐变文字(osgText::FadeText类)继承自osgText::Text类继承关系图如图9-6所示 图9-6 osgText::FadeText的继承关系图 从继承关系图中可以看出&#xff0c;它继承自osgText::Text类&#xff0c;因此&#xff0c;它具备一般文字属性的设置方法这里不再重复说明。创建渐变文字与一般…

Python通过selenium调用IE11浏览器报错解决方法

前提 正常安装Python 工具&#xff0c;selenium 包可以正常导入。IE浏览器驱动 IEDriverServer.exe 已经正确放置到已经添加path目录的文件下。 报错现象&#xff1a; 解决方法 打开浏览器进入 internet 选项 切换到安全页签 &#xff0c;去除“应用保护模式” 再次调用验证…