ros jade的c ++ opencv设置

时间:2016-05-11 05:37:40

标签: c++ eclipse opencv ros

我在ros答案论坛上发布了这个问题,但尚未得到答案,所以现在就来对冲我的赌注。

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

我还没有找到有关设置ros以便与opencv一起使用的综合文档。有很多关于它的使用的教程,但我不知道我应该把它放在manifest.xml和CMakeLists.txt中。

简单地说:

find_package(OpenCV REQUIRED)

清单和CMakeLists中的

分别不起作用,当我尝试使用rosmake命令构建它时,它给出了一个可预测的错误消息:在pkg-config搜索路径中找不到包opencv3。

我应该在这做什么?

2 个答案:

答案 0 :(得分:1)

我们有一个indigo包,它使用image_transport订阅图像主题,将其转换为OpenCV类型,然后在内部直接使用OpenCV来处理图像。该场景与Using CvBridge To Convert Between ROS Images And OpenCV Images教程的示例ROS节点几乎相同。

只要在系统上安装了ros-indigo-opencv3,就会出现一些问题。我们花了一些时间来解决这个问题,因为opencv3软件包是作为另一个软件包的依赖项安装的,用于完全不同的项目。

1 - 该行

find_package(OpenCV REQUIRED)
http://wiki.ros.org/vision_opencv#Using_OpenCV_in_your_ROS_code的cmake片段中,

总是会在/ opt / ros / indigo中找到OpenCV 3安装,这很糟糕。我们观察到了各种各样的后果,包括编译错误,链接器错误和段错误,特别是与ros-indigo-cv-bridge结合使用,后者与OpenCV 2.4.8的系统安装相关联。

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

find_package(OpenCV 2.4.8 EXACT REQUIRED)

或依赖cv_bridge或image_geometry按ROS indigo migration guide中的建议间接链接到正确版本的opencv。

即使你以某种方式可以避免cmake在/ opt / ros / indigo中获取OpenCV 3安装,预处理器仍然会更喜欢/ opt / ros / include / opencv2中的头文件(由ros-indigo-opencv3安装) )从现在开始,只要找到

,就越过/ usr / include / opencv2
#include <opencv2/core/core.hpp>

cv_bridge.h:43类似,因为某些依赖项总是将/ opt / ros / indigo添加到包含路径。

到目前为止,我找到的唯一解决方法是以下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玉石的情况可能相同。

答案 1 :(得分:0)

好吧,在我知道清单真正发生了什么之前,我不打算将其设置为正确答案,但如果我摆脱了opencv3依赖关系(或者opencv2,它们都表现得很好)一切都很好。

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