我在ros答案论坛上发布了这个问题,但尚未得到答案,所以现在就来对冲我的赌注。
我已经成功设置了与ros一起使用的eclipse。 我已经成功设置了eclipse用于opencv(作为一个包含所有链接器dohickeys的c ++项目。)
我还没有找到有关设置ros以便与opencv一起使用的综合文档。有很多关于它的使用的教程,但我不知道我应该把它放在manifest.xml和CMakeLists.txt中。
简单地说:
和
find_package(OpenCV REQUIRED)
清单和CMakeLists中的分别不起作用,当我尝试使用rosmake命令构建它时,它给出了一个可预测的错误消息:在pkg-config搜索路径中找不到包opencv3。
我应该在这做什么?
答案 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,它们都表现得很好)一切都很好。
但说真的,有五年经验的人可以告诉我这里发生了什么吗?