近期在学习SLAM,想部署一下ORB-SLAM3,但是自己电脑是win11系统,因此就想着在win11上部署一下。但是网上看了一些教程,有一些博客,但是可能不适合我这种情况把,就很纠结。先说下结果,配置成功,过程极其痛苦。
所参考的资料如下,感谢各位技术大佬的付出。
1、https://github.com/ds-ly/orbslam3-windows
2、ORB-SLAM3在Windows环境下的编译配置 | 北远山村
3、ORB-SLAM3在windows下的编译使用 - 知乎
本方案是基于https://github.com/ds-ly/orbslam3-windows
该方案中在Thirdparty中包含了一些博客中提到的DBoW2、eigen、g2o、Pangolin等几个关键的包,所以大家也不用额外再去搜,直接在此方案下配置,配置的时候地址也比较集中,很方便。不必担心忘记安装在哪里了。但是在这之前有两个软件需要额外先安装一下,opencv和boost。当然了你也可以Thirdparty下安装。但是考虑到我自己的需要,我是在其他路径下安装的。都一样,记住安装位置就行了。
因为的自己的opencv之前就安装过,所以在此没有同步记录,推荐一些博客或者大家搜索自行安装opencv。
Windows下 OpenCV 的下载安装教程(详细)_opencv下载-CSDN博客
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 :gcclink:生成动态链接库/静态链接库。生成动态链接库需使用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
#include
#include
using namespace std;
int main()
{
cout<
有结果输出,说明boost部署成功~,因为我这没啥错,大家如果有啥错了先自行解决一下=-=。
eigen:线性算术的C++模板库(属于g2o的依赖),刚开始我没有用这套源码的时候,一个个单独安装依靠包,是相当啰嗦麻烦,有了这个源码的Thirdparty,就方便很多了。这个包放这就行。只要保证后面项目生成的时候有这个路径即可。
用于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
Thirdparty/DBoW2/lib/Release/DBoW2.lib
g2o用于图优化的框架
然后熟悉的操作来了:
(1)在Thirdparty/g2o
路径下新建一个build
文件夹
(2)打开cmake,把cmake上的俩路径改了(根据自己路径来)。然后点击“condigure”,出现done,再点击“Generate”。出现done。则表示配置成功。 (这个不用设置opencv路径)
(3)用vs2022打开build/
g2o.sln
(4)
release
,同时WINDOWS
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
,至此所有的准备工作完成,开始编译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;
ORB_SLAM3/build/Release/ORB-SLAM3.lib
这步可能会有一些报错,大多都是相应的boost包、第三方库啥的路径没设置对,特别是opencv,因为我这个博客中没有提到对opencv的设置,默认为大家都设置好了,所以在这步相应的包含目录啊、库目录啊都要有相应依赖性的路径。简而言之,就是你所编译的这个ORBSLAM3的项目,里面设置路径的地方要把上面的依赖包都包含进去。
我是测试的单目方案,大家根据自己的需要来。
在orbslam3-windows\Examples文件中包含单目、双目、RGB项目等。
(1)下载数据集,我是用的The EuRoC MAV Dataset数据集,地址如下,我下载了MH_01_easy。
kmavvisualinertialdatasets – ASL Datasets
下载后我是放到Examples\Monocular文件夹中,解压。
build/ORB_SLAM3.sln
release
,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.liborbslam3-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
不管写绝对路径还是相对路径,只要写对了就行。
最后!运行成功!!!
哈哈部署成功还是很开心的~
祝大家顺利~~~