Ubuntu 16.04 + ROS Kinetic + opencv-4.2.0

Ubuntu 16.04 + ROS Kinetic + opencv4.2.0

因为工作需要,要在Ubuntu 16.04 + ROS Kinetic配置下使用高版本的opencv。但是ROS Kinetic自带的opencv版本只有3.3.1,因此需要自行安装高版本的opencv,然后进行相关配置。

配置过程比较艰难,搞了半天,因此记录一下这个过程。

该过程主要分为以下3个步骤:

  1. 下载安装opencv-4.2.0以及opencv_contrib-4.2.0(后者根据需要选择是否安装,因为我需要使用opencv内置的跟踪器,因此需要安装这个包。另外,这两个包的版本必须一致);
  2. 配置cv_bridge文件,让它调用新安装的opencv版本,而不是ROS自带的版本;
  3. 配置自己创建的ROS功能包的CMakeLists.txt,然后用catkin_make编译即可。

1.安装opencv4.2.0

该过程我主要参考了以下两篇文章:

  1. Ubuntu16.04编译安装opencv4.2.0_m0_53913604的博客-CSDN博客
  2. 【opencv学习之四十五】Ubuntu16安装OpenCV4.2_abcvincent的博客-CSDN博客

安装流程与以上两篇文章一致,遇到的问题也是一样的,就是在使用cmake配置时因为网络问题无法正常下载需要的文件。解决方法是直接将需要的文件下载到本地即可,至于需要下载哪些文件以及下载地址,可以查看/opencv-4.2.0/build/CMakeDownloadLog.txt,查找关键字"missing"中出现的文件即可。我统计了一下,总共缺少以下文件:

  • [opencv-4.2.0]
    ippicv_2019_lnx_intel64_general_20180723.tgz
  • [opencv_contrib-4.2.0]
    在这里插入图片描述
    在这里插入图片描述

将下载的文件放在指定文件夹内即可,然后使用cmake重新配置就好了。这部分文件我分享了百度网盘,有需要的可以自行下载。

链接:https://pan.baidu.com/s/14LPvzrJjIDw4z6wfdXR-Gg
提取码:hjm9

2.配置cv_bridge文件

这部分内容主要参考:

第二篇博客过于复杂了,其实只要像第一篇博客一样修改很少的部分就可以了。

/opt/ros/kinetic/share/cv_bridge/cmake路径下找到cv_bridgeConfig.cmake文件,需要修改第94-96行的内容。修改如下:

# if(NOT "include;/opt/ros/kinetic/include/opencv-3.3.1-dev;/opt/ros/kinetic/include/opencv-3.3.1-dev/opencv " STREQUAL " ")
#   set(cv_bridge_INCLUDE_DIRS "")
#   set(_include_dirs "include;/opt/ros/kinetic/include/opencv-3.3.1-dev;/opt/ros/kinetic/include/opencv-3.3.1-dev/opencv")
if(NOT "include;/usr/local/include/opencv4;/usr/local/include/opencv4/opencv2 " STREQUAL " ")
  set(cv_bridge_INCLUDE_DIRS "")
  set(_include_dirs "include;/usr/local/include/opencv4;/usr/local/include/opencv4/opencv2")

3.配置功能包下的CMakeLists.txt

这部分内容参考以下博客的最后一部分:

修改后的CMakeLists.txt文件如下:

cmake_minimum_required(VERSION 3.0.2)
project(robot_tracker_ros)

## Compile as C++11, supported in ROS Kinetic and newer
add_compile_options(-std=c++11)

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
set(OpenCV_DIR /usr/local/include/opencv4)
find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  image_transport
  roscpp
  rospy
  sensor_msgs
  std_msgs
)

find_package(OpenCV 4 REQUIRED)

message(STATUS "   OpenCV library status:")
message(STATUS "    config: ${OpenCV_DIR}")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

...

###########
## Build ##
###########

## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
)

...

add_executable(getImage src/getImage.cpp)
target_link_libraries(getImage ${catkin_LIBRARIES} ${OpenCV_LIBS})

...

以上就是全部内容了,这个过程真的太痛苦了。。。希望能帮到一些人吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值