本文整体参考链接有:
经过测试,这个教程最好[Ubuntu20.04.4安装ROS Noetic详细教程(https://zhuanlan.zhihu.com/p/515361781),推荐参考这个安装ros。 由于后续要安装Anaconda, 因此务必注意先安装ros, 再安装Anaconda, 否则会导致ros的依赖库是Anaconda下的库路径,导致冲突。
具体参考教程参见博客ubuntu20安装opencv4和opencv_contrib 多版本共存,
此处需要注意,安装Pangolin 稳定的0.6 版本。
Pangolin_v0.6
直接去github默认下载是下载的最新版本,需要注意最好不要下载最新版本。
1)安装依赖项
sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
sudo apt-get install libpng-dev
(2)配置并编译
cd Pangolin
mkdir build && cd build
cmake ..
make -j8 # 我的是8线程,此处数据需要自己查设置,不同电脑不同
sudo make install
(3) 检查是否安装成功
cd examples/HelloPangolin
cmake .
make
./HelloPangolin
推荐版本安装3.3.4, 不过也有推荐版本3.3.7,要求最低版本是大于等于3.3.3,看个人需要吧。cd
指令需要进到自己的下载解压后的eigen文件夹处,注意替换该指令。
cmake ..
指令默认安装位置为/urs/local/
,以下为后续fmt安装界面,库路径为/usr/local/lib
, include路径为/usr/local/include/
, 可作为参考:ORB-SLAM中的依赖库默认安装在/usr
下,有特殊指明安装位置的除外,例如opencv安装位置就指明了安装位置,具体可以参考cmake 指令中参数的设置意义。
#github 有个mirror,版本3.3.4 from 2017
git clone https://github.com/eigenteam/eigen-git-mirror
#安装
cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install
#安装后,头文件安装在/usr/local/include/eigen3/
注意!!!
不要采用下面这个指令安装eigen3,
sudo apt-get install libeigen3-dev
如果采用这个指令安装,默认是安装到了/usr/include/eigen3
,ORB-SLAM3检测不到,导致编译会报错。利用源码安装,安装好的路径是 /usr/local/include/eigen3/
>
sudo apt install libpython2.7-dev
sudo apt-get install libssl-dev
Boost 是一个功能强大、构造精巧、跨平台、开源并且完全免费的 C++ 程序库。
进入boost官网:https://www.boost.org/
或者和我下载一样的下载的是1.75.0
此处安装参考链接:
因为后续要运行PL-SLAM,才安装这个库。安装版本ceres-1.14.0版本。
参考链接:Ubuntu20.04安装Ceres和g2o库
参考链接:高翔视觉SLAM十四讲Sophus安装指南(经历)
由于最新的Sophus是模板类的,需要fmt库支持,根据踩坑经验,建议安装8.1.1版本的,否则将导致Sophus安装失败.
Sophus安装1.22.4。
参考链接:Ubuntu20.04安装Ceres和g2o库,安装版本是20201223版本。
参考链接:Ubuntu环境下安装DBoW2
参考链接:Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM+Gazebo仿真运行ORB-SLAM2+各种相关库的安装
(1)解压源文件,在该文件夹下打开终端:
cd ORB_SLAM2
chmod +x build.sh
./build.sh
chmod +x 赋予shell文件运行权限,注意系统若硬件不行(线程少),将build.sh里的make -j(默认启用最大线程)修改为make,防止卡死,电脑性能好可增加数字(线程):如make -j4/j8/jx
运行过程中报错:
/home/xiujie/Documents/ros-project/ORB_SLAM2-master/src/System.cc: In member function ‘void ORB_SLAM2::System::Shutdown()’:
/home/xiujie/Documents/ros-project/ORB_SLAM2-master/src/System.cc:309:13: error: ‘usleep’ was not declared in this scope
309 | usleep(5000);
| ^~~~~~
/home/xiujie/Documents/ros-project/ORB_SLAM2-master/src/System.cc:315:9: error: ‘usleep’ was not declared in this scope
315 | usleep(5000);
| ^~~~~~
/home/xiujie/Documents/ros-project/ORB_SLAM2-master/src/Viewer.cc: In member function ‘void ORB_SLAM2::Viewer::Run()’:
/home/xiujie/Documents/ros-project/ORB_SLAM2-master/src/Viewer.cc:160:17: error: ‘usleep’ was not declared in this scope
160 | usleep(3000);
| ^~~~~~
这些错误表明在编译ORB-SLAM2时,出现了一些问题。具体而言,编译器无法识别 usleep 函数。在C++11中,usleep 已经被标记为过时,并且在头文件
要解决这个问题,你可以采取以下步骤:
(1)包含正确的头文件:
在使用 usleep 函数之前,确保包含正确的头文件。在ORB-SLAM2的 System.cc 和 Viewer.cc 文件中添加以下行:
#include
目前大部分解决方式都用这个方式,需要修改的文件包括
只需要在对应的System.cc或其他报错的文件路径中(如下)添加#include
ORB_SLAM2/src/LocalMapping.cc
ORB_SLAM2/src/LoopClosing.cc
ORB_SLAM2/src/System.cc
ORB_SLAM2/src/Tracking.cc
ORB_SLAM2/src/Viewer.cc
ORB_SLAM2/Examples/Monocular/mono_euroc.cc
ORB_SLAM2/Examples/Monocular/mono_kitti.cc
ORB_SLAM2/Examples/Monocular/mono_tum.cc
ORB_SLAM2/Examples/RGB-D/rgbd_tum.cc
ORB_SLAM2/Examples/Stereo/stereo_euroc.cc
ORB_SLAM2/Examples/Stereo/stereo_kitti.cc
报错:
/usr/include/c++/9/bits/stl_map.h:122:71: error: static assertion failed: std::map must have the same value_type as its allocator
122 | static_assert(is_same::value,
| ^~~~~
make[2]: *** [CMakeFiles/ORB_SLAM2.dir/build.make:118:CMakeFiles/ORB_SLAM2.dir/src/LoopClosing.cc.o] 错误 1
make[2]: *** 正在等待未完成的任务....
make[2]: *** [CMakeFiles/ORB_SLAM2.dir/build.make:244:CMakeFiles/ORB_SLAM2.dir/src/Optimizer.cc.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:95:CMakeFiles/ORB_SLAM2.dir/all] 错误 2
make: *** [Makefile:91:all] 错误 2
解决办法:
把incloud中LoopClosing.h中的
typedef map,
Eigen::aligned_allocator > > KeyFrameAndPose;
改成下面
typedef map,
Eigen::aligned_allocator > > KeyFrameAndPose;
解决这两个问题,一般就可以编译成功了。
参考链接:
ubuntu 20.04+ORB_SLAM3 安装并行全记录(无坑版)(二)
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml "$pathDatasetEuroc"/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
//修改数据集路径
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml /home/xiujie/Documents/ros-project/dataset/MH_01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt
注:此时大家会发现,运行ORB_SLAM3的时候,没有画面!,不要慌,是因为可视化界面没有打开
4. step4:打开可视化界面
打开mono_euroc.cc的第83行,将“false”改为“true”
参考链接:ORBSLAM3运行mono_euroc无图像窗口
ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, **false**);
将false改为true。
双目运行指令为(注意修改自己的数据集路径正确):
./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml /home/xiujie/Documents/ros-project/dataset/MH_01 ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt
更多数据集运行请参考:实操指南:ORB-SLAM3的编译运行。
此处参考链接:Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+各种相关库的安装
安装使用PCL,直接使用指令:
sudo apt-get install libpcl-dev pcl-tools
安装octomap,使用指令:
sudo apt-get install liboctomap-dev octovis
测试是否安装成功:PCL是否安装成功测试(手把手超详细版)
此处用Clion 测试,遇到中文无法输入和显示的问题,clion 版本号是CLion 2023.2.2。解决办法参见:2023.1.3最新版CLion怎么解决中文输出乱码问题(已解决)
参考链接:Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM+Gazebo仿真运行ORB-SLAM2+各种相关库的安装
(1)安装pip:
# 安装pip2
sudo apt install python-pip
#or 安装pip3, 一般安装pip3
sudo apt install python3-pip
(2)直接安装(我个人选择源码安装,未采用这种方法):
pip install evo --upgrade --no-binary evo --user
#或加速:
pip install evo --upgrade --no-binary evo --user -i https://pypi.tuna.tsinghua.edu.cn/simple
(3)源码安装:国内evo源码
cd evo
pip install --editable . --upgrade --no-binary evo --user
这样会很慢,可以通过国内镜像加速,在pip 语句后面增加指定源路径,如下:
pip install --editable . --upgrade --no-binary evo --user -i https://pypi.tuna.tsinghua.edu.cn/simple
首次运行若遇到:evo_traj:command not found,重启电脑。
安装时执行指令pip install --editable . --upgrade --no-binary evo --user -i https://pypi.tuna.tsinghua.edu.cn/simple
, 遇到matplot版本不对
查看自己的matplotlib版本为3.1.2,升级matplotlib版本。
为解决该问题,使用pip3进行安装升级。
使用该指令升级到指定版本, 我的升级到3.7.0:
pip3 install --upgrade matplotlib==3.7.0
再次运行指令即可解决问题。
首次运行若遇到:evo_traj:command not found,重启电脑。