У нас есть пакет индиго, который использует 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 одинакова.
в порядке. Я вернусь домой примерно через 30 минут, чтобы посмотреть, что здесь происходит. Я полностью заново установил ros и opencv и обнаружил, что desktop-full не включает ros-jade-opencv-3, поэтому я планировал посмотреть, не приведет ли это к отсутствию пакета. – ThaHypnotoad
Я проверю оба, хотя, поэтому я должен опубликовать здесь примерно полтора часа с результатами или отсутствием их. – ThaHypnotoad
Я просто хотел упомянуть: Спасибо за стену текста. Мучительно трудно найти сплоченную литературу по многим материалам ROS. И теперь обновление. Просто не имея установленных библиотек ros 3.1, мои рабочие денди работали. (как вы упомянули, полагаясь на cv_bridge, чтобы импортировать его) Теперь, конечно, что мне делать, если я хочу использовать причудливые новые материалы для сопоставления поверхностей в 3.0 и 3.1? Это кажется немного сложнее. Я собираюсь отметить этот ответ как обновление и задаю для этого отдельный вопрос. Еще раз спасибо. – ThaHypnotoad