GraphSLAM又被称为Graph-based SLAM,它的基本思想是将机器人不同时刻的位姿抽象为点(pose),机器人在不同位置上的观测所产生的约束被抽象为点之间的边,或者叫约束(constraint)。
所谓的约束可以有多种多样的形式,比如机器人在A点和B点都看到同一个消防栓(我们可以认为这是固定在地图上的landmark),那么机器人在AB点观测到消防栓的相对位置,就对机器人在A点和B点的位姿产生了约束,进一步的,AB两点之间也产生了就约束。
GraphSLAM就是在机器人运动的过程中构建出若干点(pose)和边(constraint)组成的图(Graph),再从全图的角度进行优化。
我最近手里面只有一台激光雷达,于是就尝试了使用mrpt_graphslam_2d在ros上进行建图.
首先需要克隆pkg到自己的工作空间, git clone https://github.com/mrpt-ros-pkg/mrpt_slam.git
这个包下面有非常多的使用mrpt库的slam方法,今天主要介绍graph slam,其他的使用方法请看我其他博客.
接下来就是编译了,我习惯用catkin_make --only-pkg-with-deps这个命令编译,方便定位package可能出现的error.
编译过了以后,我们需要修改它的sr_graphslam_demo.launch文件来自己使用.由于launch源文件已经被我改的面目全非了,所以我还是把我修改好的launch文件贴上来吧.
其实修改思路就是把各个frame和topic修改为自己实际机器人发出的.然后把关于bag的语句都删掉,因为我们不需要跑数据集.
需要注意的是这个launch文件还include了一个graphslam.launch.我还是贴出来把(在源文件上修修改改真的不是一个好习惯)