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 一起使用吗?
选项 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 模块
注意:我无法在我的机器上进行测试,所以将此视为暂定答案,如果您有问题请告诉我,我会尽力提供帮助
选项 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”!
在CMakeLists.txt中cv_bridge,将find_package(Boost REQUIRED python37)
改为find_package(BOOST REQUIRED python)
在函数do_numpy_import的cv_bridge/src/module.hpp中,将return类型由void*改为void,去掉return nullptr;
用catkin构建工作空间。它应该可以正常构建。
我测试了一个基本的图像发布,并在 rqt_image_view 中查看了它。很有魅力!
我知道这是一个有点老套的解决方案,所以如果有人知道更好的,请告诉我!
我想在我的 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 (
这里有人成功地让它工作了吗?或者关于如何修复“__shfl_down”错误的任何想法?
OpenCV 3.2 可以与 CUDA 10.2 一起使用吗?
选项 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 模块注意:我无法在我的机器上进行测试,所以将此视为暂定答案,如果您有问题请告诉我,我会尽力提供帮助
选项 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”!
在CMakeLists.txt中cv_bridge,将
find_package(Boost REQUIRED python37)
改为find_package(BOOST REQUIRED python)
在函数do_numpy_import的cv_bridge/src/module.hpp中,将return类型由void*改为void,去掉
return nullptr;
用catkin构建工作空间。它应该可以正常构建。
我测试了一个基本的图像发布,并在 rqt_image_view 中查看了它。很有魅力!
我知道这是一个有点老套的解决方案,所以如果有人知道更好的,请告诉我!