
先说个真实场景。我最早接触TEB Local Planner是在一辆差速驱动的室内小车上当时调完参数跑起来稳得一批走廊直行、直角转弯都没毛病。后来把导航栈整套搬到一台阿克曼底盘的户外车上噩梦就开始了车在窄道上左右画龙明明很宽的弯非要倒一把再拐给了目标点之后在原地来回抡方向盘看起来就像个刚拿驾照的新手司机。查代码、查TF、查代价地图折腾了一周才发现问题全出在TEB的参数上——阿克曼底盘和差速底盘在运动学约束上完全是两码事沿用差速那套参数神仙算法也救不了。这篇文章我会直接讲透阿克曼小车用TEB Local Planner时必须要懂的参数逻辑和调参顺序把那些让我熬夜的参数坑一个个拆开最后附一份我自己在多个阿克曼底盘上验证过的完整配置文件。不管你是刚把ROS导航跑通的新手还是被TEB各种参数搞得头疼的老手这份实战记录都能帮你少走弯路、少掉头发。1. 换阿克曼底盘后原本好用的导航为什么突然“智障”了1.1 差速模型与阿克曼模型的本质差异先花一分钟把底盘运动学的差异说清楚因为后面所有参数的理解都建立在这上面。差速底盘两轮独立驱动的运动学极其简单左右轮速度差决定转向可以原地旋转没有转弯半径的概念。所以差速车的速度空间是一个矩形——线速度和角速度都可以独立设定互不干扰。阿克曼底盘汽车式转向完全不同前轮负责转向后轮负责驱动也有前轮驱动的变体车辆只能沿着圆弧运动存在最小转弯半径。更关键的是阿克曼车的最大角速度不是常量而是随线速度变化的——低速时能打很大的转向角高速时转向角必须受限否则就会侧滑甚至翻车。这个差异直接决定了TEB在差速车上是“二维优化问题”在阿克曼车上则变成“包含曲率约束的优化问题”。TEB如果不知道你的车是阿克曼模型默认按差速模型去生成带大角速度的轨迹阿克曼车根本执行不了表现出来就是控制指令抖动、前轮打脚、频繁倒车。1.2 TEB在阿克曼底盘上的典型翻车现场我把常见症状列出来你可以对号入座看看自己的车是否踩了同样的坑症状一走廊直行时车身左右摇摆轨迹呈S形。这是典型的“画龙”说明TEB在时间最优Cost和运动学约束之间没找到平衡。症状二明明一个弯道一把就能过去车却先减速、倒车、再打方向通过。这是TEB的生成了包含后退动作的轨迹而阿克曼车对倒车路径特别敏感。症状三原地反复转方向盘车身不动或者抖得厉害。这通常是TEB输出命令的转向角速度超过底盘执行器限制。症状四小车贴墙很近时急打方向把墙刮了。这是min_obstacle_dist与膨胀层参数不匹配或者min_turning_radius设得太小轨迹评估时以为能转过去实际转不过去。症状五速度输出一卡一卡轨迹在rviz中频繁重规划。全局路径和局部代价地图不一致或者TEB的参数让它对微小扰动过于敏感。这些问题单独看像不同原因但根子上基本都是TEB参数与阿克曼运动学不匹配。1.3 为什么说是“参数问题”而不是“代码问题”很多人遇到这些问题第一反应是改代码、换算法。我在群里见过有人花了一两周去改TEB源码最后发现解决方案只是把两个参数修正一下。为什么可以这么肯定因为TEB本身已经内置了阿克曼模型支持。从早期版本开始TEB就提供了cmd_angle_instead_rotvel、wheelbase、min_turning_radius这几个与阿克曼模型直接相关的开关和参数。换句话说TEB的设计者早就考虑了非完整约束底盘问题只在于需要你正确配置这些参数。后面我会逐个参数讲透但先把最重要的结论放在最前面如果你用的是阿克曼底盘以下三个参数必须设置正确否则后续所有调参都白费参数名作用设置错误的表现cmd_angle_instead_rotvel将速度命令中的角速度替换为前轮转向角输出底盘收到角速度指令控制抖动或指令错误wheelbase前后轴轴距决定转向角与曲率的关系转弯半径计算错误转弯时轨迹偏移min_turning_radius底盘最小转弯半径约束生成的轨迹曲率轨迹曲率超出机械极限实车无法执行2. TEB Local Planner的核心参数逻辑先懂原理再调参2.1 TEB是在优化一条“时间最优的轨迹”TEB的全称是Timed Elastic Band——带时间信息的弹性带。论文里的核心思想是把全局路径当作一条“弹性带”融合障碍物约束、运动学约束、速度加速度约束等通过图优化方法不断调整轨迹位姿点及其时间间隔使整体时间代价最小。这里有个特别重要的概念TEB内部优化的不仅仅是一串路径点还包括每两个路径点之间的时间差dt。也就是说TEB会同时决定“车往哪走”和“以多快的节奏走完”。轨迹的cost是多项加权cost的总和总cost 时间最优cost 障碍物cost 动力学cost 运动学约束cost 目标点/全局路径跟随cost每一项前面都有一个权重系数。调参的本质就是在这些互相冲突的目标之间找平衡。时间最优希望车跑得快障碍物cost希望车离障碍物远动力学cost希望速度加速度不超过限制运动学cost希望转弯半径不小于机械极限。这些目标常常打架——比如你想让车快点通过它就会贴着障碍物走你想让它离障碍物远点它就会绕路或者减速。2.2 三大参数族的划分知道了这些互相博弈的Cost项再看参数文件就不会一头雾水了。TEB参数可以粗略分成三组第一组是运动学与底盘参数。包括max_vel_x、max_vel_x_backwards、acc_lim_x、min_turning_radius、wheelbase、cmd_angle_instead_rotvel等。这一组参数描述的是“你的车到底能做什么”是所有优化的物理边界。如果这一组设错后面两组调得再漂亮也没用。第二组是轨迹权重参数。包括weight_optimaltime、weight_obstacle、weight_inflation、weight_kinematics_forward_drive、weight_kinematics_turning_radius等。这一组描述的是“在物理边界内TEB更倾向于哪种行为”。比如weight_kinematics_forward_drive设高了TEB就倾向一直往前开而不是倒车weight_optimaltime设高了TEB就倾向于用更短时间通过哪怕轨迹紧贴障碍物。第三组是优化器与离散化参数。包括dt_ref、dt_hysteresis、no_inner_iterations、no_outer_iterations、teb_autosize、max_global_lookahead_dist等。这一组控制TEB每帧轨迹的分辨率、优化迭代次数和前瞻距离直接影响规划的实时性和轨迹平滑度。这三组的关系可以打个比方底盘参数是汽车本身的硬件参数轨迹权重是驾驶员的性格偏好激进、稳健、胆小优化器参数是驾驶员的反应速度。你把一个“性格稳健的赛车手”放到一辆“刹车失灵的破车上”出问题几乎是必然的。2.3 哪些参数对阿克曼底盘是“生死攸关”的不是所有参数都需要精调很多TEB参数保持默认值就挺好。但下面这几个阿克曼底盘必须逐项确认cmd_angle_instead_rotvel: true——这是阿克曼模型的开关。不设这个TEB输出角速度指令阿克曼底盘的控制器要么不理解要么把角速度当成转向角去执行怎么调都不对。wheelbase——必须是实际测量值单位米。测量方法是前轮中心到后轮中心的距离不是车身总长。min_turning_radius——底盘机械上能实现的最小转弯半径。如果是前轮转向这个值可以通过最大转向角计算出来min_turning_radius wheelbase / tan(max_steering_angle)。比如轴距0.5米最大前轮转角35度半径0.5/tan35度≈0.714米。max_vel_x与acc_lim_x——要按底盘的实测性能来设不要按理论上限。很多DIY底盘标称速度不错但加速度跟不上设得过高会导致TEB规划的加速度超过底盘能力实际表现为起步猛冲、刹车点头。weight_kinematics_forward_drive——这个权重如果设为0TEB会为了时间最优频繁采用倒车动作设为正数比如1.0以上可以抑制倒车倾向。阿克曼车倒车时不稳定、GPS/里程计误差也大所以我一般建议至少设为1.0。3. 阿克曼专属配置详解从底盘参数到轨迹平滑3.1 运动学约束先把底盘真实能力告诉TEB在teb_local_planner_params.yaml中阿克曼底盘的运动学参数一般长这样TebLocalPlannerROS: odom_topic: odom map_frame: map # 阿克曼模型关键开关 cmd_angle_instead_rotvel: true wheelbase: 0.52 min_turning_radius: 0.8 # 速度与加速度限制 max_vel_x: 0.8 max_vel_x_backwards: 0.35 max_vel_theta: 0.6 acc_lim_x: 0.6 acc_lim_theta: 0.8 # 角速度→转向角的输出平滑(部分版本支持) # 转弯半径与转向角联动 min_turning_radius: 0.8这里有一个容易被忽略的点即使设置了cmd_angle_instead_rotvel: truemax_vel_theta依然需要设置。因为在TEB内部优化时轨迹的曲率、角速度仍然要被评估max_vel_theta过小会导致TEB不敢生成带转弯的轨迹过大又会让轨迹曲率超过转向极限。阿克曼车还有一个容易踩的坑max_vel_x_backwards不要设太大。阿克曼车倒车时由于前轮转向的存在轨迹预测比前进更复杂倒车速度一大路径跟踪很容易发散。实测下来倒车速度设置为前进的30%-50%比较合理除非你有特殊的倒车场景需求。3.2 轨迹权重怎么让车“折腾得少一点”运动学约束保证了TEB“不能做什么”轨迹权重则决定了TEB“更倾向怎么走”。阿克曼底盘的权重设置逻辑和差速车有明显区别# 轨迹权重 weight_optimaltime: 1.0 weight_obstacle: 50.0 weight_inflation: 0.3 weight_kinematics_forward_drive: 2.0 weight_kinematics_turning_radius: 1.0 weight_kinematics_ni: 0.5 weight_adapt_factor: 2.0weight_optimaltime是时间最优权重。差速车可以设1.5甚至更高让车跑得更快但阿克曼车我建议从1.0开始试。权重太高TEB会尽可能走“时间最短”的路径而时间最短往往意味着急转弯、贴墙走、频繁变道。曾经我把这个值设到1.8加上weight_obstacle相对较低车在走廊里完全是画龙状态后来降回1.0才稳定。weight_obstacle是障碍物距离权重对应min_obstacle_dist一起生效。要注意的是这个权重的默认值50在阿克曼车上通常太低——阿克曼车转弯半径大需要比差速车留出更多安全余量否则轨迹评估时车身边缘离障碍物太近、车身姿态也危险。我实测会提到80到100。weight_inflation是代价地图膨胀层反馈项。设得过高会让TEB对远处微小的代价变化做出剧烈反应频繁重规划设得过低则等于无视膨胀层和图2.1中膨胀半径完全不匹配。0.1到0.5是比较稳的区间。weight_kinematics_forward_drive是前向驱动权重阿克曼车的重点参数之一。如果你发现TEB频繁生成带倒车的轨迹比如直角弯里先倒一把再拐把这个权重调大比如从0.5调到2.0倒车行为会被压制得很好。3.3 优化器与离散化实时性和平滑性的平衡第三组参数我单独说因为它们对阿克曼车的影响往往被忽略但实际体验差异巨大# 轨迹离散化与优化 dt_ref: 0.4 dt_hysteresis: 0.1 min_samples: 5 max_samples: 500 teb_autosize: true max_global_lookahead_dist: 3.0 feasibility_check_no_poses: 5 # 优化器行为 no_inner_iterations: 7 no_outer_iterations: 4 optimization_activate: true optimization_verbose: false penalty_epsilon: 0.1 weight_max_vel_x: 2.0 weight_max_vel_theta: 1.0 weight_acc_lim_x: 1.0 weight_acc_lim_theta: 1.0dt_ref是相邻轨迹位姿点的参考时间间隔它决定轨迹的分辨率。dt_ref太大轨迹点稀疏生成的轨迹“拐急弯”能力变差dt_ref太小轨迹点密集优化计算量增大实时性下降。阿克曼车我推荐0.3到0.5之间比差速车的默认值0.3稍大一点因为阿克曼车的转向动作慢不需要太细的时间分辨。no_inner_iterations和no_outer_iterations控制每周期优化迭代次数。迭代多了轨迹更平滑、更彻底但CPU占用高迭代少了实时性好但轨迹质量差车容易抖动。阿克曼底盘转向执行本身有延迟建议no_inner_iterations保持5到7no_outer_iterations保持3到4不必拉满。max_global_lookahead_dist是全局路径前瞻距离阿克曼车需要比差速车看得更远——因为转弯半径大太晚看到弯道会来不及转。这个值我习惯按车速和转弯半径设置max_global_lookahead_dist ≈ 车速 × 3s 1.5 × min_turning_radius。车速0.8m/s转弯半径0.8米基本就是3到3.6米。4. 实测避坑实录我踩过的七个坑4.1 坑一min_turning_radius设太小车贴着墙才肯拐第一次做阿克曼导航时我对min_turning_radius的理解不够随手填了0.3。结果车在室内过道里行驶时轨迹评估全通过了但实际路径需要约0.7米的转弯半径车只能反复揉库。在rviz里看红色轨迹明明离墙很近但TEB认为“可执行”因为它的运动学模型里允许了小半径转弯而底盘的机械结构不允许。这个问题的排查线索很隐蔽如果只看rviz轨迹会发现轨迹与障碍物保持的距离正常但实车就是拐不过去。原因不在避障而在运动学约束本身没有反映底盘极限。建议把min_turning_radius设成实测值并留出至少10%-15%的冗余——宁可让TEB以为车“笨”一点也不要让它生成根本执行不了的低曲率轨迹。4.2 坑二speed权重失衡车在直道上画龙weight_optimaltime: 1.8搭配weight_obstacle: 50时出现过直道持续画龙的问题。后来用rqt_reconfigure一点点降weight_optimaltime降到1.0左右症状消失。原理不复杂时间最优权重过高TEB宁愿走一条“来回微调但总时间更短”的锯齿路径也不走直线当weight_obstacle不足以惩罚锯齿路径时画龙就出现了。这类问题用默认权重往往不会出但很多人喜欢一开始就把时间权重拉高然后陷入调参地狱。我的建议是第一次改动时保持weight_optimaltime默认值一般1.0等车辆能稳定跑完整条路径再考虑加速优化。4.3 坑三代价地图膨胀半径与min_obstacle_dist不匹配阿克曼车因为转弯半径大车身扫过的外轮廓范围比差速车大得多。我遇到过一次情况内层膨胀半径设0.15米TEB的min_obstacle_dist设0.2米看起来安全余量足够但车一过弯后轮内切扫到路沿差点把轮毂刮了。原因在于阿克曼车过弯时车辆前后轮轨迹不重合内后轮的轨迹半径比前轮小很多也就是常说的“内轮差”。如果膨胀半径和min_obstacle_dist没有覆盖内轮差弯道内侧障碍物会被完全忽略。这里给一个经验公式min_obstacle_dist ≥ 0.1 max(0.15, 轴距/4)。对0.52米轴距的小车min_obstacle_dist至少0.23米如果路况不太好我直接设0.3宁可让车稍微保守一点也不冒险。4.4 坑四倒车动作频繁不是因为障碍物而是因为默认权重某次在厂房里测试车遇到一个十字弯每次都先退后一段再向前拐弯。一开始我以为是环境太窄后来加了weight_kinematics_forward_drive: 2.0之后倒车几乎消失。默认值0.5对阿克曼车太弱优化器觉得“倒一把再走”的总时间更短因为倒车时转向角调整更快但对阿克曼车来说倒车轨迹预测不准、控制不稳、里程计误差大是妥妥的负优化。这个权重不是越大越好。设得过大比如10以上在狭窄车库等场景下车会完全无法倒车导致路线规划失败。我建议从1.0起步实测无效再加到2.0或3.0直到正常路径上不再出现倒车动作为止。4.5 坑五全局路径离障碍物太近TEB频繁重规划刚开始我把全局规划器也用成了Dijkstra默认参数没有针对阿克曼底盘设置膨胀半径导致全局路径贴着墙边或者穿过狭窄缝隙。TEB虽然能局部避障但每次都以全局路径为参考全局路径贴着墙TEB只能在墙边反复“找”可执行的路径重规划频率极高车身稳定性和速度都受影响。解决思路不是去改TEB而是调整全局规划器的代价地图参数把全局代价地图的膨胀半径加大我习惯设0.3到0.5米视路况而定让全局路径远离障碍物。这样TEB只需在一条“干净的”全局路径附近做小幅度调整稳定性和平滑度立竿见影。4.6 坑六dt_ref太小导致优化轨迹锯齿状有一次为了追求轨迹精度我把dt_ref从0.4改到0.2结果rviz里的局部轨迹出现了肉眼可见的锯齿车辆执行时一顿一顿的。原因很好理解dt_ref小、轨迹点密每个点之间的时间间隔小优化器对微小扰动的敏感性变高收敛难度也变大了。阿克曼车本身运动平滑不需要那么密集的轨迹点。后来把dt_ref调回0.4同时设置dt_hysteresis: 0.1轨迹立刻变得平滑。这里dt_hysteresis能避免轨迹点在dt_ref附近上下跳变导致的不稳定。4.7 坑七footprint_model与阿克曼外形不匹配TEB默认用圆形footprint模型如果设置成半径0.3而实际车身是矩形例如长0.7、宽0.5轨迹评估时车辆横向扫掠会被低估。差速车因为是原地旋转圆形近似还能凑合阿克曼车转弯时车身扫过的外轮廓不是圆而是前后轮轨迹包络线误差更大。建议改用多边形footprint模型如实填写车身长宽footprint_model: type: polygon vertices: [[0.35, -0.18], [0.35, 0.18], [-0.35, 0.18], [-0.35, -0.18]]这个矩形对应的车长0.7米、宽0.36米。注意坐标是车体中心到边界的距离不是车身总长总宽。外观点填成多边形TEB在轨迹评估时才会按真实车身姿态判断碰撞。5. 完整可用的TEB配置文件阿克曼版5.1 配置yaml正文下面这份配置文件经过了三个不同轴距0.32米、0.52米、0.65米阿克曼底盘的验证配合的是move_base框架。你可以直接保存为teb_local_planner_params.yaml再根据实际轴距、轮距、车速做微调。注释里我写了每个参数的含义和设置理由方便你对照修改。TebLocalPlannerROS: odom_topic: odom map_frame: map # 阿克曼模型关键参数 # 输出前轮转角而不是角速度阿克曼底盘必须为true cmd_angle_instead_rotvel: true # 轴距前轮中心到后轮中心距离单位米实测为准 wheelbase: 0.52 # 最小转弯半径轴距 / tan(最大前轮转角)留10%~15%冗余 min_turning_radius: 0.8 # 速度与加速度限制 max_vel_x: 0.8 max_vel_x_backwards: 0.3 max_vel_theta: 0.6 acc_lim_x: 0.6 acc_lim_theta: 0.8 min_turning_radius: 0.8 # 轨迹离散化 teb_autosize: true dt_ref: 0.4 dt_hysteresis: 0.1 min_samples: 5 max_samples: 500 max_global_lookahead_dist: 3.0 feasibility_check_no_poses: 5 # 目标点容差 xy_goal_tolerance: 0.25 yaw_goal_tolerance: 0.2 free_goal_vel: false complete_global_plan: true # 路径跟踪 weight_point_switch: 0.6 weight_adapt_factor: 2.0 # 障碍物与安全距离 min_obstacle_dist: 0.25 include_costmap_obstacles: true costmap_obstacles_behind_robot_dist: 1.5 obstacle_poses_affected: 15 inflation_dist: 0.6 # 代价地图膨胀层反馈 weight_inflation: 0.3 weight_obstacle: 80.0 weight_dynamic_obstacle: 10.0 penalty_epsilon: 0.1 # 运动学权重阿克曼重点 weight_kinematics_forward_drive: 2.0 weight_kinematics_turning_radius: 1.0 weight_kinematics_ni: 0.5 weight_kinematics_forward_drive: 2.0 weight_optimaltime: 1.0 # 速度/加速度权重 weight_max_vel_x: 2.0 weight_max_vel_theta: 1.0 weight_acc_lim_x: 1.0 weight_acc_lim_theta: 1.0 # 优化器 no_inner_iterations: 7 no_outer_iterations: 4 optimization_activate: true optimization_verbose: false # 振荡检测 oscillation_recovery: true oscillation_v_eps: 0.1 oscillation_omega_eps: 0.1 oscillation_recovery: true # 车辆轮廓多边形footprint footprint_model: type: polygon vertices: [[0.35, -0.18], [0.35, 0.18], [-0.35, 0.18], [-0.35, -0.18]]提示weight_kinematics_forward_drive在配置文件中出现两次是历史遗留写法新版本只保留一个即可数值以最后赋值为准但不建议重复堆叠。请在你自己配置时只保留一行。5.2 启动配置与集成方式在move_base的launch文件中加载这个参数文件launch node pkgmove_base typemove_base respawnfalse namemove_base outputscreen param namebase_local_planner valueteb_local_planner/TebLocalPlannerROS / rosparam file$(find your_robot_nav)/param/teb_local_planner_params.yaml commandload / rosparam file$(find your_robot_nav)/param/costmap_common_params.yaml commandload / rosparam file$(find your_robot_nav)/param/local_costmap_params.yaml commandload / rosparam file$(find your_robot_nav)/param/global_costmap_params.yaml commandload / /node /launch保证base_local_planner的value指向teb_local_planner/TebLocalPlannerROS否则配置不会生效。这个错误很常见——配置写了一大堆结果base_local_planner还指向DWA或base_local_plannerTEB根本没跑起来。还需要确认TEB版本支持cmd_angle_instead_rotvel。ros-noetic和ros2等主流版本的teb_local_planner基本都支持但个别老版本百包没有这个参数编译时会直接报“未定义参数”。如果你用的是老版本先检查版本再决定是否需要拉新。5.3 参数热加载技巧rqt_reconfigureTEB支持动态参数配置调参时不用每次重启导航直接用rqt_reconfigure实时改参数这个功能对调参效率提升巨大rosrun rqt_reconfigure rqt_reconfigure打开后在左侧选择move_base下的TebLocalPlannerROS右侧就能实时改参数。我调参的习惯是先把optimization_verbose打开观察优化器输出然后开着rviz一边在rqt_reconfigure里调整weight_obstacle、min_obstacle_dist、weight_kinematics_forward_drive等参数一边看rviz里的局部轨迹变化。需要提醒的是wheelbase、min_turning_radius这类运动学关键参数在rqt_reconfigure里也可以改但因为它们是底盘硬参数我建议固定下来之后不要随便动。真正需要现场调的是权重类和安全距离类参数。6. 调参方法论从一辆“能走”的车到一辆“好走”的车6.1 调参顺序先底盘再轨迹后优化我见过太多人在调参时东一榔头西一棒子一会调weight_obstacle一会调dt_ref改到后面自己都忘了改了什么出问题也不知道回退到哪。建议按三条线的顺序来调第一步先把底盘运动学参数确认完。cmd_angle_instead_rotvel、wheelbase、min_turning_radius、max_vel_x、acc_lim_x。这一步的目标不是“走得好”而是“沿着可执行的轨迹走起来”哪怕速度慢、轨迹丑都行。只要车能稳定执行TEB的指令速度指令平滑、转向角在合理范围内这一阶段就算过。第二步调安全和避障参数。重点确认min_obstacle_dist、weight_obstacle、weight_inflation、footprint_model。这一步的目标是“在常规路况下不碰障碍物”。可以故意在路径上放几个障碍物观察车是否绕得开、是否会贴太近。第三步调行为参数。重点确认weight_kinematics_forward_drive、weight_optimaltime、max_global_lookahead_dist。这一步的目标是“走得好”——车走得流畅、不画龙、不频繁倒车、速度合理。每步只改一个参数改完记录数值和效果。参数记录太重要了别问我是怎么知道的。6.2 在rviz里看什么轨迹颜色与形态的判读TEB在rviz中可视化时有很多细节可以参考不同版本颜色可能不同说几个通用的轨迹点的疏密代表dt_ref下的时间分辨率如果轨迹点忽密忽疏、间隔不均匀说明TEB在速度规划上不稳定可以考虑调整dt_hysteresis或者权重。轨迹如果突然在某处断开或者明显跳变往往是max_global_lookahead_dist太小TEB只看了最近的路径点在前方大弯处“看不到”而生成冲突轨迹。轨迹如果有明显折角说明优化器迭代不够或者weight_optimaltime太高导致轨迹在障碍物附近被“掰”成了折线。局部轨迹与全局路径的贴合程度如果局部轨迹频繁大幅偏离全局路径说明全局路径质量差或weight_adapt_factor太低TEB对全局路径的跟随性不好。另外可以把TebLocalPlannerROS的visualize_with_rosauth以及各种Topic勾选上具体看版本提供的可视化话题。不追求全开重点关注局部轨迹和全局路径两个话题就够了。6.3 参考基线值不同底盘的TEB调参范围最后放一份我在多次实测中总结的参考值区间。不同底盘差别很大这是起步参考不是最终值参数差速小车参考阿克曼小车参考说明cmd_angle_instead_rotvelfalsetrue阿克曼必需weight_optimaltime1.0~2.00.8~1.2太高易画龙weight_obstacle30~5060~100阿克曼需更大避障权重weight_kinematics_forward_drive0.5~1.01.0~3.0抑制倒车min_obstacle_dist0.1~0.20.25~0.4覆盖内轮差dt_ref0.30.3~0.5阿克曼可稍大max_global_lookahead_dist2.0~3.03.0~5.0转弯半径大需看得远这组数据不是说差速车可以照搬只是给一个量级上的感知方便你判断自己的参数是否在合理区间。如果参数偏离这个范围很多先检查是不是底盘参数填错了再考虑是否为特殊场景需求。回到最开始那张“新手司机”的画面。我在那个阿克曼车上最终用到的配置就是把weight_optimaltime压回1.0weight_kinematics_forward_drive拉到2.0min_obstacle_dist提到0.25再加上正确的min_turning_radius和wheelbase。改完之后车从“左右画龙、动不动倒车”变成“沿着中线稳稳过弯”那种感觉跟换了辆车一样。TEB调参这件事本质上没有魔法参数就是要理解底盘的运动学极限、理解TEB每个权重背后的博弈逻辑、再辅以系统性的调参顺序。如果你现在正被阿克曼车的局部规划搞得焦头烂额希望这篇实战记录能给你一个清晰的落脚点。配置文件的每个参数我都标注了理由根据自己的底盘实测数据改改你也能调出一辆“稳得一批”的阿克曼车。