用于玫瑰玉的c++opencv设置

c++ opencv setup for ros Jade

本文关键字:c++opencv 设置 玫瑰 用于      更新时间:2023-10-16

我在ros answers论坛上发布了这个问题,但到目前为止还没有得到答案,所以这里是为了对冲我的赌注。

我已经成功地将eclipse设置为与ros一起使用。我已经成功地将eclipse设置为与opencv一起使用(作为一个带有所有链接器dohickeys的c++项目)

我还没有找到关于设置用于opencv的ros的全面文档。关于它的使用,有很多教程,但我不知道应该在manifest.xml和CMakeLists.txt中放入什么

简单地说:

find_package(需要OpenCV)

in manifest和CMakeLists分别不起作用,并且当我尝试使用rosmake命令构建它时,会给我一个可预测的错误消息:在pkg配置搜索路径中找不到Package opencv3。

我应该在这里做什么?

我们有一个靛蓝包,它使用image_transport订阅图像主题,将其转换为OpenCV类型,然后在内部直接使用OpenCV处理图像。该场景与使用CvBridge在ROS图像和OpenCV图像之间转换教程中的示例ROS节点几乎相同。

一旦在系统上安装了ros-indigo-opencv3,就会出现几个问题。我们花了一些时间才弄清楚,因为opencv3包是作为一个完全不同的项目的另一个包的依赖项安装的。

1-线路

find_package(OpenCV REQUIRED)

在中的cmake片段中http://wiki.ros.org/vision_opencv#Using_OpenCV_in_your_ROS_code从现在起,OpenCV 3总是安装在/opt/ros/dindigo中,这很糟糕。我们观察到了从编译错误、链接器错误到segfault的各种后果,尤其是与ros indigo cv桥相结合时,它与OpenCV 2.4.8的系统安装相关联。

2-解决方法是添加特定的版本要求,如

find_package(OpenCV 2.4.8 EXACT REQUIRED)

或者依赖cv_bridge或image_geometry间接链接到ROS靛蓝迁移指南中推荐的正确版本的opencv。

即使你可以以某种方式避免cmake在/opt/ros/dindigo中安装OpenCV 3,从现在起,无论何时发现,预处理器仍然更喜欢/opt/ros/include/occv2(由ros-indigo-opencv3安装)中的头文件,而不是/usr/include/occv2

#include <opencv2/core/core.hpp>

就像在cv_bridge.h:43中一样,因为有些依赖项总是会在include路径中添加/opt/ros/digo。

到目前为止,我找到的唯一解决方法是以下cmake片段:

find_package(OpenCV 2.4.8 EXACT REQUIRED)
include_directories(
 include
 ${OpenCV_INCLUDE_DIRS}        # /usr/include/opencv;/usr/include
 ${catkin_INCLUDE_DIRS}        # contains /opt/ros/indigo/include
 # ...other include directories
)

以确保/usr/include中的OpenCV 2.4.8标头在任何其他包的标头之前排序。

ROS玉的情况可能也是如此。

好吧,在我知道清单的实际情况之前,我不会将其设置为正确答案,但如果我去掉了opencv3依赖项(或opencv2,它们的行为都相同),一切都会很好。

说真的,有五年以上经验的人能告诉我这里发生了什么吗?