局部路径规划TEB
起始点和目标点的状态由全局规划器指定,中间插入N个橡皮筋状的点,定义点与点之间的时间Time。路径收到约束会变形,例如靠近障碍物会 拉长路径远离障碍物。
-
黑色路径为全局路径,TEB算法在路径中间插入n个点(控制点),点的内容为机器人的姿态(x,y,航向)
-
每两个点之间有固定的时间,时间分辨率(dt_ref),所以点之间不是等距但是时间是一样的
-
整段路程已知,插入点的时间间隔一样,已知两点的时间和姿态信息,可以得到两点间的距离,得到速度,速度微分得到加速度,角速度角加速度同理
约束
TEB内有众多约束限制小车的运动轨迹和行驶速度
-
小车与障碍物最小距离是一个约束,把障碍物推向小车,使这些点远离障碍物,路径像橡皮筋一样弹开。除了障碍物约束,相邻点之间也有约束,一个点变化大周围的点也会跟着变化。这些约束只能影响一些连续点的状态
-
约束:跟随全局路径+避障,跟随路径施力局部路径拉向全局路径。障碍物约束施力,局部路径远离障碍物
-
速度加速度约束,两个姿态点时间确定,可以用差分来计算速度加速度,小车性能约束,速度加速度都有最大最小值
-
运动学约束:由若干弧线组成平滑轨迹
-
最快路径约束
优化
局部优化,多目标优化,大多数目标是局部的
g2o是一个通用的图优化库,用于解决各种机器人感知和控制问题。
在TEB中,g2o被用于构建一个优化问题的图,图中包含点和边。
点:表示机器人轨迹中的离散时间步骤,每个节点包括机器人的状态和时间戳。
边:表示优化问题的约束条件,机器人轨迹中的平滑性、与障碍物的碰撞等。每个边包括一个代价函数,用于度量优化目标的违反程度。
优化过程:
TEB通过添加节点和边来构建g2o图,将机器人的轨迹划分为多个时间步骤,然后定义各种约束来确保轨迹的平滑性和避免碰撞。
优化过程旨在最小化所有边的代价函数,从而生成最佳的轨迹。这包括在规定的时间窗口内平衡全局路径跟踪和局部障碍物避免。
关键参数
#轨迹
dt_ref:#两相邻位姿之间的时间,越大越慢
#robot
max_vel_x:#最大前向速度
acc_lim_x:#最大x向加速度 加速减速会受到这个约束,电机性能不好需要调低角速度/加速度要调低,高速转动会带来震荡
#障碍物
min_obstacle_dist:和障碍物最小距离
include_costmap_obstacles: true才可以检测建图时不在的障碍物
costmap_obstacles_behind_robot_dist:考虑后方障碍物距离,这个需要调小,减少计算量
#优化,这部分参数很重要,这里参数出问题车基本就规划的很怪
no_inner_iteration:#被外循环调用后内循环优化次数
no_outer_iteration:#外循环优化次数
penalty_epsilon:#为速度约束提供缓冲效果,达到速度限制前会产生一个惩罚,让小车提前减速达到缓冲效果
penalty_epsilon: #值较大时,速度和加速度的惩罚项的影响会增强,机器人在运动过程中会更加平稳,但是也会影响机器人的运动速度。反之,当 penalty_epsilon 的值较小时,速度和加速度的惩罚项的影响会减弱,机器人在运动过程中可能会出现剧烈的变化,但是可以提高机器人的运动速度。
weight_max_vel_x:#最大x向权重0~2
weight_acc_lim_vel_x:0~1#上述两个权重决定行驶过程中以低速还是高速
weight_kinematics_nh:#满足非完整运动学的优化权值,调到1000就不会出现倒车现象
weight_forward_drive:0~1000#只前向运动
weight_turning_radius:0~1000#最小转弯半径权重
weight_optimaltime:0~1000#时间权重,值大会直道很快,转弯只走内圈
weight_obstacle:#越大离障碍物越远
weight_shortest:#越大越容易走直线
oscillation_recovery:#尝试检测和解决振荡