1 全局地图
SLAM 即时定位与地图构建,或并发建图与定位。SLAM问题可以描述为: 机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和地图进行自身定位,同时在自身定位的基础上建造增量式地图,以绘制出外部环境的完全地图。
在 ROS 中,较为常用的 SLAM 实现也比较多,比如: gmapping、hector_slam、cartographer、rgbdslam等,不同算法适合不同类型的地图,复杂或者简单,大或者小。需要依赖于传感器,比如: 激光雷达、摄像头、RGB-D摄像头。
2 自身定位
在全局地图中需要确定自己的位置,slam和amcl都可以,后者自适应的蒙特卡洛定位,是用于2D移动机器人的概率定位系统。它实现了自适应(或KLD采样)蒙特卡洛定位方法,该方法使用粒子过滤器根据已知地图跟踪机器人的姿态。
3 路径规划
知道目的地后就是要制定前往的路线,ROS 中提供了 move_base 包来实现路径规则,有两种规划器。全局路径规划与本地路径规划是相对的,全局路径规划侧重于全局、宏观实现,而本地路径规划侧重与当前、微观实现。
-
全局路径规划(gloable_planner)
根据给定的目标点和全局地图实现总体的路径规划,使用 Dijkstra 或 A* 算法进行全局路径规划,计算最优路线,作为全局路线
-
本地时时规划(local_planner)
在实际导航过程中,机器人可能无法按照给定的全局最优路线运行,比如:机器人在运行中,可能会随时出现一定的障碍物... 本地规划的作用就是使用一定算法(Dynamic Window Approaches) 来实现障碍物的规避,并选取当前最优路径以尽量符合全局最优路径
4 运动控制
控制路程中的速度和方向,通过话题"cmd_vel"发布geometry_msgs/Twist
类型的消息,这意味着必须有一个节点订阅"cmd_vel"话题, 将该话题上的速度命令转换为电机命令并发送。
5 环境感知
为其他模块提供了支持。其他模块诸如: SLAM、amcl、move_base 都需要依赖于环境感知。