问题描述
我想在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一起使用吗?
解决方法
-
选项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模块注意:我无权在我的计算机上对此进行测试,因此请将此作为暂定答案,如果您有任何问题让我知道,我会尽力帮助
-
选项02:
catkin_make -DOpenCV_DIR = / usr / local / share / OpenCV
注意:OpenCV_DIR必须指向带有opencv-conifg.cmake文件的文件夹。 可以找到更多信息here
即使我尚未对其进行广泛的测试,我仍然找到了解决方案:
-
从源代码构建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的零件等)
-
安装ROS Melodic。无需从源代码构建。
-
创建工作空间后,将cv_bridge和image_transport模块克隆到其中。重要提示:切换到分支“ Noetic”!
-
在cv_bridge的CMakeLists.txt中,将
find_package(Boost REQUIRED python37)
更改为find_package(BOOST REQUIRED python)
-
在cv_bridge / src / module.hpp中的函数do_numpy_import中,将返回类型从void *更改为void,并删除
return nullptr;
-
使用柳絮建立工作区。它应该可以正常构建。
我已经测试了基本的图像发布,并在rqt_image_view中对其进行了查看。就像魅力一样!
我知道这是一个有点棘手的解决方案,所以如果有人知道更好的话,请告诉我!