在Jetson Nano上使用CUDA的ROS和OpenCV:不兼容的版本

问题描述

我想在Jetson Nano上将ROS与启用CUDA的OpenCV一起使用。现在我不在乎版本。

问题:Jetson Nano仅支持CUDA 10和Ubuntu 18.04。 Ubuntu 18.04的ROS版本是Melodic,需要OpenCV 3.2,但OpenCV 3.2仅支持CUDA 8。

我在SO(CMake Error: Variables are set to NOTFOUND)上找到了使用CUDA 9进行构建的指南,但由于“错误:标识符“ __shfl_down”未定义“,在CUDA 10上进行尝试时它失败了” “ __shfl_XXX”错误

这里有人成功完成这项工作吗?或关于如何解决“ __shfl_down”错误的任何想法?

OpenCV 3.2可以与CUDA 10.2一起使用吗?

解决方法

  1. 选项01:

    不是,不要尝试使用CUDA 10.2进行构建,这是我的建议,在这两种情况下,您都应保持安全。在您的软件包CMakeLists.txt中,按如下所示添加替代的OpenCV(与Nano一起提供),而assumimg main.cpp是您的主文件(如果未更改):

       set(OpenCV_INCLUDE_DIRS
          <path_to>/include
          <path_to>/include/opencv2
        )
    
        set(OpenCV_LIB_DIR
          <path_to>/lib
        )
    
        set(OpenCV_LIBS
          opencv_core
          opencv_highgui
          opencv_imgcodecs
        )
    
        include_directories(${OpenCV_INCLUDE_DIRS})
        link_directories(${OpenCV_LIB_DIR})
        add_executable(${PROJECT_NAME} src/main.cpp)
        target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
    

    OpenCV_LIBS下添加您在代码中使用的OpenCV模块

    注意:我无权在我的计算机上对此进行测试,因此请将此作为暂定答案,如果您有任何问题让我知道,我会尽力帮助

  2. 选项02:

    catkin_make -DOpenCV_DIR = / usr / local / share / OpenCV

    注意:OpenCV_DIR必须指向带有opencv-conifg.cmake文件的文件夹。 可以找到更多信息here

,

即使我尚未对其进行广泛的测试,我仍然找到了解决方案:

  1. 从源代码构建OpenCV 4.2(任何支持CUDA 10.2的版本都可以使用),从而启用CUDA。 https://www.pyimagesearch.com/2020/03/25/how-to-configure-your-nvidia-jetson-nano-for-computer-vision-and-deep-learning/提供了一个很好的指南(跳过具有tensorflow的零件等)

  2. 安装ROS Melodic。无需从源代码构建。

  3. 创建工作空间后,将cv_bridge和image_transport模块克隆到其中。重要提示:切换到分支“ Noetic”!

  4. 在cv_bridge的CMakeLists.txt中,将find_package(Boost REQUIRED python37)更改为find_package(BOOST REQUIRED python)

  5. 在cv_bridge / src / module.hpp中的函数do_numpy_import中,将返回类型从void *更改为v​​oid,并删除return nullptr;

  6. 使用柳絮建立工作区。它应该可以正常构建。

我已经测试了基本的图像发布,并在rqt_image_view中对其进行了查看。就像魅力一样!

我知道这是一个有点棘手的解决方案,所以如果有人知道更好的话,请告诉我!