使用move_base规划路径后,小车接近目的地后原地打转的原因分析

在实验过程中,计划使用move_base规划路径,让AGV小车到达指定的目标点,但小车“到达”目的地后不停的旋转,停不下来。对此,发现了导致这一现象的一个原因,仅供参考。

上图描述的就是这种现象,为了便于观察,rviz视图中隐藏了机器人,只保留了机器人的基座标。

图中,第一次指定目标时,小车到达了指定地点并停了下来,第二次指定目标时,小车也几乎到达了指定地点但没有停下来,而是不停的在原地旋转。

问题关键因素:move_base的四个参数文件中,有一个叫base_local_planner_params.yaml的配置文件,其中有个参数是min_vel_x,这个参数控制规划路径时发给机器人的最小x方向速度,这个速度不能太大,在我的测试条件下,min_vel_x:0.2 就有些大,导致机器人到了目的地后原地旋转,降低这个值后(大约0.1左右),原地旋转现象消失。

分析原因:

首先,需要理解一点:小车要到达一个目的地,需要经历一个加减速的过程,开始时加速,中间速度稳定,快到时要减速,否则会错过目标。

在这一基础上,我推测,min_vel_x这个值设置过大会导致有效的减速命令发不出来,比如,小车到达目标前需要减速到0.1m/s的速度,但min_vel_x为0.2,move_base发送指令时最小就只能发送0.2m/s的x方向线速度,按照0.2的速度只会错过目标,因此,move_base此时选择不再发送新的x方向线速度,x方向线速度会归为0,此时并没有到达目标点(一般还差一点,并且比能够容忍的误差要大),move_base就会为进一步接近目标做规划,但此时离目标又太近,因为最低速度的限制,线速度指令始终发不出来,而角速度指令则会另小车原地打转。

需要注意的一点:此时小车并没有真正到达它所认为的目标,只是很接近了,但还不能算到达。实际操作中还存在一种现象,就是有时候min_vel_x明明有些偏大,但小车也能到达终点并不旋转(图中第一次指定目标),这种意外往往发生在算法最近一次规划路径后,小车就很接近目标了,当小车已经走进目标范围内足够接近的区域时,算法就认为已经到目标了,此时也就不再规划了,因此,此时小车不会原地旋转,

以上原因属于个人推测,仅供参考。

你可能感兴趣的:(机器人,ROS,ROS程序开发自学笔记)