最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

cv

旗下网站admin21浏览0评论

cv

cv

cv_bridge与opencv版本不⼀致导致程序编译错误及⽆法运⾏程序问题的解决⽅案(附。。。td scdma手机⽬录与本篇问题相关的⼀个问题,可参考我之前的⼀篇博客:1、问题描述以下为我个⼈的开发环境⽤到这个问题,当然,换做其他开发环境遇到的问题也是类似的,解决⽅案也是类似的,因此本⽂问题及解决⽅案是通⽤的。开发环境嵌⼊式主控:nvidia xavier模拟电视os:ubuntu 18.04, ROS melodic西部数据硬盘保修--------------------------------------------性价比智能手机ros melodic默认安装opencv3.2由于我需要⽤到zed相机,因此在xavier上安装了CUDA10.0,并默认安装了opencv4.1.1acer是什么牌子另外,我还⾃⼰安装了⼀个opencv版本opencv3.4.9所以,我的xavier上总共有3个版本的opencv:3.2, 4.1.1, 3.4.9教训:以后不要在同⼀个主控上安装多个版本opencv,那是⾃找⿇烦,涉及到各种配置,配置不对就导致程序⽆法运⾏,调试配置花费⼤量精⼒!我的程序配置在我的ROS节点程序对应的中find_package(),我⽤的是find_package(OpenCV 4 REQUIRED),如果⽤3就导致程序根本编译不通过,因此只能选择调⽤opencv4库,这就是导致⽤户程序调⽤的opencv库版本4.1.1与ROS默认安装的cv_bridge调⽤的opencv库版本3.2不⼀致问题!⼀句话总结:ROS melodic默认安装cv_bridge版本为1.13.0以及opencv版本为3.2,⽽我的程序中⽤到了cv_bridge且设置调⽤的opencv版本为4.1.12、问题造成的后果星网视易点歌机cv_bridge与opencv版本问题会导致⽤户代码编译成功,但运⾏报错的问题,是很棘⼿的⼀个问题。例如:1. 导致跑ORB_SLAM2/3失败2. 跑⽤户⾃⼰写的基于opencv库函数的程序失败等等——以下展⽰了ORB_SLAM3编译其ROS例程结果,只有⼏个节点编译成功,其他节点报出由于opencv版本冲突问题导致编译失败错误。3、解决⽅案由于我的程序或ORB_SLAM2/3都只能使⽤opencv4才能编译通过,因此解决⽅案只能是安装使⽤了opencv4的cv_bridge。ROS noetic默认安装的cv_bridge1.15.0以及opencv4.2,因此,就要下载1.15.0版本的cv_bridge源码,将其放到⽤户⾃建的ROS⼯作空间中⽤catkin_make编译,之后将⽤户ROS节点程序设置为优先链接⽤户安装的这个版本cv_bridge(⽽不是ROS默认安装的那个),在~/.bashrc⽂件中将⽤户ROS⼯作空间包的setup.bash⽂件在最后source就能够覆盖ROS系统默认的cv_bridge了,并在ROS包对应的中更新为find_package(OpenCV 4 REQUIRED)总结⼀下,解决步骤:1. 下载1.15.0版本的cv_bridge源码,catkin_make编译2. ~/.bashrc中source上步安装的cv_bridge包路径3. 中更新find_package(OpenCV 4 REQUIRED)冷藏冰柜说明:(1)cv_bridge包包含在vision_opencv包中,因此,建议将vision_opencv包⼀起下载下来整体编译安装注意,下载源码时选择noetic对应的1.15.0版本的!(2)在cv_bridge源码⽬录下CHANGELOG.rst⽂件中有其版本更新信息,如下图所⽰:4、实例,针对ORB_SLAM3问题按照以下修改进⾏操作,即可保证正常运⾏(1)修改~/.bashrc⽂件终端重新source ~/.bashrc说明:——由于我⾃⼰安装的1.15.0版本的cv_bridge安装在~/bluerov2/src下,⽽我没有把此包路径在bashrc进⾏source,因⽽默认调⽤cv_bridge版本依然是ROS默认安装的1.13.0版本,如此这样,也未导致ORB_SLAM3的ROS包编译出错,并且ORB_SLAM3的ROS节点可以正常运⾏(好神奇,此问题需要欧博思抽时间再好好研究⼀下,此处既然不需要⼀定调⽤1.15.0版本的cv_bridge,那么我们就可以不在bashrc中source其包路径了)。——但是,如果编译时报错,还是建议在bashrc中将⽤户⾃⼰安装的cv_bridge1.15.0路径进⾏source⼀下,从⽽保证默认调⽤的是⽤户⾃⼰安装的cv_bridge1.15.0——⽤指令pkg-config --modversion cv_bridge查看⽬前系统中默认的cv_bridge版本号,pkg-config --cflags cv_bridge查看系统默认搜索cv_bridge的路径——下⾯分别展⽰了设置系统没有调⽤⽤户⾃⼰安装的cv_bridge1.15.0(本例使⽤),以及默认调⽤了⽤户⾃⼰安装的cv_bridge1.15.0的截图(2)修改find_package()默认链接opencv4将源码顶层中的find_package(OpenCV 3)修改为find_package(OpenCV 4),下⾯左图将例程ROS包中的中的find_package(OpenCV 3)修改为find_package(OpenCV 4),下⾯右图intel主板官网(3)将源码中opencv3库API替换成opencv4库API在ORB_SLAM3整个⼯程中查找关键字CV_LOAD_IMAGE_UNCHANGED,并替换为cv::IMREAD_UNCHANGED说明:如果不做此步修改⽽直接编译的话,会报错未定义的CV_LOAD_IMAGE_UNCHANGED。这是由于CV_LOAD_IMAGE_UNCHANGED是opencv3库中的,⽽cv::IMREAD_UNCHANGED是opencv4库中的。——CV_LOAD_IMAGE_UNCHANGED未定义错误——IMREAD_UNCHANGED必须加上cv::域名(不要参考博客中说的加⼀个cv声明,在哪些⽂件加,这是个问题)(4)重新编译执⾏./build.sh和./build_ros.sh分别来编译ORB_SLAM3源码及ROS例程包源码。以下展⽰了编译结果OK,虽然有opencv版本冲突问题,但不影响程序正常运⾏!iphone是什么意思(5)运⾏ORB_SLAM3的ROS包例程这⾥以运⾏Mono节点为例(使⽤ZED相机及对应的内参),效果如下:——将rosrun写成shell脚本,省去每次重新敲代码:我增加了以下⽂件:(1)单⽬节点启动shell脚本,rosrun_mono.sh(2)zed相机单⽬配置⽂件,zed_mono.yaml运⾏其他相机模式的⽅式类似,不再赘述。——由于ORB_SLAM3没有将相机最终位姿以ROS话题形式发布出来,这⾥我⾃⼰实现了将相机位姿以变换矩阵形式发布出来了(稍后会更新成nav_msgs::Odomtry格式发布)。单⽬初始化未成功阶段:⽆有效的相机位姿

问题,编译,版本,程序,导致

发布评论

评论列表(0)

  1. 暂无评论