本文大致记录三个部分:
1.配置ORB-SLAM3的运行环境并跑通数据集
2.配置ORB-SLAM3魔改版,标定设备,采集数据,启动ORB-SLAM3
3.安装evo插件,进行评估,后期可能会加入ORB-SLAM3和VINS的精度比较
我的电脑以及Ubuntu系统情况:
联想台式电脑 win11系统安装Ubuntu18.04,另外也介绍了网卡和显卡的驱动安装问题。
根据ORB-SLAM3的官方介绍,我们整理一下所需要准备的工具和依赖:
在之前的一篇博客中,介绍了ROS的详细安装方法,网上也有很详细的教程,各种坑基本也有人踩过,其中比较烦人的一点就是网络代理问题(应该是吧)。但是现在网上鱼香ROS大佬发明了一种一键安装ROS的方法—一键安装ROS。 可以自动检测Ubuntu版本,找到对应的ROS进行安装,甚至还可以自动切换源…太牛了。虽然但是,如果时间比较充裕,还是建议用虚拟机手动试一下,这样能更好的熟悉Linux。
安装指令如下:
wget http://fishros.com/install -O fishros && . fishros
ROS是一个管理机器人的操作平台,里面有很多指令来控制你的设备。这里安装ROS是想着是不是可以用ROS来启动ORB-SLAM3呢,后续也可能加入VINS,甚至是测试一些相机,都需要ROS来发布命令节点。而且ROS是自带一些环境的,比如比较难安装的OpenCV,因为我的是Ubuntu18.04,上述指令会自动安装ROS-melodic。
pkg-config --modversion opencv
我们并没有安装OpenCV,所以这里的3.2.0版本是ROS-melodic自带的。
ROS安装完成了,这里有一个小问题,因为我们安装过程中选择了自动换源,大佬写的脚本会将我们的源换成最合适的,但是会造成后续的下载无法进行(我是这样的),建议再去软件和更新中换回来
一些编译或者下载过程的依赖,git和g++自己安装就好了,一般没有什么问题。
我之前装机的时候用到了Cmake,但是是用apt从仓库中下载的,查询了一下版本,显示的是cmake3.10,建议升级,我记得好像后续安装evo有一步要求version大于3.12。
tips:cmake的升级方式有很多,但是千万别卸载原先的再升级,cmake是支持版本覆盖的,如果卸载掉原来的版本,一些依赖也会挂掉
# 查看cmake版本
cmake --version
wget https://cmake.org/files/v3.22/cmake-3.22.1.tar.gz
# 给予最高的读写和执行权限
chmod 777 ./configure
./configure
tips:ubuntu 下修改文件访问权限chmod 777 -R *血的教训!没事别乱开权限!
make
sudo make install
sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
tips:这一步好像是指向问题,我只见过Python有这种情况,但是网上很多教程是有的,应该是不用加也可以,保险起见还是加上
cmake --version
Pangolin是用来可视化的,这一步对版本要求很高,我之前用v0.6版本是通过了的。
安装Pangolin 0.6(稳定版):官网下载地址
sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libpng-dev
# 在主目录下(把第三方库全部放在这里)
mkdir 3rdparty
cd 3rdparty
unzip Pangolin-0.6.zip
cd Pangolin-0.6
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install
在pangolin-0.6下有个examples文件,里面有源码文件HelloPangolin,自己cmake编译一下出现立方体即可。
因为我们之前是安装过ROS的,其自带的OpenCV3.2.0官网上也是符合要求:
所以节约时间就不在折腾了,如果后续版本出现版本问题,再慢慢排查。
因为安装OpenCV实在是有点慢…
这里检查一下版本、库文件、头文件就行:
pkg-config --modversion opencv
pkg-config --cflags opencv
pkg-config --libs opencv
eigen3是一个矩阵库,基本上不管是哪个slam都需要这个库的。eigen库有个特点就是该库只有头文件,干净整洁,不需要依赖其他,调用的时候也很方便。
就不推荐直接安装了(sudo apt-get install libeigen3-dev),因为安装的版本取决于你的仓库,下载的eigen也不一定是我们想要的。
源码安装:文件
# 还是放到之前建好的3rdparty下
cd eigen3.3.3
mkdir build && cd build
# 这一步是编译生成执行程序
cmake .. && make
# 这一步是把头文件放到本地的usr/local/include中
sudo make install
# 防止后续源代码调用头文件get不到,我们把头文件向上一步包含
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
将find_package(Eigen3 3.1.0 REQUIRED)修改为
find_package(Eigen3 REQUIRED)
其中make -j会自动跑满你的cpu线程,性能弱一点的可以自行更改调用参数。
这个文件也可以看到,ORB-SLAM3用的g2o优化库(非线性优化)和DBow2库(回环检测相关)它本身是包含的,自己调用不需要我们配置了。
chmod +x build.sh
# 查看颜色发生改变,可以执行
ls -la
./build.sh
# 我是直接编译通过了的,有问题可以将问题复制,自行查询,应该都是少了一些依赖,直接apt就好了
https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
tips:因为vins集成ros效果非常好,vins-mono测试的时候我们直接下载.bag文件就好了,但是ORB-SLAM3有源码启动方式和ros启动两种方式,我们感受一下源码启动方式,这样能清楚的看出来orb运行所需要的文件以及格式。
进入官网后,不要点击bag了,向上去点击link链接,这里我下载的是Machine Hall下面的MH_01_easy,下载一整个压缩文件,解压缩后发现里面有一个mav0文件夹,一整个复制,在我们的ORB-SLAM3文件夹下新建一个名为datasets的文件夹,放入。
你可以用tree命令来看看mav0里面有啥,包含的关系怎样的。
先贴一条命令:
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./datasets/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
1.从命令中可以看出,终端的执行位置是在ORB-SLAM3文件夹下,不要执行错位置,包含关系还是挺复杂的。
2. ./Examples/Monocular/mono_euroc 是一个可执行文件,文件下还有他的源码
3. ./Vocabulary/ORBvoc.txt 是他的词袋路径,用于回环检测
4. ./Examples/Monocular/EuRoC.yaml yaml肯定是配置文件了,相机内参和畸变参数之类的
5. ./datasets/MH01 这个是要跑的文件
6. ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt 这个是他配置好的时间戳了,不懂为啥要分开…,一帧一帧的图片与之对应
7. dataset-MH01_mono 这个是要保存的轨迹文件名称,测试不加这一行也可以
OK!
–2023-05-11,后续继续更