ROS -- 最简单的SLAM(1)

SLAM -- 仿真 定位 构建题图。地图对去机器人的定位是很重要的,我们只有在有地图的情况下才可以进行MCL定位。但是在比较宽广的区域下,去预先的得到地图数据又不make sense,尤其是在自动驾驶领域,不肯能让我们的车永远都在我们设定好的地方活动,我们需要他们能够跑到世界各地。所以,在运动过程中创建地图数据的能力就显得很重要。

Thanks GOD!!! 大牛们为我们带来了slam算法,接下来我们就介绍下载ROS中如何实现slam来进行地图动态创建。

步骤1. 构建house.world

我们通过gazebo创建小车的运动环境

步骤2. 构建小车模型

编辑xacro文件创建小车外观,并编辑gazbo文件加载传感器仿真插件。这里我们用的激光雷达是hokuyo。直接通过mesh加载。

步骤3. 编辑启动脚本,运行仿真环境

在启动环境的launch文件中我们看到加载了小车的描述luanch文件。

这里说下两个比较有用的工具:

joint_state_publisher:ROS wiki上说的很明白,我们小车上的轮子是通过joint链接的,这个工具可以直接发布joint的转动数据。

robot_state_publisher: 将小车的坐标系都加入到tf树种,用了这个工具就方便不同坐标系之间的数据转化了。

我们看下区别,如果不适用state_publish, tf树是这样的:

没有将小车的轮子坐标系加入。

使用了之后呢?

到了关键的步骤了。

步骤4. 启动gmapping,进行slam

我们使用最多的slam工具包就是ros的gmapping。具体的关于gmapping使用的算法在今后我会详细记录。这里主要看下这个ros包的使用方式:

创建gmapping的launch 文件进行相关的参数设定:

这里有一个问题要注意,baseframe需要设定小车已有的坐标系。 base_frame代表机器人的坐标系。

创建最终的启动脚本。

source下环境, 然后运行脚本,就可以看到rviz显示出的slam了。

CODE: