【学习SLAM】PL-SLAM: 基于点和线条的实时单目slam

61 篇文章 26 订阅
50 篇文章 18 订阅

大家好,对于VSLAM研究人员当然要对最新的VSLAM的研究做下总结了,这次为大家介绍PL-SLAM。


上图就是PL-SLAM的框架,是不是感觉和ORBSLAM很像呢?比较典型打特征法+直接法的结合的关键帧的Vslam

跟ORBSLAM有三个主要线程:跟踪 、构图、回环检测

一、Tracking(估计相机的位置,根据约束条件,产生新的关键帧)

特征提取方面:ORB、lsd的线条像素特征

(其实我们一直关系的一个问题,如果面对一面白墙怎么办?)

初始化估计:同样包含两种了一种是ORBslam的初始化形式,另一种则是应该树通过极限搜索的方式跟lsdslam比较像

重定位:词袋模型,关系图(同lsd是一样的)


二、Local MAPING

剔除:点和线剔除

三角化:点和线

局部BA:点和线

关键帧剔除

三、loop clousing

只做了点特征的回环,主要线条回环计算太大。

四、效果

 

对比发现,精度有所提高!那么实时性怎么样呢?

作者测试的是20fps。


五、总结:

总体感觉是把ORBSLAM+LSDSLAM的比较优秀的前端策略加到一起,在关键帧的筛选上有些亮点,毕竟增加线条约束。亮点不多,主要现在还没有源码,没办法实际测试效果。作者也会在最近公开自己的源码。
---------------------  

Ubuntu 16.04.4 编译PL-SLAM (stereo)

本文为复现一篇论文的开放源码。

《PL-SLAM: a Stereo SLAM System through the Combination of Points and Line Segments》

Gomez-Ojeda R, Zuñiga-Noël D, Moreno F A, et al. PL-SLAM: a Stereo SLAM System through the Combination of Points and Line Segments[J]. 2017.

开源代码地址:https://github.com/rubengooj/pl-slam/

作者的代码说明:https://github.com/rubengooj/pl-slam/blob/master/README.md

博客主页:https://blog.csdn.net/xs1102

文章地址:https://blog.csdn.net/xs1102/article/details/80757404

开始配置

一、配置环境

1、编译安装opencv3,参考文章:https://blog.csdn.net/xs1102/article/details/74729416

2、安装Suite Sparse

这个是为了解决找不到cholmod.h头文件的问题,Eigen/CholmodSupport头文件中会调用此文件,所以必须安装。Eigen和g2o都依赖此库,这个在官方文档中有说明。

但该库的编译依赖于OpenBLAS开源库。OpenBLAS是高性能多核BLAS库,是GotoBLAS2 1.13 BSD版本的衍生版。项目主页在:https://github.com/xianyi/OpenBLAS

OpenBLAS编译失败。。。。

cc    -O3 -fexceptions -fPIC -fopenmp   -o cholmod_simple -I../../include  cholmod_simple.c -L/home/root/src/SuiteSparse/lib -L../../lib -lcholmod -lamd -lcolamd -lsuitesparseconfig -lccolamd -lcamd -lmetis -llapack -lopenblas -lm -lrt -Wl,-rpath=/home/root/src/SuiteSparse/lib
./cholmod_demo < Matrix/bcsstk01.tri
Segmentation fault (core dumped)
Makefile:31: recipe for target 'all' failed

make[2]: *** [all] Error 139

投机取巧,将SuiteSparse的inlude文件放到pl-slam的CMakeLists.txt中所说的/usr/include/suitesparse文件夹中,cholmod.h的问题解决

其实也可以用apt安装,省事。

apt install libsuitesparse-dev

3、编译安装Eigen,官网,http://eigen.tuxfamily.org

mkdir build && cd build && cmake .. && make && make install 就可以了。

或者使用 apt-get install libeigen3-dev

如果编译时提示错误,可以cd到eigen3头文件夹所在路径,创建符号链接可以解决。

cd /usr/local/include
sudo ln -sf eigen3/Eigen Eigen
sudo ln -sf eigen3/unsupported unsupported

4、安装boost库

apt-get install libboost-dev

5、编译安装g2o

https://github.com/RainerKuemmerle/g2o

安装依赖:

apt-get install cmake libeigen3-dev libsuitesparse-dev libqt4-dev qt4-qmake libqglviewer-dev

g2o依赖于eigen,所以安装顺序不能错

g2o不建议用最新的,因为pl-slam是使用低版本的头文件,新版本中,g2o的指针需要使用std::unique_ptr传递。

6、安装YAML

apt-get install libyaml-cpp-dev

7、编译wxWeights

这个库为mrpt使用,是一个界面库,不安装该库,运行pl-slam时会报错:
Initializing PL-SLAM....terminate called after throwing an instance of 'std::logic_error'
  what():  
 =============== MRPT EXCEPTION =============
void mrpt::gui::CBaseGUIWindow::createWxWindow(unsigned int, unsigned int), line 95:
MRPT compiled without wxWidgets!
void mrpt::gui::CBaseGUIWindow::createWxWindow(unsigned int, unsigned int), line 97:

github地址:https://github.com/wxWidgets/wxWidgets

下载后,进入源代码目录下

./configure --with-opengl --enable-debug --enable-unicode && make && make install

8、下载配置stvo-pl和mrpt

这两个项目也是作者的工作,下载下来,放到pl-slam的同级目录下,pl-slam的CMakeLists.txt中可以配置stvo-pl的位置,mrpt需要将include和libs/base/include下的文件放到pl-slam的include中,mrpt

的config.h可需要拷贝到pl-slam的include/mrpt目录下。

mrpt新版涉及到重构的问题,所以作者推荐使用这个版本:https://github.com/MRPT/mrpt/tree/0c3d605c3cbf5f2ffb8137089e43ebdae5a55de3

如果编译时,提示wxTE_AUTO_SCROLL is not defined,这是因为wxWeights高版本去掉了改定义,在头文件定义即可:

    #ifndef wxTE_AUTO_SCROLL
    #define wxTE_AUTO_SCROLL 0
    #endif

 

cmake && make && make install

cp -rf /usr/local/include/mrpt/opengl/include/mrpt/* /usr/local/include/mrpt/

cp /usr/local/include/mrpt/mrpt-config/mrpt/* /usr/local/include/mrpt/

这个安装并不好用,还是直接make不install,然后配置一个cmake_modules的FindMRPT.cmake文件,将头文件复制到mrpt项目的include目录下

set(MRPT_DIR
        /home/xxxx/workspace/mrpt-1.5.0
        )

set(MRPT_INCLUDE_DIRS
        ${MRPT_DIR}/include
        )

二、编译

运行build.sh脚本,自动编译程序,手动make也可以。

export DATASETS_DIR=/home/XXXX/workspace/dataset/
./plslam_dataset <数据集名,dataset目录下的某个子文件夹名> [options]

 
Usage: ./imgPLSLAM <dataset_name> [options]
Options:
-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)
-c Config file

将pl-slam/config/dataset_params/dataset_param.yaml复制到数据集文件夹下,并配置左右视图。

数据集名也就是datasets目录下的文件夹名,多级目录可以用/,数据集下配置一个dataset_params.yaml文件,该文件可以从config/datasets_params/文件夹下复制过去。

-c 指定配置文件config/config下,默认配置在src/slamConfig.cpp中。使用相对路径时,分清工作目录。

 

g2o使用新版本时,需要使用智能指针,原来的T*都改为std::unique_ptr<T>,赋值使用std::move。

有一个/usr/bin/ld: cannot find -lg2o_ext_csparse的错误,是由于新版本的库改名导致的,

    cd /usr/local/lib/
     
    sudo ln -sv libg2o_csparse_extension.so libg2o_ext_csparse.so

解决。
 

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值