本篇博客主要介绍ROS中与SLAM和Navigation有关的内容。
1.ROS中的SLAM
如上图所示,一般而言,一个机器人一般包含定位(Localization)、建图(Mapping)与路径规划(Path Planning)三个方面,SLAM就是属于定位与建图的交集。ROS中常用的SLAM包有GMapping、Karto、Hector、Cartographer。
在ROS中,建图建出来的图是OccupancyGrid
格式,本质上可以理解为一个栅格图片,如下。
从总体而言,一个Map可以分为header
、info
和data
三部分。header
为报头,存储了当前地图的序列号、时间戳以及坐标系名称。info
里存放了地图的加载时间、分辨率(m/pixel)、地图宽高(pixel)、初始化时的位姿。data
部分存放的是实际的地图数据。
(1)GMapping
计算图如上图所示,最核心的节点是slam_gmapping
。从输入输出的角度,整个GMapping系统的输入只有两个:坐标变换关系tf
和激光雷达数据scan
。其中这里的tf
并不是任意的tf
,而是值里程计odom
到底盘base
之间的tf
,而这个tf
其实是由里程计odom
获得的,获得方式可以是编码器、视觉或IMU等。系统的输出则有四个,分别是:1.tf
,用来定位,它发布的是map
到odom
之间的tf
。这样,结合前面odom
到base
之间的tf,就可以构成tf
联通关系,从而获得map
到base
之间的转换,实现定位。2.而对于地图则直接发布建好的图到map
上。3.同时还发布了map
的元数据信息。4.建图的精度entropy
。
GMapping还提供了一个Service,可以通过这个Service动态地获取建好的地图。
GMapping还提供了很多可配置的参数。其中最关键的是base_frame
、map_frame
以及odom_frame
三个参数。
(2)Katro
Karto的计算图。它的输入与GMapping一样,坐标变换关系tf
和激光雷达数据scan
。它的输出包含map到odom的变换、地图以及地图元数据三个内容。
在ROS中只要涉及到地图,就是map、odom和base三者之间的关系。对于odom和base之间的关系是通过里程计来进行维护的,里程计包括编码器、视觉里程计、IMU等等。但这些观测值都会有误差,时间长了会有误差累积,在ROS中SLAM框架接收这些带误差数据作为输入,利用算法得到误差修正,最后将这些误差修正加到map与odom之间的变换关系上,从而消除误差累积。
(3)示例演示
打开终端,输入:
roslaunch robot_sim_demo robot_spawn.launch
启动机器人的模拟场景,然后输入:
roslaunch slam_sim_demo gmapping_demo.launch
即可启动GMapping的DEMO,此外还有Karto、Hector、Cartographer例子,名字换一下就行。然后,为了可视化,可以使用RViz,在终端中输入:
roslaunch slam_sim_demo view_slam.launch
运行后的界面如下所示。
2.ROS中的Navigation
Navigation的框架介绍如上图所示。整个框架中最核心的节点就是move_base
。输入需要tf,各关节之间的关系;odom,里程计信息;map,世界地图;sensor,传感器数据;goal,最后还需要设置一个目标。输出只有一个cmd_vel,发给机器人底盘的运动指令。
(1)move_base节点
move_base
节点功能包含三块:全局规划(针对静态障碍)、局部规划(针对动态障碍)、处理异常行为。
因此,要想启动需要指定这三个参数,当然也有默认值。更多调用参数参考官方文档。
(2)costmap
导航用的代价地图,用于路径规划。在move_base节点中有两张(global costmap、local costmap)、二维、多层(static layer、obstacle layer、inflation layer)。
(3)map_server与AMCL
(4)示例演示
打开终端,输入:
roslaunch robot_sim_demo robot_spawn.launch
启动机器人的模拟场景,然后输入:
roslaunch navigation_sim_demo amcl_demo.launch
即可启动AMCL的DEMO,此外还有其它几个可以选择。然后,为了可视化,可以使用RViz,在终端中输入:
roslaunch navigation_sim_demo view_navigation.launch
运行效果如下所示。
以上演示了SLAM及导航相关的Demo,对Gazebo和RViz模拟环境有了感性的认识。对于其中更详细的细节,之后再作介绍。
本文作者原创,未经许可不得转载,谢谢配合