如何在Ubuntu18.04上用Opencv4.5.2+Melodic+电脑自带摄像头跑通ORB-SLAM2
前言
一、安装环境
-
Ubuntu18.04
Linux发展至今,已经发布了多种版本,镜像文件可以Ubuntu官网上下载安装版本选择
对于虚拟机,就不再这里推荐了,建议直接上双系统,这里可能又会出现两个问题:
1.需不需要再加装一块固态硬盘 ?
2.之后万一系统崩了,怎么快速恢复?
我个人建议,如果可以,就再加装一块固态硬盘,关于拆机的问题,可以参考这篇文章
关于双系统的安装,可以参考这篇文章 -
Melodic
关于Melodic的安装,可以参考我之前的一篇文章ROS是什么及ROS的安装 -
ORB-SLAM2
想要将ORB-SLAM2跑起来,还需要安装一些必要的依赖库,如Pangolin、OpenCV、Eigen3等,这里推荐参考这篇文章ORB-SLAM2 “工具安装 和 系统运行“ 详细过程
以上的安装过程,可能会消耗大量的时间,坑会比较多,但我希望大家在安装时都可以没有报错
二、构建功能包
第一:首先确定自己有一个ROS的工作空间,并对其进行初始化,为下一步创建功能包作准备。
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
第二:开始构建发布话题的摄像头调用功能包,这里建议直接借用官方给出的usb_cam功能包
cd catkin_ws/src
//git拉取代码,如果速度很慢,使用方法2拉取,如果没有安装git,请根据提示安装git即可,或者自行百度一下
git clone https://github.com/bosch-ros-pkg/usb_cam usb_cam //方法1
git clone https://hub.fastgit.org/bosch-ros-pkg/usb_cam usb_cam //方法2
cd usb_cam
mkdir build
cd build
cmake .. //Cmake编译
make //make编译
第三:打开ROS检查,功能包是否编译正常
roscore
roslaunch usb_cam usb_cam-test.launch
如果得到如下图的效果即为正常
其余的一些操作可以参考这篇文章用电脑自带的摄像头跑orb_slam2
第四:如果在操作到这一步中遇到了如下图的问题
我在安装Opencv时没有指定安装的版本,所以最后安装Opencv的版本为Opencv4.5.2,而在ROS中集成的Opencv为Opencv3.2.0。开始时由于对Opencv了解比较少,所以在这里卡了很久,在查了一些资料之后,发现可能是Opencv版本冲突的问题,在ORB-SLAM2中Cmakelist中我并没有指定Opencv库的调用位置,所以,在运行ORB-SLAM2时,会自动的指向ROS(Melodic)中自带的Opencv版本。所以在明白了这一点之后,我经过查找资料,找到了一个比较合适的解决方法。
在解决这个问题过程中所参考的资料
1.OpenCV 4.3.0 引入的错误 TlsStorage releaseSlot 导致 crash
2.ROS下使用Opencv4.4.0,并且使用cv_bridge转换msgs与opencv图像
3.解决ROS配置中cv_bridge问题
4.ORB-SLAM2——(十一)ORBSLAM2在ROS下运行
这里也简述一下我的解决过程
- 下载最新的vision_opencv,复制文件夹到cakin_ws/src目录下
注意这里要下载对应自己ROS版本分支的文件,比如我的ROS是melodic,那么需要在git clone时指定对应分支。
git clone -b melodic https://github.com/ros-perception/vision_opencv.git 方法1
git clone -b melodic https://hub.fastgit.org/ros-perception/vision_opencv.git 方法2
cd vision_opencv
cp cv_bridge home/xxx/catkin_ws/src //xxx为你的用户名
2.更改cv_bridge中的Opencv版本,改成与自己安装版本一至,如我安装的版本为4.5.2,则需要对cv_bridge下的CMakeLists.txt文件中的这一部分进行修改。
find_package(OpenCV 4 REQUIRED
COMPONENTS
opencv_core
opencv_imgproc
opencv_imgcodecs
CONFIG
)
3.编译cv_bridge
cd cv_bridge
mkdir build
cd build
cmake ..
make
然后在ORB-SLAM2下修改CMakeLists.txt,添加第一句set()来指定在运行ORB-SLAM2时,cv_bridge的路径,这样应该就可以避免多个Opencv版本之间的冲突问题。
set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake) //在find_package前面
find_package(OpenCV 4 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()
4.重新编译整个工作空间
cd catkin_ws
catkin_make
如果遇到报错,先解决报错,如果编译没有报
三、运行效果
首先启动ROS
roscore
按住Ctrl+Alt+T可以快速创建新的终端
创建一个新终端
roslaunch usb_cam usb_cam-test.launch
再创建一个新终端
rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM2.yaml
需要先对相机进行初始化,获取到一定数量的关键帧,然后才能进行SLAM点云建图。
这里是单目相机情况下的具体演示效果
总结
以上就是本文的内容,本文介绍了如何在Ubuntu18.04上用Opencv4.5.2+Melodic+电脑自带摄像头跑通ORB-SLAM2,本文写的比较粗糙,之后会补上缺失的部分重要内容。这里立一个Flag,之后会在对ORB-SLAM2有一个系统全面的分析和源码解析博客。
参考资料:
(1)《ROS机器人开发实践》 胡春旭著
(2) ROS官网 http://wiki.ros.org/melodic/Installation/Ubuntu
如需转载请注明:转自CSDN甦傑
欢迎持续关注 我的ROS专栏