Ubuntu18.04 ROS Melodic的cv_bridge指向问题

2023-05-16

由于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路径中(上面有写)。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04 ROS Melodic的cv_bridge指向问题 的相关文章

  • 无人飞行器智能感知竞赛--模拟器安装

    开发环境 win11 wsl2 注意事项 请配合视频使用 如果不看视频会对下面的配置过程迷惑 因为一开始我是想安装在ubuntu18 04的 中途发现ubuntu18 04没有ros noetic 所以转入ubuntu20 04配置 视频链
  • ros 中ERROR: cannot download default sources list from: https://raw.githubusercontent.com/ros/rosdist

    ros 中ERROR cannot download default sources list from https raw githubusercontent com ros rosdistro master rosdep sources
  • 无人驾驶论坛

    1 百度Apollo论坛 http www 51apollo com 2 人工智能中文资讯网 http www ailab cn
  • 关于相机与激光雷达数据采集与标定

    最近在做一个关于车路协同的项目 需要做一个路侧系统 传感器有摄像头和激光雷达 相机和激光雷达联合标定费了老半天劲 在此记录一下 雷达时间戳不对 导致摄像头和雷达的数据无法对齐 解决办法 修改雷达驱动发布点云消息时的时间戳 相机内参标定可以使
  • Ubuntu镜像下载地址

    镜像地址https launchpad net ubuntu cdmirrors
  • GG-CNN代码学习

    文章目录 1 源码网址 https github com dougsm ggcnn 2 数据集格式转化 下载后的康奈尔数据集 解压完之后里面的格式 里面的 tiff图像通过 txt文件转化得到 python m utils dataset
  • ROS turtlebot_follower :让机器人跟随我们移动

    ROS turtlebot follower 学习 首先在catkin ws src目录下载源码 地址 https github com turtlebot turtlebot apps git 了解代码见注释 其中有些地方我也不是很明白
  • ModuleNotFoundError: No module named ‘rosbag‘

    1 ModuleNotFoundError No module named rosbag File opt ros kinetic lib python2 7 dist packages roslib launcher py line 42
  • 清华大学开源软件镜像站网址

    清华大学 TUNA 协会原名清华大学学生网管会 注册名清华大学学生网络与开源软件协会 是由清华大学网络技术和开源软件爱好者 技术宅组成的团体 现阶段向校内外提供开源软件镜像等服务 清华大学 TUNA 协会清华大学 TUNA 协会原名清华大学
  • 《学习篇》学会这18个常用ROS命令集合就能入门ROS了

    常用ROS命令概述 ROS常用命令可以按照其使用场景分为ROSshell命令 ROS执行命令 ROS信息命令 ROS catkin命令与ROS功能包命令 虽然很难从一开始就很熟练地使用所有的命令 但是随着使用的次数增多 你会发现常用的几个R
  • 《机器人操作系统入门》课程代码示例安装出错解决方法

    问题描述 学习 机器人操作系统入门 课程时 在Ubuntu 16 04 上安装了kinetic 安装ROS Academy for Beginners时依赖总是报错 如下所示 rosdep install from paths src ig
  • ubuntu18.04命令安装ros2

    ROS2官方文档 本教程为apt get命令安装方式 官网教程有点问题 借鉴一下大佬的安装方式 文章目录 1 安装ROS2 1 1 安装秘钥相关指令 1 2 授权秘钥 1 3 添加ROS2软件源 1 4 安装 2 设置环境 可选但是推荐 2
  • 何时使用桥接模式以及它与适配器模式有何不同?

    有没有人用过桥纹在现实世界的应用程序中 如果有 你是如何使用它的 是我 还是只是适配器模式加入一点依赖注入 它真的值得拥有自己的模式吗 有一个组合费德里科的 and John s答案 When Shape Rectangle Circle
  • 将本地 mosquitto 桥接到云代理

    我正在尝试将本地 mosquitto 在树莓派上 桥接到某个云代理 以便我可以发送数据并使用该数据控制某些设备 我尝试使用 Cloudmqtt 和 dioty 但没有成功 在 cloudmqtt 的情况下 我被告知 mosquitto co
  • catkin_make后找不到ROS包

    我根据 ROS 的 Wiki 页面创建了一个 ROS 工作区 我还使用创建了一个包catkin create pkg在我刚刚创建的工作区下 然后 按照 ROS Wiki 中的步骤使用以下命令构建包catkin make 构建包后 我插入命令
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 可以在catkin工作区之外创建ROS节点吗?

    我想在catkin工作区之外创建一个ROS发布者节点 可以创建吗 当然可以 像对待任何其他 cpp 库或 python 包一样对待 ROS 在Python中你必须保留PYTHONPATH环境变量指向ros包 opt ros kinetic
  • 如何在Docker中支持组播网络

    我在docker中遇到了一个关于网络配置的大问题 情况是这样的 1 我的服务器上有两个 eth eth0 和 eth1 eth0 flags 4163
  • 无法在 Ubuntu 20.04 上安装 ROS Melodic

    我正在尝试使用这些命令在 Ubuntu 20 04 上安装 ROS Melodic sudo sh c echo deb http packages ros org ros ubuntu lsb release sc main gt etc
  • 安装 ROS 时 Cmake 未检测到 boost-python

    我一直在尝试在我的 Mac 上安装 ROS 并根据不同版本的 boost 使用不同的库解决了错误 然而 似乎有一个库甚至没有检测到 boost python 这是我得到的错误 CMake Error at usr local share c

随机推荐

  • 复位电路的几种设计

    本人转自 xff1a http hi baidu com yinweini2 item 48ba4f12f54587711009b591 复位源是导致单片机内部复位操作的源泉 xff0c 大致可分为七种 xff1a 上电复位 xff08 P
  • Hadoop入门经典:WordCount

    以下程序在hadoop1 2 1上测试成功 本例先将源代码呈现 xff0c 然后详细说明执行步骤 xff0c 最后对源代码及执行过程进行分析 一 源代码 package org jediael hadoopdemo wordcount im
  • Jlink 采用 SWD 模式下载电路接法

    在Jlink上 xff1a 对应的电路图为 xff1a 其中要使用的是 Pin1 gt vcc Pin7 gt SWDIO Pin9 gt SWCLK Pin4 gt GND 其他GND 引脚也可 在对于的开发板 xff08 举例 xff1
  • ubuntu系统硬盘温度过高的解决方法

    一 更改swap分区设置 在ubuntu 里面 xff0c swappiness的值的大小对如何使用swap分区是有着很大的联系的 swappiness 61 0的时候表示最大限度使用物理内存 xff0c 然后才是 swap空间 xff0c
  • MBus协议详解(一)

    看了许多关于MBus协议的资料 xff0c 感觉说的不具体 不完整 也不系统 xff0c 本人准备结合一个具体的产品实现 xff0c 从理论和实现上对MBus协议做一个详细的论述 xff0c 如有不当之处 xff0c 欢迎讨论 1 介绍 M
  • MBus协议详解(二)

    4 4 slave 设计 传输特性 xff1a slaves 被设计为具有两种不同恒定 sink 电流 xff0c 因此在总线上电压有 1V 的变化的时候 xff0c sink 电流的变化一定不能超过 0 2 为了传输一个 Mark xff
  • 多个进程对同一文件写入的问题

    转载 讨论关于并发环境下 xff0c 多个进程对同一文件写入的问题 xff0c 我们会涉及到文件共享的知识 在开始之前 xff0c 我们先讨论一些有关文件共享的知识 1 文件共享 Unix系统支持在不同进程间共享打开的文件 为此 xff0c
  • Linux内核里的DebugFS

    DebugFS xff0c 顾名思义 xff0c 是一种用于内核调试的虚拟文件系统 xff0c 内核开发者通过debugfs和用户空间交换数据 类似的虚拟文件系统还有procfs和sysfs等 xff0c 这几种虚拟文件系统都并不实际存储在
  • linux 只获取dns服务器地址

    有一款设备需要使用静态ip xff0c 但是还要用到dns解析域名 我的想法是定时去查看 etc resolve conf文件 xff0c 如果为空 xff0c 则获取一次dns 在嵌入式linux中 xff0c 我们使用busybox的u
  • linux更新文件

    最近发现很多同学不知道线上操作替换文件的要点 所以又整理了一下 线上替换一个正在运行进程的文件时 xff08 包括二进制 动态库 需要读取的资源文件等 xff09 应避免使用cp scp操作 而需要使用mv rsync作为替代 原因 xff
  • 大型网站架构与自动化运维——ISCSI安装配置

    ISCSI安装配置 一 存储简述 1 DAS xff1a 即直连方式存储 xff0c 英文全称是Direct Attached Storage 直接附加存储 顾名思义 xff0c 在这种方式中 xff0c 存储设备是通过电缆 xff08 通
  • Homebrew brew安装报错:Failed to connect to raw.githubusercontent.com port 443: Operation timed out

    报错 xff1a Failed to connect to raw githubusercontent com port 443 Operation timed out 解决方案 liukeruideMacBook Pro liukerui
  • 正则表达式中(?:)、(?=)以及(?!)等的用法

    out 61 re findall r 39 d 43 61 abc 39 34 1abc 34 只抽取数字 xff0c 并且该数字后面跟的字符是 34 abc 34 print out out1 61 re findall r 39 d
  • Oracle 12C rman备份的坑,搞不好就会hang死

    RMAN Backup to Platform Temporarily Creates DMP File in ORACLE HOME dbs 文档 ID 2349921 1 This has been reported as BUG 25
  • Linux 上安装配置 VNC Server

    一 简介 VNC Virtual Network Console xff0c 即 虚拟网络控制台 它是一款优秀的远程控制工具软件 xff0c 而且是基于 UNIX 和 Linux 操作系统的免费开源的 1 优点 远程控制能力强大 xff0c
  • Xshell能ping通但连不上CentOS 7

    转 xff1a https blog csdn net trackle400 article details 52755571 在虚拟机 xff08 Vmware Workstation xff09 下 xff0c 安装了CentOS7 x
  • Pandas RuntimeWarning: More than 20 figures have been opened. Figures created plt.close()也不起作用

    以下是源代码 xff0c 结果 xff1a function里有个for循环 xff0c 在每一次循环都有plt close xff0c 但是还是报错 xff1a More than 20 figures have been opened
  • 为企业提供存储功能的Red Hat Stratis 2.0.1发布了

    导读Red Hat的Stratis存储项目用于在Linux上提供企业存储功能 xff0c 以与ZFS和Btrfs之类的产品竞争 xff0c 同时在LVM和XFS之上构建 xff0c 这是其2020年守护进程的首次更新 通过Stratis x
  • 【转载】Java基本类型的Writable封装

    Java基本类型的Writable封装 目前Java基本类型对应的Writable封装如表所示 所有这些Writable类都继承自WritableComparable 也就是说 xff0c 它们是可比较的 同时 xff0c 它们都有get
  • Ubuntu18.04 ROS Melodic的cv_bridge指向问题

    由于ROS Melodic自带的是Opencv3 2 0 xff0c 而我自己下载的是opencv3 4 5 xff0c 所以需要将cv bridge的指向改为我自己安装的opencv 全篇很长 xff0c 建议看完后操作 xff0c 不要