目录
方法一:删除原有系统的eigen库,安装合适版本,推荐3.1版本
方法二:在CMakeLists里面取消编译器的一些设置,具体看链接,这里不再赘述
总结:遇到其他的问题,大都能从csdn上找到答案,如果实在找不到,很有可能是版本的问题!版本不适配会遇到各种问题!
我主要follow的文章如下:
Orbslam2 稠密点云 +D435i实现(Ubuntu18.04)_d435运行orbslam2-CSDN博客
这篇文章只是讲了个大概,中途会遇到很多问题,我不停地解决问题,目前已经能跑通。
总结下来,最大的问题就是各个库的版本一定要适配!
先查看一下自己的关键库:opencv,eigen3,vtk和pcl的版本
pkg-config --modversion eigen3 #查看eigen3版本
pkg-config --modversion opencv #查看opencv版本
sudo find | grep "VTK" #查看vtk版本
dpkg -l libpcl-* #查看pcl版本
经过我不断的试错,合适的版本为
opencv:3.2.0
eigen3: 3.1.0
vtk: 7.1.1
pcl: 1.8.1
pangolin: 0.5
如果按照这样子装,可以一路顺风,这里特别特别要注意的点就是,不要用git clone或者sudo apt-get来安装库,这样会直接帮你安装最新版本,而最新版本之间不适配,会带来很多错误!!!!!一定要去下载源码,然后老套路,mkdir build一直到sudo make install(大家一定知道我在讲什么)
以本人为例,刚开始通过git clone或sudo apt-get装的库:
eigen3版本好像为3.3.4,pcl版本为1.13.1.99,vtk 是sudo apt-get下载的,出现了很多错误。
关于卸载自己版本的库:
一定要去仔细搜终端代码,不然可能删不干净,会很麻烦,有一些库可以在build文件夹里面通过以下代码删除:
sudo make uninstall
关于VTK:
首先很重要的一点:安装pcl之前一定要先安装vtk,ubuntu18.04可能会自带vtk,但是这个vtk里面其实是不全的,运行orbslam2的时候会报错!
这里尤其要说明一点,我刚开始vtk和pcl安装是按照这篇文章安装的:(最新)Ubuntu18.04安装pcl点云库(遇坑大全,解决方法)_ubuntu已经安装no module named 'pcl-CSDN博客
这个博主讲的很好,但是vtk的安装,他是让我们用sudo apt-get的方式安装的,虽然最后也能将pcl安装好,但是在cmake.. orbslam2的时候,可能会报如下的错误:
情况一:找不到FindVTK.cmake文件
CMake Warning at /usr/share/pcl-1.13/PCLConfig.cmake:268 (find_package):
By not providing "FindVTK.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "VTK", but
CMake did not find one.
CMake Warning at /usr/share/pcl-1.13/PCLConfig.cmake:268 (find_package):
By not providing "FindVTK.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "VTK", but
CMake did not find one.
情况二:找不到一些.so库
/usr/bin/ld: 找不到 -lvtkIOMPIImage
/usr/bin/ld: 找不到 -lvtkIOMPIParallel
/usr/bin/ld: 找不到 -lvtkFiltersParallelDIY2
collect2: error: ld returned 1 exit status
io/CMakeFiles/pcl_io.dir/build.make:818: recipe for target 'lib/libpcl_io.so.1.13.1.99' failed
make[2]: *** [lib/libpcl_io.so.1.13.1.99] Error 1
CMakeFiles/Makefile2:1418: recipe for target 'io/CMakeFiles/pcl_io.dir/all' failed
make[1]: *** [io/CMakeFiles/pcl_io.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....
/usr/bin/ld: 找不到 -lvtkIOMPIImage
/usr/bin/ld: 找不到 -lvtkIOMPIParallel
/usr/bin/ld: 找不到 -lvtkFiltersParallelDIY2
collect2: error: ld returned 1 exit status
io/CMakeFiles/pcl_io.dir/build.make:818: recipe for target 'lib/libpcl_io.so.1.13.1.99' failed
make[2]: *** [lib/libpcl_io.so.1.13.1.99] Error 1
CMakeFiles/Makefile2:1418: recipe for target 'io/CMakeFiles/pcl_io.dir/all' failed
make[1]: *** [io/CMakeFiles/pcl_io.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....
总的来说,就是一定要源码安装vtk,vtk和pcl的安装我这里推荐一个文章,选择我说的版本安装安装即可,再强调一遍先装vtk,再装pcl。
【PCL】ubuntu20.04安装 VTK7.1与PCL1.8(PCL依赖VTK,要先装且最好源码安装)_vtk会跟pcl一起装吗-CSDN博客
关于PCL:
直接git clone,会安装最新版,会造成类似以下的问题:
fatal error: pcl/visualization/image_viewer.h: No such file or directory
或者
fatal error: pcl/visualization/pcl_visualizer.h: No such file or directory
本质是你/usr/include/pcl里面压根就没有visualization这个文件夹,解决方法是更换pcl版本,安装pcl 1.8就不会有这个问题,我一开始用的pcl 1.13,出现了这个问题
特别值得提一点:段错误(核心已转储)
当orbslam2成功编译,运行数据集的时候出现这个问题,目前常规的两个解法,可以参考这个博文:论ORBSLAM_with_pointcloud_map段错误(核心已转储)的另一种解决方法_yolo_orb_slam3_with_pointcloud_map-CSDN博客
方法一:删除原有系统的eigen库,安装合适版本,推荐3.1版本
方法二:在CMakeLists里面取消编译器的一些设置,具体看链接,这里不再赘述
仍无法解决:可能是高版本的pcl库没有删干净
我尝试了以上方法都无法解决,最后不断尝试,找到了问题所在,我最初装的pcl 13.1.99版本卸载并没有卸载干净,可能造成了版本冲突。
运行代码:
pkg-config --modversion pcl_common
发现自己的版本依然是pcl 1.13.1.99,可是这时候我已经卸载并且安装了pcl 1.8版本了,通过搜索,找到pcl_common的位置如下:/usr/lib/pkgconfig,发现这里面有一些1.13版本的文件没有删除,将所有plc开头的文件删除,命令如下,解决了段错误(核心已转储)的问题。
sudo rm -r /usr/lib/pkgconfig/pcl*
关于opencv和ros:
这里可以参考一篇我自己的文章,里面前半部分分享了一个小鱼的命令行指令,可以一键安装ros,自带了opencv 3.2,很实用:
ubuntu18.04系统中运行./build_ros.sh的时候遇到报错-CSDN博客
总结:遇到其他的问题,大都能从csdn上找到答案,如果实在找不到,很有可能是版本的问题!版本不适配会遇到各种问题!
本人刚开始学习slam,并不是很会,自己不断踩坑总结出来的经验,分享给大家,可能有点啰嗦,如果帮到您的话,希望您给个点赞收藏关注支持一下!!祝大家永远不报错!!