TEB Local Planner的特性与参数调试技巧总结

本文将介绍ROS导航中的局部规划器TEB Local Planner在实际车辆上的应用条件和参数调试方法。同时我们也将会讨论与之相关的局部耗费地图(local costmap)和耗费地图转换器(costmap converter)。这里我们将不会详细讨论如何在ROS导航栈中配置TEB Local Planner。读者若需相关信息可阅读其它文章。

TEB Local planner 的基本特性和使用TEB的主要原因

在讨论我们为何要使用TEB Local Planner之前,首先向读者简要介绍使用TEB Local Planner的理由。毕竟,若是更加简单的局部路径规划器可以满足要求,读者便没有必要再使用计算量大又难以调试的TEB规划器了。

TEB Local Planner的重要特点

TEB规划器可以处理阿克曼底盘车辆的运动学约束。阿克曼底盘即指常见的汽车底盘,一对车轮方向不可变化,一对可以转向。ROS导航栈默认的局部规划器base local planner只能处理万向轮或差速转向的车辆模型。

TEB是时间最短的最优控制器。在最大速度和加速度等参数约束的条件下,TEB规划器将规划出时间最短路径和速度指令。路径上可以表现为明显的切弯、靠近障碍物;速度指令上将会表现为速度和方向指令的快速振荡。

TEB基于姿态搜索最优方案。TEB的基本思路是在车辆附近空间内散布大量的姿态,然后通过搜索树搜索最优方案。因此,车辆轮廓的准确描述对于TEB的工作性能有显著影响。

在系统中使用TEB Local Planner的缺点与潜在问题

TEB规划器对电机和舵机的动态响应性能要求很高。在给定加速度约束的情况下,TEB规划输出,即电机控制器的输入是一个斜坡输入。使用直流电机时,需要认真调试PID参数才能实现比较好的效果。

TEB规划器计算量很高。经笔者尝试,TEB规划器在一款i3-7100U的小型工控机上无法发挥良好效果,默认设置下规划周期可达1秒以上。若开启不同拓扑结构路径的同时规划(homotopy class planning),规划周期甚至可达20秒以上,完全无法使用。

TEB规划器的稳定性一般。由于不断重新规划路径,且实际车辆的定位测速不可能没有误差,在车辆静止时可以观察到舵机抖动。尽管降低规划频率(此频率由move_base的配置确定)有助于改善这一问题,但这同样导致车辆动态避障的性能大大降低。

TEB Local Planner的参数调试方法

下面我们正式开始讨论如何确定TEB Local Planner的各项参数值。本文并非官方文档的简单重复,因此不会详细解释各个参数的含义。如有需要,请参考官方文档

max_vel_x和acc_lim_x 这是速度与加速度约束。注意加速度同样约束减速过程。若电机性能良好且速度不快可以立即刹车,可直接将acc_lim_x设置为0,表示没有约束。若电机不能承受阶跃输入或者响应时间很长,则应当设置加速度限制。

max_vel_x_backwards 最大倒车速度。将此速度设置为0或者负数将导致错误。禁止倒车应在penalty部分将前向行驶的权重设置得极高。后文将讨论此问题。

max_vel_y和acc_lim_y y轴方向,即垂直于车辆正对方向的速度。对阿克曼底盘的车辆没有意义。

wheelbase和cmd_angle_instead_rotvel 后者设置为true时,ROS话题(rostopic) cmd_vel/angular/z 内的数据是舵机角度,其值满足- \pi/2 <z< \pi/2 此时应设置wheelbase即前后轮距离。前后轮距离d与速度、角速度和舵机角度之间的关系是:\varphi = arctan(d\omega /v)(注:车辆运动学中心是后轮中点,速度除以角速度所得半径也是以这里为准的)

min_turning_radius 最小转弯半径。为避免规划出不可能实现的移动路径,请动手测量实际车辆的转弯半径。此参数事实上约束了舵机的最大转角。有些车辆转向性能不佳,前轮实际转过角度小于舵机角度,则应当给指令转角乘上一增益后再控制舵机,否则车辆将总是不能实现设置的最小转弯半径。请注意此项应当与最大角速度配合设置。