ubuntu16 PL-SLAM编译 踩坑

Zandra ·
更新时间:2024-09-21
· 973 次阅读

首先贴出pl-slam readme的第一句话:对pl-slam的精度不要有太高要求。

Notice that this repository is only an open-source version of PL-SLAM released with the aim of being useful for the community, however, it is far from being optimized and we are not including some features of PL-SLAM.

apt-get安装依赖 yaml  

出现 ros路径下的yaml/init.py中 不存在import error问题:

取消anaconda的环境路径后,就没有问题了

编译安装wxwidgets-2.8:

opengl library not available, 无法找到opengl的GL和mesa库,无法完成编译。

采用apt-get下载的wxWidgets2.8库:

完成了mrpt-stvo-pl和plslam的编译,单运行时候出现,ABI 1004编译的情况与现在的编译(c++ ABI 1009)不符合,没有找到解决办法,于是

于是autoremove 卸载了 和libwxWidgets-dev有关的库 

编译安装wxwidgets-3.1: 在make mrpt时候出现error

修改script_opencv选择 opencv344

选择wxWidgets3.1 但是无法找到

查看了cmakemodules/ script_wxWidgets.cmake, 按照cmake中find_package的原理,这里优先采用mudule模式,在当前的cmakemodules文件夹和/usr/share/cmake-3.5/Module中寻找FindwxWidgets.cmake,由于没有wxWidgets-config.cmake或者wxWidgetsConfig.cmake,故不能采用config模式进行find_package,通过

打开查看FindwxWidgets.cmake,用message("...,${...} ")输出查看变量,发现会通过一个/usr/bin/wx-config的可执行文件获取cxx_flags准备查找合适版本的wx库,判断这个wx-config可能是之前安装wxWidgets2.8留下的,导致出现的问题。

发现/usr/bin/wx-config根本不存在

运行locate wx-config

/home/lincent/slam_sota/pl_slam/wxWidgets-3.1.2/wx-config
/home/lincent/slam_sota/pl_slam/wxWidgets-3.1.2/wx-config-inplace.in
/home/lincent/slam_sota/pl_slam/wxWidgets-3.1.2/wx-config.in
/usr/local/bin/wx-config
把这个拷贝到/usr/bin 下面一份 ,解决

再次cmake报错:

_filename, /usr/include/wx-2.8/wx/version.h
CMake Error at /usr/share/cmake-3.5/Modules/FindwxWidgets.cmake:880 (file):
  file failed to open for reading (No such file or directory):

    /usr/include/wx-2.8/wx/version.h
Call Stack (most recent call first):
  cmakemodules/script_wxwidgets.cmake:32 (FIND_PACKAGE)
  CMakeLists.txt:257 (include)
解决:

/usr/include/wx-2.8/wx/version.h这个文件不存在

在880行自己设置一下:

  SET(_filename "${wxWidgets_INCLUDE_DIRS}/wx/version.h")

安装mrpt stvo-pl pl-slam

配置数据集,运行

Options:
-c Config file
-o Offset (number of frames to skip in the dataset directory
-n Number of frames to process the sequence
-s Parameter to skip s-1 frames (default 1)
A full command would be:
./plslam_dataset kitti/00 -c ../config/config_kitti.yaml -o 100 -s 2 -n 1000
 

同样的道理,可以直接运行stvo-pl。 问题:

跑数据集中途弹出,显示内存不足。
解决办法:把mrpt、plslam编译为debug模式
  1)对于mrpt,cmake mrpt时使用 cmake -DCMAKE_BUILD_TYPE=DEBUG ..
  2)对于plslam,需要在IDE中

注意:同时需要将~/config文件夹内的kitti00-02.yaml复制到/home/xxx/Desktop/data/kitti/00,并修改其名为dataset_params.yaml(读程序plslam_dataset.cpp可知原因.)
如果你的数据集图片文件夹名字有区别,请做相应修改.(灰度图片为image_0和image_1,去kitti00-02.yaml内修改.) 

Invalid vocabulary for points
 vocabulary路径问题
解决办法:找到这个pl-slam/src/slamConfig.cpp,把里面的 vocabulary_p 和 vocabulary_l 换成你自己的路径。

为什么我在ubuntu中删除一个文件夹后,还能用locate找到它:

sudo updatedb 更新即可

编译mrpt时候采用了opencv344,但是有一些关于opencv2/core/type_c.h的opencv源代码的错误,考虑可能是opencv版本太高

于是用ros的opencv3.3.1重新编译mrpt,stvo-pl,pl-slam都顺利通过

备注:造成问题的原因是ximgproc模块在opencv的扩展模块opencv_contrib中,opencv在3.2版本之后引入了ximgproc模块,模块主要进行线特征的操作(分割,提取)。

cmake原理以及find_package:

https://blog.csdn.net/sen873591769/article/details/90183015


作者:鹿米lincent



pl slam ubuntu

需要 登录 后方可回复, 如果你还没有账号请 注册新账号