ROS 和 OpenCV with CUDA on Jetson Nano:不兼容的版本

ROS and OpenCV with CUDA on Jetson Nano : Incompatible versions

我想在我的 Jetson Nano 上使用 ROS 和支持 CUDA 的 OpenCV。在这一点上,我不关心版本。

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

我在 SO () 上找到了使用 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 附带)如下,同时假设 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. 在CMakeLists.txt中cv_bridge,将find_package(Boost REQUIRED python37)改为find_package(BOOST REQUIRED python)

  5. 在函数do_numpy_import的cv_bridge/src/module.hpp中,将return类型由void*改为void,去掉return nullptr;

  6. 用catkin构建工作空间。它应该可以正常构建。

我测试了一个基本的图像发布,并在 rqt_image_view 中查看了它。很有魅力!

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