當我運行如下指令時,遇到了如下問題
指令
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 進行編譯,然后重新運行,通常情況下就沒有問題了。