ros Jade 的 c++ opencv 设置

c++ opencv setup for ros Jade

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

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

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

中放入什么

简单地说:

find_package(需要 OpenCV)

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

我应该在这里做什么?

好吧,在我知道清单实际发生了什么之前,我不会将其设置为正确答案,但是如果我摆脱 opencv3 依赖项(或 opencv2,它们的行为相同)它一切正常。

说真的,有五年以上经验的人能告诉我这是怎么回事吗?

我们有一个使用 image_transport 订阅图像主题的 indigo 包,将其转换为 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 安装,这很糟糕。我们观察到各种后果,从编译错误、linker 错误到段错误,尤其是与 ros-indigo-cv-bridge 结合使用时,它是针对 OpenCV 2.4 系统安装的 linked .8.

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

find_package(OpenCV 2.4.8 EXACT REQUIRED)

或依赖 cv_bridge 或 image_geometry 到 link 到 ROS indigo migration guide.

中推荐的 opencv 的正确版本

即使你能以某种方式避免 cmake 在 /opt/ros/indigo 中选择 OpenCV 3 安装,预处理器仍然会更喜欢 /opt/ros/include/opencv2 中的 headers(由 [=46 安装) =]-opencv3) over /usr/include/opencv2 从现在开始每当它发现 a

#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 headers 在任何其他包的 headers.

之前订购

ROS jade 中的情况大概也是如此。