问题原因:

1.ubuntu20.04安装了ROS Noetic自带OpenCV 4,而VINS-Mono适配OpenCV 3,所以在编译过程中会产生诸如:error: ‘CV_BGR2GRAY’ was not declared in this scope等错误。为了解决OpenCV版本不一致所带来的问题,因此安装了OpenCV 3,编译顺利通过。

2.虽然编译通过,但是会有Warnings,提示opencv3的cv::bridge和opencv4的cv::bridge可能存在冲突。在涉及 ros 的算法中,涉及图像就必然要使用到 cv_bridge 这个包,而 cv_bridge 这个包默认使用的 ros 自带的 opencv 版本。因此,代码工程中同时使用了 2 个版本的 opencv,虽然编译能过,但是一旦运行就会冲突报错。

解决办法:

最好不要动已有的cv::bridge,使用适配OpenCV 3的cv::bridge是更好的选择,然后修改VINS-Mono中用到cv_bridge的CMakeLists

一、编译cv::bridge

1.新建ros工作空间cv_bridge_ws,将cv_bridge包克隆到src目录下

mkdir -p ~/cv_bridge_ws/src

cd cv_bridge_ws/src

git clone https://gitee.com/bingobinlw/cv_bridge.git

2.修改cv_bridge包中CMakeLists.txt OpenCV的路径

set(OpenCV_DIR "/home/hnu/software/opencv-3.3.0/build")

3.编译

catkin_make

4.可能存在的问题Could not find a package configuration file provided by “boost_python3" 将 CMakeLists.txt 中的如下语句:

if(NOT ANDROID)

find_package(PythonLibs)

if(PYTHONLIBS_VERSION_STRING VERSION_LESS 3)

find_package(Boost REQUIRED python)

else()

find_package(Boost REQUIRED python3)

endif()

else()

find_package(Boost REQUIRED)

endif()

修改为:

if(NOT ANDROID)

find_package(PythonLibs)

# if(PYTHONLIBS_VERSION_STRING VERSION_LESS 3)

find_package(Boost REQUIRED python)

# else()

# find_package(Boost REQUIRED python3)

# endif()

else()

find_package(Boost REQUIRED)

endif()

二、修改VINS-Mnon中使用cv_bridge的CMakeLists.txt

在ar_demo,feature_tracker,pose_graph,vins_estimator这四个包的CMakeLists.txt find_package()语句前加上下面的语句

set(cv_bridge_DIR "/home/hnu/cv_bridge_ws/devel/share/cv_bridge/cmake")

三、重新编译VINS-Mono

参考的解决方案:

ubuntu20.04下opencv版本不兼容问题 - 知乎

cv_bridge for melodic - 知乎

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: