Используйте пользовательскую установку OpenCV в пакете ROS - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь создать пакет ROS, в котором я использую пользовательскую установку OpenCV 3.4, в которой у меня включена CUDA.Установка OpenCV в / usr / local работает просто отлично, я могу без проблем создавать и запускать образцы из папки GPU, используя

g++ -o houghlines houghlines.cpp `pkg-config opencv --cflags --libs`

Однако я просто не могу заставить catkin использовать мою установку OpenCV, а не тот, который поставляется с ROS.Вот мой CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.3)
project(motion_segmentation_cuda)

set(CMAKE_CUDA_COMPILER  /usr/local/cuda-9.1/bin/nvcc)
find_package(catkin_simple REQUIRED)

set(OpenCV_INCLUDE_DIRS
  /usr/local/include
  /usr/local/include/opencv2
)
set(OpenCV_LIB_DIR
  /usr/local/lib
)
set(OpenCV_LIBS
  opencv_core
  opencv_highgui
  opencv_imgcodecs
)
include_directories(${OpenCV_INCLUDE_DIRS})

find_package(CUDA REQUIRED)
catkin_simple()

#Here you can set any gcc/cmake compiler flags, if you so wish
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")
link_directories(${OpenCV_LIB_DIR})

#Add all of your sources here
cuda_add_executable(
  cuda_test_cu
  src/main.cpp
  src/motion_segmenter.cpp
  src/kernel.cu
  src/segmenter.cpp
)

#Link the executable to the necessary libs
target_link_libraries(
   cuda_test_cu
   ${catkin_LIBRARIES}
   ${OpenCV_LIBS}
   ${CUDA_LIBRARIES}
)

# CMake Indexing
FILE(GLOB_RECURSE LibFiles "include/*")
add_custom_target(headers SOURCES ${LibFiles})

cs_install()

По совету различных форумов я также пытался

export CMAKE_PREFIX_PATH="/usr/lib/:$CMAKE_PREFIX_PATH"
export LD_LIBRARY_PATH="/usr/lib/:$LD_LIBRARY_PATH"

И целое множество настроек в CMakeLists.И мой пакет компилируется просто отлично!Но в итоге я неизбежно получаю:

OpenCV Error: No CUDA support (The library is compiled without CUDA support) in throw_no_cuda, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/include/opencv2/core/private.cuda.hpp, line 107

Как только я пытаюсь использовать любой из классов OpenCV с графическим процессором.

Большое спасибо!

1 Ответ

0 голосов
/ 15 марта 2019

Чтобы ответить на ваш вопрос, мимо меня, этот CMakeLists.txt работает (по некоторым причинам):

cmake_minimum_required(VERSION 2.8.3)
project(motion_segmentation_cuda)

find_package(OpenCV 3.4 REQUIRED
  COMPONENTS
    opencv_core
    opencv_highgui
    opencv_imgproc
    opencv_imgcodecs
  PATHS /usr/local
  NO_DEFAULT_PATH
  CONFIG
)

set(CMAKE_CUDA_COMPILER  /usr/local/cuda-9.1/bin/nvcc)
find_package(catkin_simple REQUIRED)
find_package(CUDA REQUIRED)
catkin_simple()

#Here you can set any gcc/cmake compiler flags, if you so wish
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")

include_directories(include ${OpenCV_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})

#Add all of your sources here
cuda_add_executable(
  cuda_test_cu
  src/main.cpp
  src/motion_segmenter.cpp
  src/kernel.cu
  src/segmenter.cpp
)

#Link the executable to the necessary libs
target_link_libraries(
   cuda_test_cu
   ${catkin_LIBRARIES}
   ${OpenCV_LIBS}
   ${CUDA_LIBRARIES}
)

# CMake Indexing
FILE(GLOB_RECURSE LibFiles "include/*")
add_custom_target(headers SOURCES ${LibFiles})

cs_install()

Нет необходимости менять .bashrc в конце ...

...