【问题标题】:Use custom OpenCV install in ROS package在 ROS 包中使用自定义 OpenCV 安装
【发布时间】:2019-03-15 13:44:15
【问题描述】:

我正在尝试构建一个 ROS 包,我在其中使用启用了 CUDA 的自定义 OpenCV 3.4 安装。 /usr/local 中的 OpenCV 安装工作正常,我可以使用 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

只要我尝试实际使用任何支持 GPU 的 OpenCV 类。

非常感谢!

【问题讨论】:

    标签: cmake opencv3.0 ros catkin


    【解决方案1】:

    为了回答你的问题,在我之前,这个 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...

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 2023-01-17
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      相关资源
      最近更新 更多