1. TEB规划器避障原理与核心参数解析
TEB(Timed Elastic Band)规划器是移动机器人导航中广泛使用的局部路径规划算法。它通过将路径表示为一系列带时间戳的位姿点(称为"橡皮筋"),并施加动力学约束来生成可行轨迹。与纯几何避障算法不同,TEB的核心优势在于同时考虑:
- 空间避障(与障碍物的距离)
- 时间维度(速度/加速度约束)
- 动力学可行性(非完整约束)
在动态避障场景中,以下三个参数对性能影响最为显著:
1.1 最大加速度(acc_lim_x/acc_lim_theta)
控制机器人在直线和旋转方向的最大加速度。数值过小会导致避障反应迟缓,过大则可能引发震荡。工业AGV通常设置为:
yaml复制acc_lim_x: 0.5 # m/s²(标准叉车)
acc_lim_theta: 0.3 # rad/s²
1.2 障碍物膨胀半径(inflation_layer.radius)
虚拟扩大障碍物边界的半径。该参数需要与机器人实际轮廓匹配:
yaml复制inflation_layer:
radius: 0.25 # 比实际半径大5-10cm
注意:过大的膨胀半径会导致狭窄通道无法通过,建议通过实际测量确定安全余量
1.3 轨迹时间分辨率(dt_ref)
相邻位姿点的时间间隔(默认0.3s)。较小值提高轨迹精度但增加计算量。实测表明:
- 动态环境:0.1-0.2s
- 静态环境:0.3-0.5s
2. 参数调优实战方法论
2.1 系统性调优流程
建议按以下顺序调整参数:
- 先确定安全约束(膨胀半径)
- 再调动力学参数(加速度限制)
- 最后优化计算效率(时间分辨率)
2.2 加速度参数调优技巧
通过速度阶跃测试确定极限值:
- 在空旷场地以最大速度运行
- 急停测量实际减速度
- 取测量值的80%作为acc_lim_x
典型问题排查:
bash复制# 查看实际加速度
rostopic echo /cmd_vel | grep linear.x
2.3 膨胀半径动态调整方案
对于非结构化环境,可采用条件膨胀策略:
python复制if (nearest_obstacle_dist < 1.0):
inflation_radius = 0.3
else:
inflation_radius = 0.15
3. 典型避障场景参数配置
3.1 狭窄通道场景
yaml复制acc_lim_x: 0.3
inflation_radius: 0.15 # 最小安全距离
dt_ref: 0.2 # 提高轨迹精度
3.2 动态避障场景
yaml复制acc_lim_x: 0.8 # 允许快速避让
inflation_radius: 0.25 # 更大安全余量
dt_ref: 0.1 # 高频更新
3.3 高速巡航场景
yaml复制acc_lim_x: 0.5 # 平稳加减速
inflation_radius: 0.3 # 补偿速度误差
dt_ref: 0.3 # 降低计算负载
4. 高级调试工具与技巧
4.1 Rviz可视化诊断
- 启用
TrajectoryPlannerROS插件观察:- 绿色:优化后的轨迹
- 红色:被拒绝的轨迹
- 黄色:障碍物影响区域
4.2 关键指标监控
bash复制# 实时查看规划耗时
rostopic hz /teb_planner/feedback
4.3 典型问题处理方案
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 轨迹震荡 | acc_lim过大 | 降低20%加速度 |
| 无法通过窄道 | inflation过大 | 减小5cm并测试 |
| 更新延迟 | dt_ref过小 | 增大时间步长 |
5. 实测案例:仓储AGV参数优化
某型号叉车AGV原始参数下出现:
- 直角转弯时碰撞货架
- 动态避障反应迟缓
优化后配置:
yaml复制acc_lim_x: 0.45 # 原0.6
acc_lim_theta: 0.25 # 原0.4
inflation_radius: 0.18 # 原0.25
dt_ref: 0.15 # 原0.3
效果提升:
- 避障成功率:78% → 93%
- 轨迹平滑度提升40%
- CPU占用降低15%