当我运行如下指令时,遇到了如下问题
指令
cd svo_ws
source ./devel/setup.bash
roslaunch svo_ros euroc_vio_mono.launch
rosbag play MH_01_easy.bag -s 50
运行时遇到的问题
OpenCV Error: Bad argument (Unknown interpolation method) in resize, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/imgwarp.cpp, line 3367
terminate called after throwing an instance of 'cv::Exception'
what(): /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/imgwarp.cpp:3367: error: (-5) Unknown interpolation method in function resize
后来发现在编译时有一个warnning
/usr/bin/ld: warning: libopencv_core.so.3.4, needed by /home/serena/svo_ws/devel/.private/dbow2_catkin/lib/libDBoW2.so, may conflict with libopencv_core.so.3.2
/usr/bin/ld: warning: libopencv_imgcodecs.so.3.2, needed by /home/serena/svo_ws/devel/.private/svo_online_loopclosing/lib/libbow.so, may conflict with libopencv_imgcodecs.so.3.4
然后我根据问题找到了一个解决方案:(25条消息) ROS学习:cv_bridge与opencv版本冲突三种解决方案_Mr.Qin_的博客-CSDN博客_cv_bridge这篇文章中也提到了之所以出现上述问题,是因为ros本身携带的OpenCV与我自己安装的OpenCV发生冲突,因为在我们使用ros处理图像时,会用到cv_bridge库,但是通常情况下cv_bridge使用的是ros中的opencv,然后我们的工程代码使用的是我们自己安装的opencv,此时就容易发生冲突。
解决这种冲突的方式有三种:
1. 不使用cv_bridge,这种方法有些逃避问题的嫌疑,因为很多时候没有cv_bridge,代码是没法工作的,这种方法不好。
2. 更改ros下cv_bridge中使用opencv的设置,让ros中的cv_bridge使用本地安装的opencv,可以按照下面文章中的步骤来设置。Ubuntu18.04 ros-melodic opencv版本冲突问题解决 (icode9.com)
3. 重新编译一个不同名字但是与cv_bridge相同功能的库。修改方法可以按照下面文章中的方法三进行修改。?????(25条消息) ROS学习:cv_bridge与opencv版本冲突三种解决方案_Mr.Qin_的博客-CSDN博客_cv_bridge?下载cv_bridge库时要选择适配自己ros版本的版本,比如我的ros是melodic的,所以你下载时选择melodic 分支进行下载。
?修改文件夹名字时,注意有两处,一处是:vision_opencv-melodic下的cv_bridge修改为cv_bridge_1, 然后是vision_opencv-melodic/cv_bridge_1/include/下的cv_bridge也要修改为cv_bridge_1.
然后是修改引用cv_bridge.h的文件,修改为cv_bridge_1/cv_bridge.h。在svo_ros中需要修改的地方是,svo_ros/package.xml,svo_ros/src/svo_interface.cpp,和visualizer.h.
?整完之后,重新catkin build 进行编译,然后重新运行,通常情况下就没有问题了。
|