前面我们使用了两种激光建图方式,接下来利用刚刚构建地图进行导航。
6.1 导航框架
导航的关键是机器人定位和路径规划两大部分。针对这两个核心,ROS提供了以下两个功能包。
(1)move_base:实现机器人导航中的最优路径规划。
(2)amcl:实现二维地图中的机器人定位。
在上述的两个功能包的基础上,ROS提供了一套完整的导航框架,
编辑切换为居中
添加图片注释,不超过 140 字(可选)
机器人只需要发布必要的传感器信息和导航的目标位置,ROS即可完成导航功能。在该框架中,move_base功能包提供导航的主要运行、交互接口。为了保障导航路径的准确性,机器人还要对自己所处的位置进行精确定位,这部分功能由amcl功能包实现。
6.1.1 move_base 功能包
move_base是ROS中完成路径规划的功能包,主要由以下两大规划器组成。
全局路径规划(global_planner)。全局路径规划是根据给定的目标位置和全局地图进行总体路径的规划。在导航中,使用Dijkstra或A*算法进行全局路径的规划,计算出机器人到目标位置的最优路线,作为机器人的全局路线。
本地实时规划(local_planner)。在实际情况中,机器人往往无法严格按照全局路线行驶,所以需要针对地图信息和机器人附近随时可能出现的障碍物规划机器人每个周期内应该行驶的路线,使之尽量符合全局最优路径。
6.1.2 amcl 功能包
自主定位即机器人在任意状态下都可以推算出自己在地图中所处的位置。ROS为开发者提供了一种自适应(或kld采样)的蒙特卡罗定位方法(amcl), 这是一种概率定位系统,以2D方式对移动机器人定位。 它实现了自适应(或者KLD-采样)蒙特卡洛定位法,使用粒子滤波跟踪机器人在已知地图中的位姿。
6.1.3 DWA_planner和TEB_planner介绍
DWA_planner
DWA 的全称为DynamicWindow Approaches,该算法可以搜索躲避和行进的多条路经,综合各评价标准(是否会撞击障碍物,所需要的时间等)选取最优路径,并且计算行驶周期内的线速度和角速度,避免与动态出现的障碍物发生碰撞。
TEB_planner
“TEB”全称Time Elastic Band(时间弹性带)Local Planner,该方法针对全局路径规划器生成的初始轨迹进行后续修正(modification),从而优化机器人的运动轨迹,属于局部路径规划。在轨迹优化过程中,该算法拥有多种优化目标,包括但不限于:整体路径长度、轨迹运行时间、与障碍物的距离、通过中间路径点以及机器人动力学、运动学以及几何约束的符合性。“TEB方法”明确考虑了运动状态下时空方面的动态约束,如机器人的速度和加速度是有限制的。
6.2 limo导航功能
注:四轮差速模式和全向轮模式、履带模式下,导航运行的文件一样
注:在运行命令之前,请确保其他终端中的程序已经终止,终止命令为:Ctrl+c
(1)首先启动雷达,在终端中输入命令:
roslaunch limo_bringup limo_start.launch pub_odom_tf:=false
(2)启动导航功能,在终端中输入命令:
roslaunch limo_bringup limo_navigation_diff.launch
注:如果是阿克曼运动模式,请运行
roslaunch limo_bringup limo_navigation_ackerman.launch
启动成功之后会打开rviz界面,如图
编辑切换为居中
添加图片注释,不超过 140 字(可选)
注:如需自定义打开的地图,请打开limo_navigation_diff.launch 文件修改参数, 文件所在目录为:~/agilex_ws/src/limo_ros/limo_bringup/launch。请把map02修改为需要更换的地图名称。
编辑切换为居中
添加图片注释,不超过 140 字(可选)
(3)开启导航之后,会发现激光扫描出来的形状和地图没有重合,需要我们手动校正,在rviz中显示的地图上矫正底盘在场景中实际的位置,通过rviz中的工具,发布一个大概的位置,给limo一个大致的位置,然后通过手柄遥控limo旋转,让其自动校正,当激光形状和地图中的场景形状重叠的时候,校正完成。操作步骤如图 :
编辑切换为居中
添加图片注释,不超过 140 字(可选)
校正完成后
编辑切换为居中
添加图片注释,不超过 140 字(可选)
(4)通过2D Nav Goal 设置导航目标点。
编辑切换为居中
添加图片注释,不超过 140 字(可选)
地图中将会生成一条紫色的路径,手柄切换至指令模式,limo将自动导航到目标点
编辑切换为居中
添加图片注释,不超过 140 字(可选)
6.3 limo路径巡检
(1)首先启动雷达,开启一个新的终端,在终端中输入命令:
roslaunch limo_bringup limo_start.launch pub_odom_tf:=false
(2)启动导航功能,开启一个新的终端,在终端中输入命令:
roslaunch limo_bringup limo_navigation_diff.launch
注:如果是阿克曼运动模式,请运行
roslaunch limo_bringup limo_navigation_ackerman.launch
(3)启动路径记录功能,开启一个新的终端,在终端中输入命令:
roslaunch agilex_pure_pursuit record_path.launch
路径记录结束之后终止路径记录程序,在终端中输入命令为:Ctrl+c
(4)启动路径巡检功能,开启一个新的终端,在终端中输入命令:
注:把手柄调至指令模式
roslaunch agilex_pure_pursuit pure_pursuit.launch