【ROS | OpenCV】在ROS中实现多版本OpenCV、cv_bridge共存:安装与配置指南

在 Ubuntu 20.04 中,ROS Noetic 默认安装的 OpenCV 版本为 4.2.0。如果您需要确认系统中已安装的 OpenCV 版本,可以使用以下命令:

sudo find / -iname "*opencv*"

然而,许多开源算法都是基于 OpenCV 3 编写的,如果要修改代码就非常麻烦。另一方面,一些程序可能可能又依赖高版本的OpenCV,比如4.5版本。这时就需要在系统中安装多个版本的OpenCV。

为了实现多个版本的共存,我们希望在不删除自带的 OpenCV 4 的情况下,编译安装 OpenCV 3 及其 contrib 库,并使得 cv_bridge 能够支持多版本。

本教程将介绍在不影响ROS中自带的 OpenCV 和 cv_bridge 的情况下,如何实现多版本 OpenCV 和 cv_bridge 的共存,并且将说明如何修改 CMakeLists 文件来找到指定版本的OpenCV和cv_bridge。本教程理论上对Ubuntu版本与ROS版本没有限制,并且对安装的OpenCV大版本(3或4)也没有要求。只需要注意OpenCV 3 的cv_bridge对应为melodic,而OpenCV 4则为noetic,在下载源码时选择对应版本即可。

0. 安装OpenCV依赖项

首先,更新源以确保系统处于最新状态:

sudo apt update

接着,安装所需的依赖项:

sudo apt-get install build-essential cmake git pkg-config libavcodec-dev libavformat-dev libswscale-dev libatlas-base-dev gfortran zlib1g-dev ccache autoconf automake libtool checkinstall

为了解决依赖问题,需要添加新的源。然后,安装 libjasper:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

接下来,安装常用的图像工具包以及视频 I/O 包:

sudo apt-get install libjpeg-dev libjpeg8-dev libtiff5-dev libjasper-dev libpng-dev
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

1. 编译 OpenCV 3 及其 contrib 库的源代码:

接下来,需要下载并编译 OpenCV 3 的源代码。可以从官方GitHub下载源代码,并按照以下步骤进行编译安装:

首先,下载 OpenCV 3 的源代码并切换到对应版本:

git clone https://github.com/opencv/opencv.git -b 3.4.14
mv opencv opencv3.4.14
cd opencv3.4.14

接着,下载 OpenCV contrib 模块(请注意版本的对应):

git clone https://github.com/opencv/opencv_contrib.git -b 3.4.14

然后,返回到 opencv 目录,并创建并进入 build 目录:

cd ../
mkdir build
cd build

接下来,配置 OpenCV 的编译选项:

cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \
      -DCMAKE_BUILD_TYPE=RELEASE \
      -DWITH_TBB=ON \
      -DWITH_V4L=ON \
      -DCMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.14 \
      -DBUILD_opencv_vtk=OFF \
      -DWITH_VTK=OFF \
      ..

执行完毕后你大概率会看到编译出现错误:

-- Configuring incomplete, errors occurred!
See also "/home/user/libraries/opencv3.4.14/build/CMakeFiles/CMakeOutput.log".
See also "/home/user/libraries/opencv3.4.14/build/CMakeFiles/CMakeError.log".

这里的错误来自于各种各样的依赖项没有找到或者没有安装,需要翻看报错信息来确定具体问题。可以百度/谷歌相关关键词(比如Could not find xxx)查找解决办法,这里只列举我遇到的一些依赖项问题:

--- Could NOT find PythonLibs (missing:  PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
...
No package 'gstreamer-base-1.0' found
...
looking for ccache --not found
...
-- Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)

解决方法是安装 Python 相关的开发库、gstreamer 相关库、ccache、OpenBLAS 或者 Atlas 、JNI(Java Native Interface)……:

sudo apt-get install python-dev
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install ccache
sudo apt-get install liblapack-dev liblapacke-dev libopenblas-dev
sudo apt install default-jdk

最后,可能会遇到关于 vtkParseOGLExt 的错误,可以通过复制 vtk7 文件解决:

sudo cp ./vtk7 ./vtk

完成以上步骤并且确认没有任何依赖性的问题之后,可以继续进行编译并安装 OpenCV:

make -j12
sudo make install

最好不要满线程!!!可能会卡死。可以先用htop看自己电脑最高可以多线程,然后适当减少一些编译用的线程数

2. 安装cv_bridge

cv_bridge 是用于在ROS和OpenCV图像之间进行转换的重要工具。在ROS Noetic中,默认的 cv_bridge 链接到了 OpenCV 4。为了确保ROS的完整性,并且保持 OpenCV 4 的正常使用,我们不建议卸载默认的 cv_bridge。

为了额外安装适配于 OpenCV 3 的 cv_bridge,首先需要从 cv_bridge 的 GitHub 仓库下载 ros_melodic 版本的 cv_bridge:https://github.com/ros-perception/vision_opencv

下载后,进入 vision_opencv-melodic/cv_bridge 目录,并修改其中的 CMakeLists.txt 文件,有以下两个目的:
(1)将寻找 Boost 的方式改为不区分 Python 版本,防止编译时找不到 boost_python3
(2)添加对自己安装的 OpenCV 3 的路径的设置,防止找不到与 OpenCV 版本兼容的配置文件

具体修改方式如下,注意修改的是下载的cv_bridge中CMakeLists.txt。
在文件开头添加以下内容

cmake_minimum_required(VERSION 2.8)
project(cv_bridge)

# 添加下面的内容
set(OpenCV_DIR /usr/local/opencv3.4.14/share/OpenCV)
set(OpenCV_INCLUDE_DIRS "/usr/local/opencv3.4.14/include")
set(OpenCV_LIBRARIES "/usr/local/opencv3.4.14/lib")

在文件中找到以下代码:

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)
  find_package(Boost REQUIRED python)
else()
  find_package(Boost REQUIRED)
endif()

完成以上修改后,保存并退出 CMakeLists.txt 文件。

接下来,需要在 vision_opencv-melodic/cv_bridge 目录中编译 cv_bridge:

cd vision_opencv-melodic/cv_bridge
mkdir build
cd build
cmake ..
make -j12

最后,使用 make install 命令将 cv_bridge 安装到系统中:

sudo make install DESTDIR=/usr/local/cv_bridge_melodic

这样就完成了 cv_bridge 的安装。现在,您可以在您的 ROS 系统中同时使用适配于 OpenCV 3 的 cv_bridge 和系统自带的 cv_bridge(链接到 OpenCV 4)了。

3. 修改ROS包中的CMakeLists.txt来指定OpenCV和cv_bridge版本

最后,需要在 ROS 包的 CMakeLists.txt 文件中设置 OpenCV 和 cv_bridge 的链接路径。可以按照以下方式设置:

# 在 project(xxx) 后面添加以下两行
set(cv_bridge_DIR /usr/local/cv_bridge_melodic/usr/local/share/cv_bridge/cmake)
set(OpenCV_DIR /usr/local/opencv3.4.14/share/OpenCV)

需要注意的是,对所有使用了 OpenCV 或者 cv_bridge 的 CMakeLists 都需要进行相应的修改,以确保正确链接到指定版本的库。

本教程到此结束。如果在安装过程中遇到任何问题,欢迎在评论中提出。

### 回答1: CV_BridgeROS中常用的一个包,可以将ROS系统中的图像数据OpenCV中的图像数据进行转换。在Ubuntu 18.04和ROS Melodic环境下,编译CV_Bridge包时出现错误,可能是由于缺少依赖库或者包的路径设置不正确导致的。 以下是可能的解决方案: 1. 安装依赖库 首先,您需要检查是否已经安装了必要的依赖库。CV_Bridge包需要OpenCV和Boost库。您可以使用以下命令安装它们: ``` sudo apt-get install libopencv-dev sudo apt-get install libboost-all-dev ``` 2. 设置PKG_CONFIG_PATH环境变量 如果您已经安装OpenCV和Boost库,但是仍然遇到编译错误,可能是因为您的PKG_CONFIG_PATH环境变量没有设置正确。您可以使用以下命令设置它: ``` export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH ``` 3. 更新CATKIN_IGNORE文件 如果以上方法都不能解决问题,您可以尝试更新CV_Bridge包中的CATKIN_IGNORE文件。在CV_Bridge包的根目录中,打开CATKIN_IGNORE文件,并将所有的“opencv2”和“opencv”删除,然后保存文件并重新编译CV_Bridge包。 以上是一些常见的解决方案。如果问题仍然存在,您可以尝试在ROS论坛上寻求帮助,或者参考ROS Wiki上的CV_Bridge页面。 ### 回答2: 在Ubuntu 18.04 melodic环境下,如果编译cv_bridge包时出现错误,可以尝试以下解决方法: 1. 确认已安装必需的依赖项:首先确保已正确安装OpenCVcv_bridge的相关依赖项。可以使用以下命令安装: ``` sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml python3-rospkg-modules python3-dev ``` 2. 更新ROS packages:更新ROS packages可解决编译问题,使用以下命令更新: ``` sudo apt-get update sudo apt-get upgrade ``` 3. 检查CMakeLists.txt文件中的设置:查看cv_bridge的CMakeLists.txt文件,确认编译选项和依赖项是否正确设置。特别注意检查OpenCV的版本和路径是否正确。可以尝试重新配置和构建项目: ``` catkin_make clean catkin_make ``` 4. 检查Python版本:确认使用的Python版本是否cv_bridge的版本兼容。在melodic环境下,建议使用Python3。 5. 安装可能缺失的软件包:如果编译错误报告缺少特定软件包,可以尝试通过以下命令来安装: ``` sudo apt-get install <package-name> ``` 其中,"<package-name>"是缺失的软件包名称。 6. 查阅错误报告和文档:细读错误报告和相关文档,可能会提供更多关于问题的信息和解决方法。 如果仍然无法解决问题,建议查阅ROScv_bridge的官方文档,或在ROS的官方论坛或社区中提问寻求进一步的帮助。 ### 回答3: 在Ubuntu 18.04 Melodic环境下,如果在编译cv_bridge包时遇到报错,可以尝试以下解决方法: 1. 确保已经安装了所有依赖项和必要的软件包。使用以下命令安装所需软件包: ``` sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-melodic-cv-bridge ``` 2. 检查工作空间的设置。确保在构建过程中使用正确的CMakeLists.txt文件。可以尝试重新创建工作空间,并在更高级别的目录中运行以下命令: ``` source /opt/ros/melodic/setup.bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make ``` 3. 清除先前的构建和开发文件。在工作空间目录下运行以下命令: ``` catkin clean -b catkin clean --devel ``` 4. 更新ROS软件包。运行以下命令更新ROS Melodic软件包: ``` sudo apt-get update sudo apt-get upgrade ``` 5. 检查cv_bridge包的版本兼容性。确保使用的cv_bridge包版本ROS Melodic版本兼容。根据需要,可以尝试卸载并重新安装正确的版本。 通过以上方法,您应该能够解决Ubuntu 18.04 Melodic环境下cv_bridge包编译报错的问题。如果问题仍然存在,请参阅ROS Melodic和cv_bridge的官方文档和论坛,以获得更多帮助和支持。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值