Ubuntu 20.04完整安装ORB_SLAM2及配置对应ROS
0、创建包路径
- 强烈建议,先在终端创建路径
Packages
,然后在这个文件夹下进行后续的1、2、3、这三个包的安装
1、安装Opencv4.2.0
下载压缩包
1
https://github.com/opencv/opencv/archive/4.2.0.zip
使用
unzip -x opencv4.2.0.zip
解压,进入文件夹后依次运行如下命令1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31# 依赖库安装
sudo apt-get install build-essential cmake git
sudo apt-get install libgtk2.0-dev pkg-config libavcodec-dev
sudo apt-get install libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy python3-dev python3-numpy
sudo apt-get install libtbb2 libtbb-dev libjasper-dev libdc1394-22-dev
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
# 正式安装
mkdir build && cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 -D CMAKE_BUILD_TYPE="Release" -D OPENCV_GENERATE_PKGCONFIG=ON ..
make -j4
sudo make install
# 检查安装
sudo gedit /etc/ld.so.conf.d/opencv.conf
# 进入编辑页面后输入
/usr/local/opencv4/lib
# 然后ctrl+s保存,关闭gedit页面后还在这个终端下运行
sudo ldconfig
# 编辑bashrc文件,运行
sudo gedit ~/.bashrc
# 在文件最后添加
#opencv-4.2.0
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/usr/local/opencv4/lib/pkgconfig
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:./usr/local/opencv4/lib
# 然后ctrl+s保存,关闭gedit页面后还在这个终端下运行
source ~/.bashrc
# 最终检查,依次运行下列命令
pkg-config --modversion opencv4
pkg-config --cflags opencv4
pkg-config --libs opencv4
# 均有正常输出即可,其中第一个命令输出为4.2.0
2、安装依赖Pangolin
安装依赖项
1
2sudo 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安装Pangolin 0.6(稳定版)(官网下载地址),不要下载最新master版,编译的时候可能有错误)
配置并编译
1
2
3
4
5cd Pangolin
mkdir build && cd build
cmake -DCPP11_NO_BOOST=1 ..
make
sudo make install验证
1
2
3
4
5cd ../examples/HelloPangolin
mkdir build && cd build
cmake ..
make
./HelloPangolin成功后会弹出一个终端,里面是一个立方体有三色,关闭即可。
3、安装依赖Eigen3
方案一:直接安装
Eigen3是一个纯头文件的库,这个特点让使用者省去了很多安装和环境配置的麻烦,可以直接安装:
1
sudo apt-get install libeigen3-dev
方案二:源码安装
源码(地址)安装,执行以下指令:
1
2
3
4
5cd eigen3
mkdir build && cd build
cmake ..
make
sudo make install安装后头文件在:
1
/usr/local/include/eigen3/
复制头文件到
/usr/local/include
:1
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include
4、安装ORB_SLAM2
使用鱼香ROS的一键配置命令,配置
rosdepc
,终端执行下列命令,然后输入密码,选择rosdepc,然后配置好了之后会提示让rosdep init之类的命令,执行命令就好了1
wget http://fishros.com/install -O fishros && . fishros
进入到自己的ROS工作空间的
src
文件夹下,下载并解压源文件,然后打开,此处我的工作空间地址为:/home/zhao/WS/Now/ant_ws/src/ORB_SLAM2
修改各个CMakeLists.txt,将其中关于OpenCV的部分做如下修改:
1、主目录ORB_SLAM2下的CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12# 注释掉下面这7行,类似的也是把涉及到的部分注释调
# find_package(OpenCV 3.0 QUIET)
# if(NOT OpenCV_FOUND)
# find_package(OpenCV 2.4.3 QUIET)
# if(NOT OpenCV_FOUND)
# message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
# endif()
# endif()
# 然后添加这两行
set(CMAKE_PREFIX_PATH "/usr/local/opencv4")
find_package(OpenCV 4.0 QUIET)2、
ORB_SLAM2/Thirdparty/DBoW2
文件夹下的CMakeLists.txt1
2
3
4
5
6
7
8
9
10# find_package(OpenCV 3.0 QUIET)
# if(NOT OpenCV_FOUND)
# find_package(OpenCV 2.4.3 QUIET)
# if(NOT OpenCV_FOUND)
# message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
# endif()
# endif()
set(CMAKE_PREFIX_PATH "/usr/local/opencv4")
find_package(OpenCV 4.0 QUIET)3、
ORB_SLAM2/Examples/ROS/ORB_SLAM2
文件夹下的CMakeLists.txt1
2
3
4
5
6
7
8
9
10# find_package(OpenCV 3.0 QUIET)
# if(NOT OpenCV_FOUND)
# find_package(OpenCV 2.4.3 QUIET)
# if(NOT OpenCV_FOUND)
# message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
# endif()
# endif()
set(CMAKE_PREFIX_PATH "/usr/local/opencv4")
find_package(OpenCV 4.0 QUIET)修改ros示例源文件,为
Examples/ROS/ORB_SLAM2/src
路径下的所有.cc文件添加头文件1
将
ORB_SLAM2/Examples/
文件夹下的所有示例源文件中导入图像数据的参数CV_LOAD_IMAGE_UNCHANGED
修改为下列表述,建议在这个文件夹下使用code .
命令开启vscode,使用侧边栏的搜索,然后全局替换(应该是6个)1
cv::IMREAD_UNCHANGED
把ORB-SLAM2源码目录中
include/LoopClosing.h
文件中的1
2typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;修改成:
1
2typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<KeyFrame *const, g2o::Sim3> > > KeyFrameAndPose;解压源文件,在该文件夹下打开终端:
这里建议使用记事本打开build.sh,然后逐个命令执行,方便检查错误,且注意!每次运行到最后的make命令如果失败了,在修复了之后需要依次删除对应的build文件夹,重新创建并编译!
1
2
3cd ORB_SLAM2
chmod +x build.sh
./build.sh如果在运行时出现问题:
1
error: ’usleep’ was not declared in this scope
那么找到对应的
.cc
文件,在其开头的#include
部分添加内容:1
#include <unistd.h>
然后,需要对照着
build.sh
中的内容,将涉及到的所有build
文件夹全部删除并重新开始!在终端添加ROS路径,执行以下两行命令
1
2echo 'export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:'"`pwd`/Examples/ROS" >> ~/.bashrc
source ~/.bashrc编译ros节点,此时便不再会出现问题了
1
./build_ros.sh
5、Reference
https://blog.csdn.net/zardforever123/article/details/125044004/
- 这个超级全面,而且包含了测试部分的
rosbag
内容,就是有点混乱,如果你的初衷就是在ROS中实现运行,建议按照我的流程走,然后有问题再参考这个链接的内容!在此感谢此大佬,解救我于水火中!
- 这个超级全面,而且包含了测试部分的
https://blog.csdn.net/qq_49164258/article/details/129375322
- 这个里面也包含了
rosbag
数据集,在验证数据集部分比较详细
- 这个里面也包含了
https://blog.csdn.net/weixin_43693946/article/details/127538660
此中提到一个python默认是2的问题,应修改为默认的
python 3.8.10
,可以参照评论区的建议,执行命令后,重新运行./build_ros.sh
即可,注意重新运行时建议先阅读此sh
脚本内容,将对应的build
文件夹先删除再运行1
sudo apt install python-is-python3
https://blog.csdn.net/Robot_Starscream/article/details/89435642