第一次接触TEB_local_planner的朋友们,十有八九都会遇到这样的场景:机器人要么像个醉汉一样左右摇摆,要么在障碍物面前突然"死机",最糟的情况是直接撞上墙壁。这些问题的根源往往不在于算法本身,而在于参数配置不当。
TEB(Timed Elastic Band)算法的核心思想很巧妙——它把机器人的运动轨迹想象成一根有弹性的橡皮筋。这根"橡皮筋"既要尽量贴合全局路径(弹性),又要避开障碍物(刚性),还要考虑时间最优性(timed)。当这三个要素的平衡被打破时,机器人就会出现各种异常行为。
我刚开始调试TEB时,机器人总会在转角处突然减速,然后像跳机械舞一样一顿一顿地移动。后来发现这是因为max_vel_x和acc_lim_x参数设置得太保守,导致机器人"不敢"快速通过弯道。另一个常见问题是机器人喜欢贴着墙走,这通常是因为inflation_dist设置得太小,或者weight_obstacle权重过高。
提示:调试TEB参数时,建议先打开rqt_reconfigure工具,这样可以实时看到参数调整的效果。
max_vel_x和acc_lim_x这对参数决定了机器人前进的"性格"。max_vel_x是最大前进速度,acc_lim_x则是加速度限制。我建议按照以下步骤调整:
实际项目中,我发现很多开发者忽略了dt_ref这个重要参数。它控制着轨迹点之间的时间间隔,默认0.3对于大多数室内机器人偏大。我的经验法则是:dt_ref值应该约等于机器人长度除以最大速度。
min_obstacle_dist和inflation_dist这对参数需要精心配合。min_obstacle_dist是硬约束——机器人绝不会突破这个距离;而inflation_dist是软约束——机器人会尽量避免进入这个区域。
调试技巧:
TEB的权重参数就像烹饪时的调味料,微小的变化会带来完全不同的"风味"。最重要的三个权重是:
weight_optimaltime(时间最优权重):控制机器人有多"着急"
weight_kinematics_nh(非完整约束权重):确保机器人运动符合运动学
weight_viapoint(路径点跟踪权重):影响路径跟随精度
症状:机器人像"打摆子"一样左右晃动,特别是在狭窄空间。
解决方案:
症状:控制台频繁出现"teb_local_planner被终止"的警告。
优化策略:
症状:明明检测到障碍物,机器人还是撞上去。
排查步骤:
TEB的一个强大特性是能同时考虑多条路径(同伦类)。相关参数:
在复杂迷宫环境中,我会开启visualize_hc_graph来直观看到所有候选路径,这对参数调试很有帮助。
TEB可能成为ROS系统的计算瓶颈,特别是资源受限的嵌入式平台。我的优化经验:
xml复制<param name="controller_frequency" value="5.0" />
yaml复制costmap_converter_plugin: "costmap_converter::CostmapToLinesDBSRANSAC"
costmap_converter_rate: 5
yaml复制footprint_model:
type: "line"
line_start: [-0.1, 0]
line_end: [0.1, 0]
对于移动障碍物场景,关键参数组合:
我在一个博物馆导览机器人项目中发现,设置obstacle_association_cutoff_factor=3.0能有效过滤远处的动态障碍物,显著降低计算负载。
去年我参与了一个扫地机器人项目,初始参数下机器人要么清洁效率低下,要么经常卡在家具之间。经过系统调参后,清洁覆盖率提升了40%,运行时间减少了25%。关键调整如下:
速度参数:
yaml复制max_vel_x: 0.5
acc_lim_x: 0.3
max_vel_x_backwards: 0.2
避障参数:
yaml复制min_obstacle_dist: 0.25
inflation_dist: 0.4
weight_obstacle: 80
优化权重:
yaml复制weight_optimaltime: 0.8
weight_kinematics_nh: 500
penalty_epsilon: 0.08
特殊处理地毯边缘:
yaml复制obstacle_poses_affected: 5
obstacle_association_force_inclusion_factor: 2.5
调试过程中最大的收获是发现weight_optimaltime设为0.5-1.0之间时,机器人能在清洁效率和运动平稳性之间取得最佳平衡。而将visualize_with_time_as_z_axis_scale设为1.0后,通过rviz中轨迹颜色的深浅变化,可以直观判断机器人在哪些区域减速,这对参数优化非常有帮助。