Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jetson Nano上的ROS和OpenCV与CUDA:不兼容版本_Opencv_Ros_Nano_Nvidia Jetson - Fatal编程技术网

Jetson Nano上的ROS和OpenCV与CUDA:不兼容版本

Jetson Nano上的ROS和OpenCV与CUDA:不兼容版本,opencv,ros,nano,nvidia-jetson,Opencv,Ros,Nano,Nvidia Jetson,我想在我的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()上找到了一个使用CUDA 9构建它的指南,但在使用CUDA 10尝试时失败了,原因是“错误:标识符”\uuuuuShfl\uDown“未定义”,以及其他一些“\uShfl\uXXX”错误 这

我想在我的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()上找到了一个使用CUDA 9构建它的指南,但在使用CUDA 10尝试时失败了,原因是“错误:标识符”\uuuuuShfl\uDown“未定义”,以及其他一些“\uShfl\uXXX”错误

这里有人成功地让它工作了吗?或者有没有关于如何修复“shfl\u down”错误的想法

OpenCV 3.2能否与CUDA 10.2配合使用

  • 选项01:

    不,不要尝试使用CUDA10.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})
    
    set(OpenCV\u INCLUDE\u DIRS
    /包括
    /include/opencv2
    )
    设置(OpenCV_LIB_DIR
    /解放党
    )
    设置(OpenCV_库)
    opencv_内核
    opencv_highgui
    opencv_imgcodecs
    )
    include_目录(${OpenCV_include_DIRS})
    链接目录(${OpenCV\u LIB\u DIR})
    添加可执行文件(${PROJECT\u NAME}src/main.cpp)
    目标链接库(${PROJECT\u NAME}${OpenCV\u LIBS})
    
    OpenCV_LIBS
    下添加代码中使用的OpenCV模块

    注:我不是一个在我的机器上测试这个位置的人,所以把这个当作一个暂时的答案,如果你有问题,请告诉我,我会尽力帮助

  • 选项02:

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

    注意:OpenCV_DIR必须指向包含OpenCV-conifg.cmake文件的文件夹。 可以找到更多信息


  • 我找到了一个解决方案,尽管我还没有对其进行广泛的测试:

  • 从源代码构建OpenCV 4.2(支持CUDA 10.2的任何版本都应该可以使用),从而启用CUDA。在(使用tensorflow等跳过零件)处有一个很好的指南

  • 安装ROS Melodic。不需要从源代码构建

  • 创建工作区后,将cv_桥接器和图像_传输模块克隆到其中。重要提示:切换到分支“Noetic”

  • 在cv_桥的CMakeLists.txt中,将
    find_包(Boost-REQUIRED-python37)
    更改为
    find_包(Boost-REQUIRED-python)

  • 在函数do_numpy_import的cv_bridge/src/module.hpp中,将返回类型从void*更改为void,并删除
    返回null ptr

  • 用柳絮构建工作空间。它应该正常建造

  • 我已经测试了一个基本的图像发布,并在rqt_image_视图中查看它。工作起来很有魅力


    我知道这是一个有点黑客的解决方案,所以如果有人知道更好的东西,请让我知道

    如果您实际使用CUDA 8或更高版本进行编译,但安装的CUDA肯定是10.2,这也是cmake在配置过程中检测到的,那么您只会遇到这样的错误。如果配置有问题,请cmake尝试使用cuda版本进行构建谢谢你的建议,我会尝试看看它是否有效。但是cv_桥是否仍然使用OpenCV 3.2,从而在使用cv_桥从ROS图像转换到OpenCV图像时产生兼容性问题?原则上,您的建议是有效的,但只有在我添加cv_桥作为依赖项之前。然后我得到错误“Project'cv_bridge'将'/usr/include/opencv'指定为include dir,但找不到它”。我想我必须从源代码构建cv_桥(以及任何依赖于OpenCV的模块),指定要使用哪个OpenCV?感谢更新,我也刚刚找到了那篇文章并尝试了它。不幸的是,它似乎只有在主要OpenCV版本匹配时才起作用,因为它失败,出现错误“找不到与请求的版本“3”兼容的包“OpenCV”的配置文件,然后将版本4.1.1列为不接受。@Milan您是如何构建cv_桥的?下载cv_bridge包并尝试使用
    catkin_make-DOpenCV_DIR=/usr/local/share/OpenCV
    构建,或者更改cv_bridge的CMakeLists.txt文件,添加可选的OpenCV位置是的,我使用了第一个选项,将cv_bridge下载到我的catkin_工作区并运行catkin_make-DOpenCV DIR=/usr/local/share/opencv4。这就是我得到错误的时候。看起来cv_bridge正在进行检查,以确保opencv版本为3.x.x