ubuntu14.04+ros_indigo+lsdslam
我在开始进行安装的时候是信心满满得照着https://github.com/tum-vision/lsd_slam.git的README.md文档规矩得一步一步操作,没想到遇上了许多问题。
最后,我放弃了rosmake,改用catkin_make。
以下是我安装时参考的一些博客,大多数的问题以下的博客都给出了解决方法。
https://blog.csdn.net/zhuquan945/article/details/72980831
https://blog.csdn.net/love1055259415/article/details/79874231
https://blog.csdn.net/fireflychh/article/details/79246752
在这里我要重点提出的是opencv版本冲突的问题,
实验环境:
1.ros indigo版本
2.ubuntu14.04+系统自带的opencv2.4.8+自己安装的opencv2.4.11+opencv3.1.0
首先用指令pkg-config --modversion opencv查询我的ubuntu默认的系统,结果发现是3.1.0。
在我编译的时候发现了很多未定义的问题:
main_stitchVideos.cpp:(.text+0x8f01):对‘cv::String::deallocate()’未定义的引用 main_stitchVideos.cpp:(.text+0x8f30):对‘cv::String::deallocate()’未定义的引用 main_stitchVideos.cpp:(.text+0x8fc9):对‘cv::String::deallocate()’未定义的引用 main_stitchVideos.cpp:(.text+0x8fdb):对‘cv::String::deallocate()’未定义的引用
分析后以为是sldslam要求的是opencv2.4.8的版本,而我的系统是opencv3.1.0,所以想在CMakeList.txt下进行修改。
修改方法可以参考:https://github.com/YaoZhiwen/lsd_slam_catkin_16.04/blob/master/lsd_slam_core/CMakeLists.txt
set(OpenCV_INCLUDE_DIRS /opt/ros/kinetic/include/opencv-3.3.1) set(OpenCV_LIBS /opt/ros/kinetic/lib/libopencv_core3.so.3.3.1 /opt/ros/kinetic/lib/libopencv_imgproc3.so.3.3.1 /opt/ros/kinetic/lib/libopencv_highgui3.so.3.3.1 /opt/ros/kinetic/lib/libopencv_calib3d3.so.3.3.1) find_package(${OpenCV_INCLUDE_DIRS}) target_link_libraries(lsdslam ${FABMAP_LIB} ${G2O_LIBRARIES} ${catkin_LIBRARIES} csparse cxsparse X11 ${OpenCV_LIBS})
在以上4个地方作出修改,上一个博主实在ubuntu16.04上安装的Kinetic版本的ros系统,因为这个版本的ros是自带opencv的,所以我们根据自己系统的实际的情况,把路径修改,如果你采用cmake,make没修改路径安装的话,那么安装后OpenCV默认存储的位置是/usr/local目录下。头文件放在include文件夹下,库文件放在lib文件夹下。但是我又遇到了问题:
/usr/bin/id:warning:libopencv_imgproc.so.2.4,need by /opt/ros/indigo/lib/libcv_brige.so, may conflict with libopencv_imgproc.so.3.0 /usr/bin/id:warning:libopencv_core.so.2.4,need by /opt/ros/indigo/lib/libcv_brige.so, may conflict with libopencv_core.so.3.0
这是cv_bridge需要opencv2.4.8的支持,而我的系统默认的是opencv3.1.0。这里有一些别人解决这个问题的方式:
https://blog.csdn.net/u013832707/article/details/72636602
https://www.cnblogs.com/Jessica-jie/p/6959309.html
https://blog.csdn.net/gauxonz/article/details/52842099
这三个博客,前两个是我写这篇博客的时候现找的,后面的一篇我试了,对我不起作用。
最后,因为被这个问题折磨得太久了,所以我放弃了挣扎,我直接把opencv3.1.0卸载了。
然后,查了下系统的默认版本,输出2.4.8。
编译... ...
终于编译成功了。