如何在 Ubuntu18.04 上用 Opencv4.5.2+Melodic+ 电脑自带摄像头跑通 ORB-SLAM2
前言
最近研究了一下如何在 Ubuntu18.04 上用 Opencv4.5.2+Melodic+ 电脑自带摄像头跑通 ORB-SLAM2,摸索的过程也踩了不少坑,所以写下这篇文章来总结整个过程。
安装环境
Ubuntu18.04 Linux 发展至今,已经发布了多种版本,镜像文件可以 Ubuntu 官网上下载安装版本选择 对于虚拟机,就不再这里推荐了,建议直接上双系统,这里可能又会出现两个问题:
Melodic 关于 Melodic 的安装,可以参考我之前的一篇文章ROS 是什么及 ROS 的安装
ORB-SLAM2 想要将 ORB-SLAM2[1]跑起来,还需要安装一些必要的依赖库,如 Pangolin、OpenCV、Eigen3 等,这里推荐参考这篇文章ORB-SLAM2“工具安装 和 系统运行“详细过程
以上的安装过程,可能会消耗大量的时间,坑会比较多,但我希望大家在安装时都可以没有报错
构建功能包
第一:首先确定自己有一个 ROS 的工作空间,并对其进行初始化,为下一步创建功能包作准备。
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
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 编译
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 编译
检查测试
roscore
roslaunch usb_cam usb_cam-test.launch
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 版本。
在明白了这一点之后,我经过查找资料,找到了一个比较合适的解决方法。
在解决这个问题过程中所参考的资料
- OpenCV 4.3.0 引入的错误 TlsStorage releaseSlot 导致 crash
- ROS 下使用 Opencv4.4.0,并且使用 cv_bridge 转换 msgs 与 opencv 图像
- 解决 ROS 配置中 cv_bridge 问题
- ORB-SLAM2——(十一)ORBSLAM2 在 ROS 下运行
解决过程
- 下载最新的 vision_opencv,复制文件夹到 cakin_ws/src 目录下
git clone https://github.com/ros-perception/vision_opencv.git 方法 1
git clone https://hub.fastgit,.org/ros-perception/vision_opencv.git 方法 2
cd vision_opencv
cp cv_bridge home/xxx/catkin_ws/src //xxx 为你的用户名
git clone https://github.com/ros-perception/vision_opencv.git 方法 1
git clone 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
)
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
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()
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
cd catkin_ws
catkin_make
如果遇到报错,先解决报错,如果编译没有报错,则运行 ORB-SLAM2
运行效果
首先启动 ROS
roscore
roscore
按住 Ctrl+Alt+T 可以快速创建新的终端 创建一个新终端
roslaunch usb_cam usb_cam-test.launch
roslaunch usb_cam usb_cam-test.launch
再创建一个新终端
rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM2.yaml
rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM2.yaml
这里是单目相机情况下的具体演示效果
以上就是本文的全部内容,本文写的比较粗糙,之后会补上缺失的部分重要内容。
参考
致谢
OK!本期关于如何在 Ubuntu18.04 上用 Opencv4.5.2+Melodic+ 电脑自带摄像头跑通 ORB-SLAM2 就到此为止。喜欢的话请支持、转发、订阅!同时也欢迎各位大佬指出不足之处!在此本人万分感谢!