本文共 2624 字,大约阅读时间需要 8 分钟。
因为工作需要,要在Ubuntu 16.04 + ROS Kinetic配置下使用高版本的opencv。但是ROS Kinetic自带的opencv版本只有3.3.1,因此需要自行安装高版本的opencv,然后进行相关配置。
配置过程比较艰难,搞了半天,因此记录一下这个过程。
该过程主要分为以下3个步骤:
opencv-4.2.0
以及opencv_contrib-4.2.0
(后者根据需要选择是否安装,因为我需要使用opencv内置的跟踪器,因此需要安装这个包。另外,这两个包的版本必须一致);cv_bridge
文件,让它调用新安装的opencv版本,而不是ROS自带的版本;CMakeLists.txt
,然后用catkin_make
编译即可。该过程我主要参考了以下两篇文章:
安装流程与以上两篇文章一致,遇到的问题也是一样的,就是在使用cmake
配置时因为网络问题无法正常下载需要的文件。解决方法是直接将需要的文件下载到本地即可,至于需要下载哪些文件以及下载地址,可以查看/opencv-4.2.0/build/CMakeDownloadLog.txt
,查找关键字"missing"中出现的文件即可。我统计了一下,总共缺少以下文件:
ippicv_2019_lnx_intel64_general_20180723.tgz
将下载的文件放在指定文件夹内即可,然后使用cmake
重新配置就好了。这部分文件我分享了百度网盘,有需要的可以自行下载。
链接:https://pan.baidu.com/s/14LPvzrJjIDw4z6wfdXR-Gg
提取码:hjm9这部分内容主要参考:
第二篇博客过于复杂了,其实只要像第一篇博客一样修改很少的部分就可以了。
在/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")
这部分内容参考以下博客的最后一部分:
修改后的CMakeLists.txt文件如下:
cmake_minimum_required(VERSION 3.0.2)project(robot_tracker_ros)## Compile as C++11, supported in ROS Kinetic and neweradd_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 packagesset(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 locationsinclude_directories(# include ${ catkin_INCLUDE_DIRS} ${ OpenCV_INCLUDE_DIRS})...add_executable(getImage src/getImage.cpp)target_link_libraries(getImage ${ catkin_LIBRARIES} ${ OpenCV_LIBS})...
以上就是全部内容了,这个过程真的太痛苦了。。。希望能帮到一些人吧。
转载地址:http://vsuqf.baihongyu.com/