2016-05-11 1 views
0

Я разместил этот вопрос на ros, чтобы отвечать на форумы, но пока не получил ответа, так что вот для хеджирования моих ставок.C++ opencv setup для ros Jade

Я успешно создал затмение для использования с ros. Я успешно создал затмение для использования с opencv (как проект C++ со всеми компоновщиками dohickeys.)

Мне еще предстоит найти исчерпывающую документацию по настройке ros для использования с opencv. Существует множество учебных пособий относительно его использования, но я понятия не имею, что я должен помещать в manifest.xml и CMakeLists.txt.

просто положить:

и

find_package (OpenCV ОБЯЗАТЕЛЬНО)

в манифесте и CMakeLists соответственно не работает, и дает мне сообщение об ошибке предсказуемое при попытке для его создания с помощью команды rosmake: Пакет opencv3 не найден в пути поиска pkg-config.

Что я должен делать здесь?

ответ

1

У нас есть пакет индиго, который использует image_transport для подписки на тему изображения, преобразует ее в тип OpenCV, а затем внутренне использует OpenCV непосредственно для работы с изображениями. Сценарий почти такой же, как в примере ROS-узла учебника Using CvBridge To Convert Between ROS Images And OpenCV Images.

Существует несколько проблем, как только 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/индиго теперь, что это плохо. Мы наблюдали все последствия от ошибок компиляции, ошибок компоновщика до segfaults, особенно в сочетании с ros-indigo-cv-bridge, который связан с установкой системы OpenCV 2.4.8.

2 - Обойти бы добавить особые требования к версии, как

find_package(OpenCV 2.4.8 EXACT REQUIRED) 

или полагаться на cv_bridge или image_geometry ссылки на правильную версию OpenCV косвенно, как это рекомендовано в ROS indigo migration guide.

Даже если вы каким-то образом избегаете того, что cmake подбирает установку OpenCV 3 в/opt/ros/индиго, препроцессор по-прежнему предпочитает заголовки, найденные в/opt/ros/include/opencv2 (устанавливается ros-indigo- opencv3) над/USR/включать/opencv2 с этого момента, когда он находит

#include <opencv2/core/core.hpp> 

как в cv_bridge.h:43, потому что некоторая зависимость всегда будет добавлять/Opt/ROS/индиго к включают пути.

Единственный способ решения проблемы я нашел до сих пор является следующая 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 
) 

, чтобы убедиться, что OpenCV 2.4.8 заголовки в/USR/включать упорядочиваются перед тем заголовками других пакетов.

Возможно, ситуация в нефрит ROS одинакова.

+0

в порядке. Я вернусь домой примерно через 30 минут, чтобы посмотреть, что здесь происходит. Я полностью заново установил ros и opencv и обнаружил, что desktop-full не включает ros-jade-opencv-3, поэтому я планировал посмотреть, не приведет ли это к отсутствию пакета. – ThaHypnotoad

+0

Я проверю оба, хотя, поэтому я должен опубликовать здесь примерно полтора часа с результатами или отсутствием их. – ThaHypnotoad

+0

Я просто хотел упомянуть: Спасибо за стену текста. Мучительно трудно найти сплоченную литературу по многим материалам ROS. И теперь обновление. Просто не имея установленных библиотек ros 3.1, мои рабочие денди работали. (как вы упомянули, полагаясь на cv_bridge, чтобы импортировать его) Теперь, конечно, что мне делать, если я хочу использовать причудливые новые материалы для сопоставления поверхностей в 3.0 и 3.1? Это кажется немного сложнее. Я собираюсь отметить этот ответ как обновление и задаю для этого отдельный вопрос. Еще раз спасибо. – ThaHypnotoad

0

Хорошо, я не собираюсь устанавливать это как правильный ответ, пока не узнаю, что происходит с манифестом, но если я избавлюсь от зависимости opencv3 (или opencv2, они оба ведут себя одинаково), все это работает отлично.

Серьезно, может ли кто-то с полтора десятилетия больше опыта рассказывать мне, что здесь происходит?

+0

ОК, так что теперь у меня есть проблема, которая очень похожа на эту: http: //stackoverflow.com/questions/29479379/opencv-linking-problems-with-ros – ThaHypnotoad

+0

Я собираюсь посмотреть, что здесь происходит утром. – ThaHypnotoad