Ubuntu18.04 ROS Melodic的cv_bridge指向问题(四种方式,包括opencv4)

这篇具有很好参考价值的文章主要介绍了Ubuntu18.04 ROS Melodic的cv_bridge指向问题(四种方式,包括opencv4)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

备注:2023.7.4修改,如果是ros空间,可以在工作空间中使用单独cv_bridge的方式!!!比较简单,是我目前常用的方式。放在文章最后。


由于ROS Melodic自带的是Opencv3.2.0,而我自己下载的是opencv3.4.5,所以需要将cv_bridge的指向改为我自己安装的opencv。

全篇很长,建议看完后操作,不要跟着做。

一开始我参考了这个博主的文章

Ubuntu18.04 ros-melodic opencv版本冲突问题解决_一抹烟霞的博客-CSDN博客_rosopencv版本

但是在编译ORB-SLAM3(beta0.4)时报错,在/usr/lib/x86_64-linux-gnu/中找不到libopencv_core.so.3.4.5、libopencv_imgproc.so.3.4.5和libopencv_imgcodecs.so.3.4.5

于是我在上面博主修改的基础上做了如下修改:(没有加入/usr/include)

sudo gedit /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake
###作出如下修改
​
if(NOT "include;/usr/include;/usr/include/opencv " STREQUAL " ")
  set(cv_bridge_INCLUDE_DIRS "")
  #set(_include_dirs "include;/usr/include;/usr/include/opencv")
  set(_include_dirs "include;/usr/local/lib;/usr/local/include/opencv;/usr/local/include/opencv2;/usr/local/include;")

以及

set(libraries "cv_bridge;/usr/local/lib/libopencv_core.so.3.4.5;/usr/local/lib/libopencv_imgproc.so.3.4.5;/usr/local/lib/libopencv_imgcodecs.so.3.4.5")

然后再修改文件

sudo gedit /opt/ros/melodic/share/cv_bridge/cmake/cv_bridge-extras.cmake
###作出如下修改
set(OpenCV_VERSION 3.4.5)
set(OpenCV_VERSION_MAJOR 3)
set(OpenCV_VERSION_MINOR 4)
set(OpenCV_VERSION_PATCH 5)

 以及

cd /opt/ros/melodic/lib/
sudo gedit pkgconfig/cv_bridge.pc
##做如下修改
Libs: -L${prefix}/lib -lcv_bridge /usr/local/lib/libopencv_core.so.3.4.5 /usr/local/lib/libopencv_imgproc.so.3.4.5 /usr/local/lib/libopencv_imgcodecs.so.3.4.5

 这个时候编译ORB-SLAM3可以通过了,但是运行rosrun ORB-SLAM3时候会出现段错误,然后退出。我将所有的cmakelist中的opencv都改成opencv 3.4.5后重新编译依旧不行。

接着我把他放一边尝试使用Vins-fusion,编译到最后的时候报警告

/usr/bin/ld: warning: libopencv_imgcodecs.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.3.4
/usr/bin/ld: warning: libopencv_core.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4

同时rosrun vins_node 运行闪退,根据警告是动态连接库libcv_brdge.so问题

然后我在vins_fusion的catkin_ws文件夹中运行查看连接库

ldd devel/lib/libvins_lib.so | grep opencv

输出:

	libopencv_core.so.3.4 => /usr/local/lib/libopencv_core.so.3.4 (0x00007f7b2d122000)
	libopencv_imgproc.so.3.4 => /usr/local/lib/libopencv_imgproc.so.3.4 (0x00007f7b2a304000)
	libopencv_imgcodecs.so.3.4 => /usr/local/lib/libopencv_imgcodecs.so.3.4 (0x00007f7b29a6e000)
	libopencv_video.so.3.4 => /usr/local/lib/libopencv_video.so.3.4 (0x00007f7b27ce3000)
	libopencv_calib3d.so.3.4 => /usr/local/lib/libopencv_calib3d.so.3.4 (0x00007f7b27955000)
	libopencv_imgcodecs.so.3.2 => /usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2 (0x00007f7b262d8000)
	libopencv_imgproc.so.3.2 => /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.3.2 (0x00007f7b25a7f000)
	libopencv_core.so.3.2 => /usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2 (0x00007f7b25644000)
	libopencv_features2d.so.3.4 => /usr/local/lib/libopencv_features2d.so.3.4 (0x00007f7b21d25000)
	libopencv_flann.so.3.4 => /usr/local/lib/libopencv_flann.so.3.4 (0x00007f7b21acd000)

可以看到其中有三个连接库出问题了。

cd /opt/ros/melodic/lib/
ldd libcv_bridge.so | grep opencv
##如下输出
	libopencv_imgcodecs.so.3.2 => /usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2 (0x00007fd8d2bed000)
	libopencv_imgproc.so.3.2 => /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.3.2 (0x00007fd8cfac7000)
	libopencv_core.so.3.2 => /usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2 (0x00007fd8ce7a9000)

原来是这个出问题了,我只好下载了vision_opencv,链接如下:

GitHub - ros-perception/vision_opencv

进入cv_bridge后

mkdir build && cd build
cmake ..
make
cd devel/lib/
sudo rm /opt/ros/melodic/lib/libcv_bridge.so
sudo cp libcv_bridge.so /opt/opt/ros/melodic/lib/

终于一切恢复了正常,经过了一番折腾,不知道后续是否还会有问题。所以我还是用源码的cv_bridge

cd cv_bridge/build/
sudo make install

然后将vins和orb中需要opencv的CMakerlist中在find_package之前加入

set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)

然后重新编译工程,完美通过。使用也没问题。然后删除原来的cv_bridge

sudo apt remove ros-melodic-cv-bridge

然后使用ORB和vins没有问题。

后记:

后来我尝试不做上述修改(删除ros重新装了,好累。。。),然后删除了工程中的build文件夹重新尝试了一次,编译ORB-SLAM3的ros包时候报错

[rosbuild] Building package ORB_SLAM3
Failed to invoke /opt/ros/melodic/bin/rospack deps-manifests ORB_SLAM3
[rospack] Error: package 'ORB_SLAM3' depends on non-existent package 'cv_bridge' and rosdep claims that it is not a system dependency. Check the ROS_PACKAGE_PATH or try calling 'rosdep update'


CMake Error at /opt/ros/melodic/share/ros/core/rosbuild/public.cmake:129 (message):
  

  Failed to invoke rospack to get compile flags for package 'ORB_SLAM3'.
  Look above for errors from rospack itself.  Aborting.  Please fix the
  broken dependency!

Call Stack (most recent call first):
  /opt/ros/melodic/share/ros/core/rosbuild/public.cmake:207 (rosbuild_invoke_rospack)
  CMakeLists.txt:4 (rosbuild_init)

大概就是找不到ros的cv_bridge,也找不到我安装的cv_bridge,我也尝试rosdep update,但是没什么用,所以我将在/usr/local/share/中的cv_bridge文件夹复制到/opt/ros/melodic/share/中,然后再次./build_ros.sh就可以通过了。

分析:我觉得一开始我使用的是原本的cv_bridge来进行编译的,经过修改后可以使用,然后我将cv_bridge用apt删除后,系统自动在/usr/local/中找到了我安装的cv_bridge,所以也可以正常使用。但是后来尝试从新开始,ros中不做修改,编译ORB-SLAM3会有警告,说明用的还是ros安装时候自带的cv_bridge,删除自带的以后编译又找不到我自己安装的,就会报找不到cv_bridge,这个时候我把我安装的cv_bridge复制到ros中就可以编译通过了。

总结方法:

1、修改ros的cv_bridge

2、不删除原来的cv_bridge,安装源码的cvbridge,然后在cmakelist中修改,编译完成后apt删除原来的bridge。

3、删除原来的cv_bridge,安装源码bridge,然后cmakelist中修改,并复制/usr/local/share中的bridge到ros路径中(上面有写)。


因为opencv和cv_bridge指向的问题,如果是一个ros工程,有一个ros空间,那么我们可以下载cv_bidge到工作空间的src文件夹中。其中opencv3用melodic,opencv4用noetic。一个工程一个cv_bridge(井水不犯河水)

GitHub - ros-perception/vision_opencv

1、为了防止冲突将cv_bridge下 CMakeLists.txt 文件中 project 名称修改为 my_cv_bridge:

project(my_cv_bridge)
修改:
find_package(OpenCV 4.2.0 QUIET)
并修改 package.xml 中包的名称:
<name>my_cv_bridge</name>

2、编译cv_bridge

到工作空间的根目录,执行 catkin_make

可能会报错:

Could not fild the following Boost libraries:
boost_python37

解决:

修改cv_bridge的CMAKELIST中
...
if(PYTHONLIBS_VERSION_STRING VERSION_LESS "3.8")
# Debian Buster
find_package(Boost REQUIRED python36)
...

还有错:

/usr/include/python2.7/numpy/__ multiarray_api.h:1537:144:error:return-statement with ∩o
value,in function returning 'void*' [ -fpermissive ]

解决:

修改 cv_bridge/src/module.hpp 文件下
void* do_numpy_import()函数改为:
static void do_numpy_import( )
{
    import_array( );
}

编译通过了。

3、使用

在你的工程cmakelist中
find_package(my_cv_bridge)


同时修改 package.xml 文件:
...
<build_depend>my_cv_bridge</build_depend>
...
<exec_depend>my_cv_bridge</exec_depend>
...

再次编译即可了。文章来源地址https://www.toymoban.com/news/detail-605273.html

到了这里,关于Ubuntu18.04 ROS Melodic的cv_bridge指向问题(四种方式,包括opencv4)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu18.04LTS离线安装ROS Melodic(解决rosdep init与rosdep update问题)

    因为公司调试电脑无法连接互联网,所以安装 ROS 很让人头疼。但安装 ROS 无非就是安装一些 deb 包与其对应的依赖,既然这样只要下载好需要的 deb 包,再离线安装就可以。在联网电脑上使用 apt install 安装 ROS 时候,会在 /var/cache/apt/archives/ 下保存下载的安装包和依赖包,但如

    2024年02月09日
    浏览(40)
  • Ubuntu18.04+ros-melodic Fast-lio2安装与实物运行【速腾16线+imu】

    对应使用方法: 速腾16线激光雷达(RS-Hellos-16P)在windows与ubuntu18.04下的调试与点云数据格式转换(pointclould2-->laserscan)_百川01的博客-CSDN博客使用2D雷达laser+imu实现cartographer实时建图_百川01的博客-CSDN博客 参考链接:使用速腾雷达32线Helios和fast-LIO2算法建图(一)_32线雷达数

    2024年02月16日
    浏览(73)
  • Ubuntu18.04 ROS melodic环境下,通过Gazebo软件仿真SLAM算法的学习(gmapping/karto/cartographer/hector)

    目录 一 环境场景搭建world 1.下载insert插件(该插件下会提供一些建好的场景,也可不下载) 2.环境搭建(自建) 3.保存环境 4.配置修改 5.启动环境 二 机器人模型URDF 1.模型创建的文件书写规范 2.检查文件格式是否正确 3.启动模型 三 机器人在场景中运动 1.机器人放在场景中

    2024年02月04日
    浏览(48)
  • ubuntu18、20 cv_bridge 与自带opencv版本冲突问题

    背景: nvidia tx2、xvaier 装机自带 ubuntu18 + opencv4  后来我们会安装melodic的ros,ros中的cv_bridge 默认cv版本是3.2.0 编译带cv_bridge的代码时,会报错会崩溃,因为版本冲突了 为了解决该问题, 行之有效的一种解法是重新安装 cv_bridge,使其兼容opencv 4 安装cv_bridge with opencv4 1、git clo

    2024年02月07日
    浏览(46)
  • 【EHub_tx1_tx2_A200】Ubuntu18.04 + ROS_ Melodic + 锐驰LakiBeam 1L单线激光 雷达评测

            大家好,我是虎哥,最近这段时间,又手欠入手了锐驰LakiBeam 1L激光雷达,实在是性价比太优秀,话说,最近激光雷达圈确实有点卷。锐驰官网的资料已经很丰富,我这里总结一下自己的简单测试经验,分享给大家。          LakiBeam1L是锐驰智光面向中低速场

    2024年02月03日
    浏览(43)
  • ubuntu20.04安装opencv 3.2.0以及cv_bridge踩坑记录

    本次安装是在我的双系统下安装的,不同ubuntu版本或者不同硬件平台情况也许会有所不同,仅供参考。 第一步: 我采用的是github官方代码仓库下载安装的方式,下载的是3.2.0版本(其余版本安装过程类似) opencv官方链接 第二步:安装依赖项 值得一提的是,在此处我遇到过

    2024年02月04日
    浏览(58)
  • 解决ROS的cv_bridge与自己安装的opencv的版本冲突的问题

    如果用ROS的topic传输图片,需要用到cv_bridge,这是个ros自带的opencv中的库,如果此时项目中引用了自己安装的opencv,自己安装的opencv会与ros自带的opencv中的cv_bridge冲突。编译时弹出 warning: libopencv_imgproc.so.407, needed by /usr/local/lib/libopencv_features2d.so.4.7.0, may conflict with libopencv_imgp

    2024年02月03日
    浏览(41)
  • Ubuntu18.04安装ROS

    目录 一、安装ROS 1、ROS简介 2、安装ROS  二、ROS初步使用 1、小海龟  2、控制小海龟走圆形 (1)、创建工作空间  (2)、编译工作空间  (3)、配置环境变量  (4)、画圆程序的编写  (5)、控制小海龟走圆形  三、总结   机器人操作系统(Robot Operating System, ROS)是一个应

    2024年02月14日
    浏览(50)
  • ubuntu18.04安装ROS讲解

    首先,ubuntu18.04对应的ROS版本为melidic。 打开\\\"软件与更新\\\"对话框,把可从互联网下载下的几个框框都打勾。如图: 更换安装源 官方默认安装源不稳定,常出现在安装过程中网络超时等报错,现使用清华的安装源: 或者中科大安装源: 输入代码后,按回车,输入管理员密码即

    2023年04月24日
    浏览(62)
  • ROS的安装【Ubuntu18.04版本】

    ROS是机器人学习所需要用到的平台软件,记录一下装的过程,为下一次重装节省一下时间嘻嘻。 目录 一.设置sources.list 二.设置密匙 三.安装   四.配置环境   五.检测ros是否安装成 【在设置密匙的时候可能会遇见以下问题,没有找到有效的openPGP数据】  【解决方案如下】 

    2024年02月02日
    浏览(102)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包