Ubuntu20.04下ROS自带的Opencv4与SLAM项目工程所需的Opencv3冲突

Ubuntu20.04下ROS自带的Opencv4与SLAM项目工程所需的Opencv3冲突

问题描述

本人在跑SLAM项目工程时遇到了编译没问题,运行的时候代码报错,报错的信息只有slam的ros节点终止了,但是具体啥问题也不显示,所以就用了gdb来进行Debug,从而找到报错的地方。
报错信息如下:
图片表示ros节点被终止了,但是没有表明原因。在这里插入图片描述
之后就是利用gdb来进行Debug查找错误,查找信息如下:
在这里插入图片描述
显示opencv的文件有冲突,具体细节如下:
上面几行表明了opencv4.2和下面的opencv3.4不一致,所以大胆猜测时opencv有问题,所以开始上网查找怎么处理。在这里插入图片描述
其中有警告也表明opencv的库有冲突,所以有很大概率是opencv的问题。

warning: libopencv_calib3d.so.3.4, needed by /home/whd/Code/test_semloc/src/SemLoc2/orbslam2_bridge/3rd/ORB_SLAM2/lib/libORB_SLAM2.so, may conflict with libopencv_calib3d.so.4.2
warning: libopencv_highgui.so.3.4, needed by /home/whd/Code/test_semloc/src/SemLoc2/orbslam2_bridge/3rd/ORB_SLAM2/lib/libORB_SLAM2.so, may conflict with libopencv_highgui.so.4.2
libopencv_core.so.3.4, needed by /home/whd/Code/test_semloc/src/SemLoc2/orbslam2_bridge/3rd/ORB_SLAM2/lib/libORB_SLAM2.so, may conflict with libopencv_core.so.4.2
warning: libopencv_imgcodecs.so.3.4, needed by /home/whd/Library/opencv-3.4.3/build/lib/libopencv_highgui.so.3.4.3, may conflict with libopencv_imgcodecs.so.4.2

网上有很多有关ros的opencv库与自己下载的库版本冲突的解决方案,有的是添加路径,还有的是修改cv_bridge文件,还有的删除库文件,这些除了删除库文件没有尝试,其他的也或多或少尝试了一番,但是效果甚微还是报错,在折磨了我两天之后,终于将这个问题解决,后面将会给出参考的文章链接。

参考链接

https://blog.csdn.net/weixin_35695879/article/details/85254399
(这个是利用gdb来对ros进行Debug。)
https://blog.csdn.net/qq_45945548/article/details/125105725
(我通过这篇文章知道了我确实有两个opencv的库,并且位置不一样,会造成冲突,即90%的报错原因应该是这个。)
https://blog.csdn.net/m0_46611008/article/details/124321527
(这个是修改cv_bridge文件的方法,不要轻易尝试,之前跑vins_mono的时候确实有用,但是这次修改完之后会报很多错误,不要轻易尝试!)
https://blog.csdn.net/m0_46905397/article/details/128757155
(这篇是我解决问题的关键。)

解决方案

我在原本的ros工作空间的src文件下自己新下载了一个cv_bridge库文件,并且把cv_bridge的位置和指定需要的那个opencv的文件路径写到了报错工程(例如我的是orbslam2_mono_node节点报错,对应的是我orbslam2_bridge的CMakeLists.txt)的CMakeLists.txt文件里面,如下图:
在这里插入图片描述
在这里插入图片描述

set(OpenCV_DIR "/home/whd/Library/opencv-3.4.3/build")
set(cv_bridge_DIR /home/whd/Code/test_semloc/src/cv_bridge/cmake)

其中这两个库文件的路径的查找如下:
opencv3.4.3是我通过源码安装的,所以就在我自己设置的文件夹里面:
在这里插入图片描述
那个cv_bridge前面提到了,我将它下载到了ros的工作空间的src文件夹里面:
在这里插入图片描述
本来以为这样之后会可以了,但是还是不行,还是在报错,我又仔细看了一下,发现还是有冲突,虽然将cv_bridge的路径添加上了,但是cv_bridge链接的还是opencv4的库文件,需要将它改为我需要的opencv3,即将下载的cv_bridge的CMakeLists.txt文件里面进行修改。
这是cv_bridge的CMakeLists.txt文件里面的内容。在这里插入图片描述
修改为:
在这里插入图片描述
此时再将所有的程序流程走一遍,编译无问题,运行的时候可以运行,但是rviz里面不显示图片,之后将ros工作空间里面的build文件和devel文件删掉,再重新catkin_make一下,程序成功运行!!!

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值