slam小结

对于差分式机器人的slam问题,我们可以按步骤分开讲。为了去实现这个问题,我们首先需要知道我们在环境中的位置,即机器人实现定位;其次,我们还需要知道我们周围的环境,是否有障碍物在我们周围,哪条道路可以行走。对于这个的研究,可以总结归纳为三个点:地图的精确建模,机器人的准确定位,路径实时规划。

在turtlebot上使用相机进行定位建图,我使用的是华硕的相机,xtion相机是深度相机,携带多个摄像头,能读出每个像素离相机的距离,是比较好的选择之一。具体的流程按照创客网上的配置是没有任何的问题的,根据Turtlebot入门-目录 - 创客智造。但是相机局限性有时会比较大,我们也可以采用激光雷达进行turtlebot的slam操作。我采用的是hokuyo的北洋激光雷达,雷达的基本配置启动文件和地图建立gmapping文件的配置在上面链接的教程里是有提到的,但是对于定位的amcl.launch文件我们需要自己去写。

        对于操作的基本流程,我们首先要启动turtlebot的基本驱动(因为我们需要待会用到turtlebot的里程计数据,在rviz上显示实时位置。),再启动gmapping的定位建图,将周围环境的障碍物以地图形式建立并保存。这是重要的步骤,只有有了正确的地图,在接下来定位导航时机器人才能准确的进行实时的路径规划,成功避开障碍物。最后,我们就可以采用先前建立的地图,使用amcl.launch来进行定位导航了,amcl还调用了move_base.yaml文件,他能够为机器人计算发送速度。local_planning.yaml文件可以为机器人实时规划出路径。

        这是turtlebot采用gmapping slam的基本步骤。

        对于navigation的配置,我们需要使用到tf。因为我们需要自己去放置相机或者激光雷达,所以在不同地方我们的设备和机器人的中心之间的坐标是不同的。我们将机器人的坐标设为base_laser,将机器人的移动基座标设为base_link,


slam小结_第1张图片

假设我们知道激光器在移动基座的中心点之上10厘米和向前20厘米处安装。这给了我们一个将“base_link”坐标系与“base_laser”坐标系相关联的平移值和偏移值。我们可以实现转换,从“base_link”坐标系到“base_laser”坐标系的数据,我们必须应用(x:0.1m,y:0.0m,z:0.2m)的转换,并从“ base_laser“坐标系到”base_link“坐标系,我们必须应用相反的变换(x:-0.1m,y:0.0m,z:-0.20m)。在转换好坐标后,对于后面的机器人判断障碍物信息是必须的。

       navigation中 move_base 的配置,将全局路径和局部路径规划程序连接在一起,以完成全局导航任务。还维护两个costmap,一个用于全局路径规划,一个用于局部路径规划。

        对于机器人的运动,我们将要配置base_local_planner(本地规划配置),它将根据规划的全局路径计算发布给机器人的速度控制指令。我们有三个通用配置文件:

1        costmap_commn_params.yaml(代价地图):用来存储周围环境的障碍物信息。里面有几个参数我们将能在运行终端看到。如obstacle_range(检测到的最大范围值),raytace_range(检测到的自由空间的最大范围)。

2        global_costmap_params.yanl(全局规划配置文件):用来存储配置全局代价地图的参数。

3        local_costmap_params.yaml(本地规划配置文件):存储本地代价地图的配置参数。

        在turtlebot中,还有dwa_local_planner的文件,也用来局部规划,这个路径规划文件对于具有合理加速度机器人是较好的。总体的流程图我们可认为是:


slam小结_第2张图片

  导航包使用TF来确定机器人在地图中的位置,并将传感器数据与静态地图相关联。然而,TF不提供关于机器人的速度的任何信息。因此,导航包要求任何里程源都通过ROS发布TF变换和nav_msgs/Odometry消息。

        关于global_planner和local_planner的关系图,如下:


slam小结_第3张图片

你可能感兴趣的:(slam小结)