miivii域控制器(Xavier)配置ROS与OpenCV3.x.x

在Xavier上另外配置OpenCv真jb恶心人,一万句fuck可以表达我此刻的心情
OpenCV4.0没有配置成功,编译thor用刷机时安装的opencv版本应该就可以,

一 关于ROS

域控制器烧写JetPack4.2后,Tegra自动安装了ROS-melodic,opencv3.3.1,但这个不是完整版的ROS,因为参考Ubuntu 18.04 + ROS Melodic 安装OpenCV,ROS中有3个opencv package:vision_opencv,cv_bridge,image_transport,我在/opt/ros/melodic/share中只见到了vision_opencv文件夹,而且里面只包含了一个package.xml,于是卸载原装ROS,重新安装,参考Ubuntu 18.04 安装 ROS,并解决 sudo rosdep init 各种问题
重新安装ROS后,opt/ros/melodic/share文件夹里多了很多内容,证明烧写进的ROS是不完整的
在这里插入图片描述


2020.10.14更新)刷了米文JetPack4.4后,自带ROS-melodic,其是否完整好用并没有试验,sudo apt-get purge libopencv*卸载刷机自带的OpenCV4.1.1后,ROS同时也被破坏,需要sudo apt-get purge ros-*卸载ROS后重新安装。

二 关于OpenCV

1 烧写后原生opencv的版本和安装路径

参考linux下查看opencv安装路径以及版本号,用python2 python3打印opencv的版本,和用pkg-config opencv --modversion命令行查到的opencv版本都是3.3.1,用sudo find / -iname "*opencv*" > opencv_find.txt列出opencv的安装路径。


2021.5.7更新
关于opencv.pc文件的说明,以及源码编译opencv的位置、环境变量的配置,可以学习这篇极好的文章【CV实战】Ubuntu18.04源码编译安装opencv-3.4.X+测试demo


(2020.10.14更新) 执行pkg-config opencv --modversion查opencv版本的原理是:在系统中搜索opencvx.pc文件,文件中包含了opencv安装路径、头文件路径、库文件路径、版本等信息。
(2020.11.1更新) 刷机JetPack4.2后,系统中存在两个opencv.pc/usr/lib/aarch64-linux-gnu/pkgcfg/opencv.pc/usr/local/lib/pkgcfg/opencv.pc,在CMakeLists.txtfind_package{REQUIRED OpenCV}或者执行pkg-cfg --modversion opencv查看版本时,会优先在用户的库/usr/local/lib/里搜索pkgcfg/opencv.pc,进而按照.pc文件中指定的库目录和头文件目录路径搜索。如果/usr/local/lib/中没有opencv.pc,会进而搜索系统库/usr/lib/中的pkgcfg/opencv.pc。这个方法解决了xxx.h undefined reference cv::read()等类似的问题。

2 卸载OpenCV

忽略此步骤,参考下面 2020.10.12更新的内容
参考Jetson TX2 卸载并安装OpenCV3.4.0,使用以下命令:

sudo apt-get purge libopencv*
sudo apt autoremove
sudo apt-get update

只删除了usr/lib/aarch64-linux-gnu即系统里的libopencv*/usr/local/lib/中的libopencv*仍然存在,使用上一步的查看版本命令,仍能正常显示
(2020.11.1更新) 彻底删除用户空间中的opencv,除了执行以上命令,还需要执行:

sudo rm -r /usr/local/include/opencv/ /usr/local/include/opencv2/
//或者直接更改/usr/local/lib/pkgcfg/opencv.pc文件名字,系统就不会搜索到在用户空间中配置的opencv

3 安装OpenCV4.0.0

参考Jetson TX2 卸载并安装OpenCV3.4.0嵌入式Xavier中配置ROS+OPENCVBuilding OpenCV for Tegra with CUDA

大体流程是:安装各种依赖-》下载opencv、opencv_contrib源码-》cmake-》make-》make install

OpenCV是否需要GPU支持,是在cmake命令里设置的


3 安装OpenCV3.4.6

(2020.10.12更新)前几天刷机JetPack4.4,自带OpenCV4.1.1,自带ROS(包含OpenCV3.2.0),darknet_ros在CV4.x中错误较多,卸载CV4.x,配置CV3.4.6,参考How to Install OpenCV (3.4.0) on Jetson TX2,配置成功后,darknet_ros可以编译成功。
注意:1、$ sudo ln -sf tegra/libGL.so libGL.so这句没有执行,因为tegra文件夹中没有libGL.so

2、执行cmake时,将CUDA_ARCH_BIN="6.2"改成CUDA_ARCH_BIN=${cuda_compute},这里没有深究CUDA_ARCH_BIN,只是感觉JetPack4.4,CUDA10.2对应的CUDA_ARCH_BIN不是6.2,修改后应该是系统自己查找匹配版本。


(2021.5.7更新)我使用的cmake

#!/bin/bash
cmake \
    -D CMAKE_BUILD_TYPE=Release \
    -D CMAKE_INSTALL_PREFIX=/usr \
    -D BUILD_PNG=OFF \
    -D BUILD_TIFF=OFF \
    -D BUILD_TBB=OFF \
    -D BUILD_JPEG=OFF \
    -D BUILD_JASPER=OFF \
    -D BUILD_ZLIB=OFF \
    -D BUILD_EXAMPLES=ON \
    -D BUILD_opencv_java=OFF \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON \
    -D ENABLE_PRECOMPILED_HEADERS=OFF \
    -D WITH_OPENCL=OFF \
    -D WITH_OPENMP=OFF \
    -D WITH_FFMPEG=ON \
    -D WITH_GSTREAMER=ON \
    -D WITH_GSTREAMER_0_10=OFF \
    -D WITH_CUDA=OFF \
    -D WITH_GTK=ON \
    -D WITH_VTK=OFF \
    -D WITH_TBB=ON \
    -D WITH_1394=OFF \
    -D WITH_OPENEXR=OFF \
    -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.2 \
    -D CUDA_ARCH_BIN=6.2 \
    -D CUDA_ARCH_PTX="" \
    -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.0/modules/ \
    ../

3 配置OpenCV3.2.0

(2020.10.14更新) opencv3.2.0是安装ROS时自带的,不需要另外配置,这里的问题是编译darknet_ros时怎样让系统使用cv3.2.0的库,同时解决下面BUG 4的版本冲突问题

刷机miivii JetPack4.4后,卸载opencv4.1.1 -> 卸载ROS,此时在系统中搜索opencv,发现opencv的各种库和配置文件都被删除了。接下来安装ROS,发现opencv3.2.0和4.1.1又都回来了,不清楚域控制器是什么机制,怎么又把4.1.1搞回来了。在编译darknet_ros时,显示找到的OpenCV是4.1.1版本,不是我要的3.2.0版本。

编译程序链接opencv库的设置可以参考配置opencv cmake,链接库文件的规则与四个.cmake文件有关:OpenCVConfig.cmake OpenCVConfig-version.cmake OpenCVModules.cmake OpenCVModules-release.cmake
在这里插入图片描述
我将4.1.1版本的4个文件更换为3.2.0版本的4个文件,在OpenCVConfig.cmake中修改opencv的安装路径:
在这里插入图片描述
OpenCVModules.cmake中修改包含的库,添加4.1.1中没有被3.2.0包含的库,并add_libraries()
在这里插入图片描述
在这里插入图片描述
OpenCVModules.cmake中修改安装路径,换为4.1.1版本的安装路径:
在这里插入图片描述

BUG 1 安装依赖libjasper-dev无法定位包

参考Ubuntu18.04下安装OpenCv依赖包libjasper-dev无法安装的问题中的第一条评论,将deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe添加到/etc/apt/sources.list中,sudo apt-get update没有问题后,执行sudo apt-get install libjasper1 libjasper-dev

BUG 2 cmake时Could not find OpenBLAS *

在这里插入图片描述
参考demo开发之问题04编译ubuntu环境下编译opencv中的5,也可以直接参考Correction in OpenCV’s default CMAKE search Path for OpenBLAS Library on Ubuntu-64bit Machines [Solution] ,设置路径如下图:

在这里插入图片描述

BUG 3 ccache not found

$ sudo apt-get install ccache

BUG 4 opencv多版本冲突(2020.10.12更新)

先配置OpenCV3.4.6,再安装ROS,结果系统中同时存在3.2.0 3.4.6和4.4.1三个版本的相关文件
在这里插入图片描述


(2020.10.14更新)
卸载3.4.6,把4.1.1的4个.cmake文件替换为3.2.0,编译成功了darknet_ros,车道线加速项目可以正常运行,但是域控制器自带的启动摄像头、检测行人车辆自行车的程序报错:
在这里插入图片描述
可以看出,问题出在/opt/miivii/lib/系统demo依赖的库文件上。初步推测:JetPack4.4版本中,自带的demo程序、依赖的库有改动。
尝试将JetPack4.2中的/opt/miivii/lib/libmvgmslcamera.so复制过来,$ sudo ln sf libmvgmslcamera.so libmvgmslcam.so建立符号链接,发生错误:
在这里插入图片描述
注意:建立的符号链接不是浅蓝色,而是红色,可能是被链接的文件损坏或者不存在。


(2021.5.7更新)

BUG5 fatal error:boostdesc_bgm.i:No such file or directory

opencv/opencv_3rdparty
切换分支,下载vgg…i和boostdesc…i文件,复制到opencv-3.4.0/opencv_contrib-3.4.0/modules/xfeatures2d/src/

BUG6 fatal error: opencv2/xfeatures2d/cuda.hpp:No such file or directory

cuda.hpp路径opencv-3.4.0/opencv_contrib-3.4.0/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp
网上有3种方法:

  • 老版本的cmake 不支持http协议,文件下载失败
  • opencv/modules/stitching/CMakeLists.txt中添加绝对路径INCLUDE_DIRECTORIES("/works/opencv-3.4.0/opencv_contrib-3.4.0/modules/xfeatures2d/include"),或者直接在出错的.hpp#include "cuda.hpp"中直接写死绝对路径
  • cmake -DBUILD_opencv_xfeatures2d=OFF …

试了后都没有解决,后直接在opencv/modules/stitching/include/opencv2/下新建文件夹xfeatures2d/,将cuda.hpp复制过来,没报错


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值