pl_slam配置、运行过程_plslam运行-程序员宅基地

技术标签: Ubuntu  slam  pl-slam  

源码下载链接

pl_slam源码下载链接

各种库的安装以及常见问题解决

根据github中的要求依次安装系统在运行过程中哦所用的一系列库(尽可能保持介绍的库安装顺序进行安装,因为很多库之间会有依赖关系。)

各种库的安装

  1. OpenCV 3.x.x
  2. Eigen3(3.2.92或者3.2.10)
  3. Boost
  4. YAML
  5. stvo-pl
  6. MRPT

以上所有的库可以直接参考stvo_pl配置、运行过程进行配置
如果stvo-pl运行正常,说明相关库已经安装成功。(保证stvo-pl和pl-slam在同一目录下)

g2o库安装配置

g2o库在安装之前一定保证eigen3(版本一定要对)匹配的库安装成功。
安装依赖

sudo apt-get install libeigen3-dev libsuitesparse-dev qtdeclarative5-dev qt5-qmake libqglviewer-dev

安装g2o

cd g2o
mkdir build
cd build
cmake …/
make
sudo make install

编译运行

./plslam_dataset kitti/00
  • 在pl-slam文件夹下创建kitti文件夹,将kitti 数据集中的00数据集复制到该文件夹中;
  • 将pl-slam/config/dataset_params/kitti00-02.yaml复制到/00文件中并将文件名称改为dataset_params.yaml并将其中的image2/_image3/改为image0/_image1/;
  • 在.bashrc文件最后添加(如果之前的stvo-pl正常运行了就不用再改了)
gedit ~/.bashrc
export DATASETS_DIR=/××××/pl-slam
source ~/.bashrc
  • 在执行命令中注意…/config/config/config_kitti.yaml,文件的具体位置。

结果

在这里插入图片描述

问题解决方案

  • 在执行./build.sh时会出现各种和eigen/g2o相关的报错,大概率是库版本匹配的问题,试试重新安装eigen/g2o库;
  • 报错/usr/bin/ld: can not find -lg2o_ext_csparse 解决办法
cd /usr/local/lib
sudo ln -sv libg2o_csparse_extension.so libg2o_ext_csparse.so
  • 找不到字典Invalid vocabulary for points
    修改/config/config/config_kitti.yaml和src/slamConfig.cpp文件中的 vocabulary_p 和vocabulary_l为自己电脑下的绝对地址;
  • 当运行时发生内存溢出;重启电脑。
  • 在执行系统的时候一直提示找不到g2o库,在确定已经安装g2o的情况下在CmakeList.txt文件中find_package(G2O REQUIRED) 之前添加以下俩条语句
list(APPEND CMAKE_MODULE_PATH  /home/zhang/AllLib/g2o/g2o/cmake_modules)
set(G2O_ROOT /home/zhang/AllLib/g2o/g2o)

或者在CMakeLists.txt文件目录下创建一个cmake_modules文件夹,在将十四讲中ch6中的FindG2O.cmake文件复制进来进行编译。

  • 在执行./build.sh时出现g2o函数问题,类似如下/home/zbs/SLAM/PL_SLAM/PL-SLAM-STEREO/src/mapHandler.cpp:3967:77: error: no matching function for call to ‘g2o::BlockSolver<g2o::BlockSolverTraits<6, 3> >::BlockSolver(g2o::BlockSolver<g2o::BlockSolverTraits<6, 3> >::LinearSolverType*&)’ g2o::BlockSolver_6_3* solver_ptr = new g2o::BlockSolver_6_3(linearSolver);
    解决办法是将出错的这俩个位置
pl-slam/src/mapHandler.cpp:3968:101:
pl-slam/src/mapHandler.cpp:4193:77:

源码换成一下的代码

    //g2o::BlockSolver_6_3::LinearSolverType* linearSolver;
    //linearSolver = new g2o::LinearSolverCholmod<g2o::BlockSolver_6_3::PoseMatrixType>();
    //g2o::BlockSolver_6_3* solver_ptr = new g2o::BlockSolver_6_3(linearSolver);
    //g2o::OptimizationAlgorithmLevenberg* solver = g2o::OptimizationAlgorithmLevenberg(solver_ptr);
    std::unique_ptr<g2o::BlockSolver_6_3::LinearSolverType> linearSolver(new g2o::LinearSolverCholmod<g2o::BlockSolver_6_3::PoseMatrixType>());
    std::unique_ptr<g2o::BlockSolver_6_3> solver_ptr(new g2o::BlockSolver_6_3(std::move(linearSolver)));
    g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg(std::move(solver_ptr));

再次执行./build.sh

  • 运行程序时候MRPT开启之后一段时间发生段错误退出界面,需要修改CmakeList.txt中
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -mtune=native -march=native")
修改为
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -mtune=native")
  • 已经设置了 D A T A S E T _ D I R DATASET\_DIR DATASET_DIR环境变量,但是在执行时依旧无法定位路径,需要打开一下该路径即可解决该问题。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ABC1225741797/article/details/112384957

智能推荐

Obsidian 手动安装插件教程_obsidian插件本地安装-程序员宅基地

文章浏览阅读8.5k次,点赞2次,收藏6次。Obsidian 手动安装插件教程设置—选项—第三方插件已安装插件——打开插件文件夹将Github上下载的插件解压缩后放入该文件夹以安装思维导图插件为例:_obsidian插件本地安装

iOS 版智能生活 App SDK 开发入门教程【超详细代码步骤说明】_ios. 涂鸦sdk如何接入-程序员宅基地

文章浏览阅读1.3k次。根据步骤操作,小白都能在两小时内快速开发出一款自己的 IoT App!_ios. 涂鸦sdk如何接入

ArcPy中mapping常见函数及用法1-程序员宅基地

文章浏览阅读1.1k次。  arcpy的mapping模块常见属性方法总结1.如何获取当前地图文档: 方式:mxd = mapping.MapDocument("CURRTENT")引用本地或者网络文档(arcpy.mapping.Document("文件路径"))2.如何获取当前图层的图层列表: Eg:import arcpy.mapping as mapping   mxd = mapping.M..._arcpy mapping

js数字转千分位 保留小数位_整数千分位 js,小数点保留-程序员宅基地

文章浏览阅读2.4k次。保留原有形式,有小数点的保留小数位,整型的依然返回整型(String)formatData(num){ num = num + ''; if (!num.includes('.')) { num += '.' } return num.replace(/(\d)(?=(\d{3})+\.)/g, function ($0, $1) { ..._整数千分位 js,小数点保留

Altium Designer 从导入DXF文件,并转换成板框_ad24导入的孔怎么转换为板框的孔-程序员宅基地

文章浏览阅读7.4k次,点赞2次,收藏5次。http://www.cnblogs.com/craftor/archive/2012/06/28/2567259.html大多数人都知道,PADS中导入DXF文件,然后转换成板框,是很方便的。AD也同样可以做到。PADS导入DXF见:http://www.cnblogs.com/craftor/archive/2012/01/14/2322446.html 1_ad24导入的孔怎么转换为板框的孔

【Elasticsearch】es 写入 忽略 错误字段 存储正确字段 ignore_malformed_es 查询时忽略格式不正确的ip-程序员宅基地

文章浏览阅读1.6k次。1.概述官网:https://www.elastic.co/guide/en/elasticsearch/reference/current/ignore-malformed.html#ignore-malformed我们经常碰到一些内容不规范或者格式不对的数据,例如某个IP字段的里出现"UNKNOWN",某个数字字段出现"-"。如果在这些字段上已经设置了明确的类型,比如"ip"或者"float",字段中出现了非该类型的值,ES会抛出异常并丢弃整条数据。我们可以在该字段上设置"ignore_malf._es 查询时忽略格式不正确的ip

随便推点

WPF窗体加载的事件顺序_wpf window load-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏5次。对一些相对复杂的业务需求而言,弄懂window各事件的执行顺序会让我们游刃有余。_wpf window load

Instruments: Heap Allocations and Anonymous VM-程序员宅基地

文章浏览阅读4.9k次。XCODE5 中 Instruments中新的条目 Heap Allocations and Anonymous VMhttp://meandmark.com/blog/2014/01/instruments-heap-allocations-and-anonymous-vm/我zh_instruments: heap allocations and anonymous vm

java 调用 ora-04068_在Java/JDBC中透明处理“ORA-04068”错误-程序员宅基地

文章浏览阅读320次。转载自:http://database.ctocio.com.cn/tips/14/8106014.shtml在Oracle 里,如果你想编写存储过程你当然应该使用PL/SQL包。在这篇文章里,假设你一般了解PL/SQL 和非常熟悉PL/SQL 包。这篇文章关注于一个令人讨厌的错误,这个错误使许多使用PL/SQL以及使用API(例如JDBC)从应用层调用它的开发人员很苦恼。【IT专家网独家】导言在..._not executed, altered or dropped package body \"egp.egrb_policy_pkg\

swagger3 设置值可以为空_【Swagger2】【3】API注解详解,以及注解常用参数配置-程序员宅基地

文章浏览阅读370次。前言:@Api,@ApiOperation,@ApiImplicitParam,@ApiModelProperty,@ApiIgnore正文:一,Controller层@ApiIgnore@CrossOrigin(origins= "*")@RestController@Api(tags= {"文章接口"})public classArticleController {@ApiIgnore@Api..._io.swagger.v3.oas @apiignore

python stdout stderr 一起输出_关于python:您可以愚弄isatty并分别记录stdout和stderr吗?...-程序员宅基地

文章浏览阅读344次。问题因此,您想(分别)记录一个进程或子进程的stdout和stderr,如果您未记录任何内容,则输出不会与在终端中看到的输出不同。似乎很简单,不是吗?不幸的是,似乎不可能为这个问题写一个通用的解决方案,该解决方案适用于任何给定的流程...背景管道重定向是一种分离stdout和stderr的方法,允许您分别记录它们。不幸的是,如果将stdout / err更改为管道,则该过程可能会检测到该管道不是t..._subprocess.popen stdout和stderr定向到同一输出

jQuery学习点滴_"$(\"p\").css(\"color\")"-程序员宅基地

文章浏览阅读2.1k次。jQuery学习点滴   在学习之余对jquery提供的方法进行分类总结,下文有些抄摘w3cschool,只为以后使用起来方便查找!jQuery 语法jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作。基础语法是:$(selector).action()美元符号定义 jQuery 选择符(selector)“查询”和“查找” HTML 元素 jQ_"$(\"p\").css(\"color\")"