前言
在局部路径规划器teb_local_planner详解5:关于car-like robots中,我们介绍了与car-like机器人模型相关的参数,说明了在对接底盘的时候需要注意底盘接收的控制指令格式。我们还介绍了holonomic robot应该配置的参数。

本章主要描述teb中处理动态障碍物的方法,最后会讲些teb相关的问题

一、相关参数
重要参数:

~<name>/include_dynamic_obstacles: 是否考虑动态障碍物

~<name>/dynamic_obstacle_inflation_dist: 动态障碍物膨胀距离

~<name>/weight_dynamic_obstacle: 动态障碍物权重

~<name>/weight_dynamic_obstacle_inflation: 膨胀带权重

二、实现手段
之前介绍过costmap_converter, 其中有个名字是CostmapToDynamicObstacles的插件。

主要根据costmap的变化来推断动态障碍物。

三、常见问题
1. 与全局planner配合
之前,我们在教程global_planner中有提到参数/orientation_mode
他的含义就是整条全局路径规划出来的轨迹中,每个pose的朝向。

跟local planner配合起来就明白他的意思了。我们在局部规划的时候,总是一段一段的前进。会把全局规划输出的结果分成好几个小段来执行。那么,每个小段的终点都有朝向,这个会决定局部规划器如何规划轨迹。

如果global planner没有提供朝向的话,比如navfn规划器,teb_local_planner会自己重写一下:使用参数:global_plan_overwrite_orientation,这个朝向总是指向他下一个pose

但是,如果遇到下图这种情况,开始和结束方向相同,我们最好的策略是直接倒车出来:
在这里插入图片描述

我们使用global_planner,将其朝向设置为Interpolate就可以成功退车出来了。

在这里插入图片描述

最后,allow_init_with_backwards_motion参数也要设置为true

综合讨论,我觉得,使用global_planner 的时候,应该讲朝向设置为ForwardThenInterpolate

2. 运算时间
想要加速规划时间:

costmap
local_costmap的长宽和resolution配置的小一点

teb中的障碍物相关参数

costmap_obstacles_behind_robot_dist: local_costmap以机器人为中心,后面的障碍物,没比要太费精力。但是为了保证不后退撞墙,这个值应该大于0
obstacle_poses_affected: 对于小的障碍物,差不多10左右就够
footprint model: 主要是碰撞检测中的距离计算
轨迹的相关参数

dt_ref:决定轨迹的分辨率,不能太大(> 0.6),否则动力学约束乱套了
max_global_plan_lookahead_dist: 临时终点,最大也不超过local_costmap的边界
优化相关参数

no_inner_iterations:每次外部迭代中,求解器调用次数
no_outer_iterations: 每次采样间隔的迭代次数
所有加速度相关的权重:都可以调成0
多条可选轨迹参数

enable_homotopy_class_planning: 开不开备选?

max_number_classes:开了放几条备选方案,通常2条就够了,绕开对称的左右障碍物