ubuntu20.04 解决ros,cv_bridge,opencv连接以及vins-mono,vins-fusion,pl-vins等运行问题

ubnutu下经常用到ROS,ubnutu20.04安装ros时自带opencv4.2,但是很多工程用到的opencv都是低版本opencv3系列,比如vins-mono就依赖opencv3。

虽然很多教程说在CMakeLists指定opencv版本,但是会出现很多问题:

error: ‘CV_RGB2GRAY’ was not declared in this scope

或者警告

/usr/bin/ld: warning: libopencv_calib3d.so.3.3, needed by /home/gl/SLAM/pl_vins_ws/devel/lib/libcamera_model.so, may conflict with libopencv_calib3d.so.4.2

解决各种bug虽然编译没问题了,但是运行不了。

究其原因,是因为在安装ROS时,cv_bridge默认连接了4.2版本的opencv进行编译。只修改CMakeLists中opencv的路径,编译可能没问题,但在代码执行时如果引用到libcv_bridge.so,还是会链接到opencv原来的版本。

解决方案
重新安装cv_bridge这个包

1.卸载原来版本的cv_bridge(也可以不卸载)

sudo apt-get remove ros-noctic-cv-bridge

2.去下载最新的cv_bridge包,直接下载对应ros版本的,比如noctic就下载这个

GitHub - ros-perception/vision_opencv

0ee5e6e181d84f0bae9ea962765cbf63.png
 

 3.更改对应的cv_bridge

打开下载的包,打开cv_bridge,编辑CMakeLists里内容,将里面opencv部分替换为自己安装的opencv,并且把工程项目名改成cv_bridge331(对应opencv的版本,便于区分),package.xml中也需要改成cv_bridge331.

2ba00d34e4ac4878b96346707b52156a.png

c1b72946133c4419b8bc45586b97c65d.png

4.编译工作空间,例如vins-mono工作空间:

复制刚才更改的cv_bridge到vins-mono的src下(注意此时src里不能有vins-mono的源码)

然后在vins-mono的工作空间下执行catkin_make命令,这一步就是为了先编译cv_bridge331,这样就会使编译vins-mono源码时优先使用自己编译的cv_bridge331,编译后source下环境变量。

然后把vins-mono的源码下载到src下,跟cv_bridge在同一级。

接下来在vins-mono的Cmakelists.txt中指定自己的opencv包和路径以及cv_bridge改成cv_bridge331,保存。

4ba38c7fbe2e4166963eef32dfb5fff3.png

 所有用到opencv的地方都改掉。

然后再次在vins-mono工作空间执行catkin_make命令编译vins-mono源码,经过上面操作就不会编译有警告,也能正常运行。

编译完成后再source一下环境变量。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值