1. 初识TEB:为什么你的阿克曼小车总在原地“思考人生”?
如果你正在用ROS给一辆阿克曼转向的机器人(比如一辆小车模型或者真正的无人车)做导航,并且还在用默认的dwa_local_planner,那你大概率会遇到一个让人抓狂的场景:小车在起点和目标点之间来回“抽搐”,就是不走直线,或者干脆直接报错说“规划失败”。这感觉就像你让一个朋友去拿杯水,他却在客厅中间原地转圈,思考“最优拿水路径”,最后告诉你“此路不通”。
这就是传统局部规划器对阿克曼车型的“水土不服”。阿克曼转向和我们常见的两轮差速机器人有个核心区别:它有个最小转弯半径。想象一下开汽车,你没法像玩具车一样原地掉头,必须有一个弧线。而dwa_local_planner这类规划器,其底层运动模型是基于差速或者全向的,它规划出的路径可能包含瞬时转弯半径为0的“尖点”,这对于阿克曼车来说,是物理上无法执行的指令,所以系统会直接判定为“不可行”。
这时,TEB Local Planner就该登场了。我第一次接触TEB,就是因为被差速规划器折磨得够呛。TEB的全称是Timed Elastic Band,翻译过来是“时间弹性带”。这个名字很形象,你可以把它想象成一根有弹性的橡皮筋,连接着机器人的当前位置和目标点。这根“橡皮筋”上串着一个个代表机器人未来位姿的“珠子”。优化的目标,就是让这根橡皮筋在满足各种约束(比如不能撞墙、速度不能超、转弯不能太急)的前提下,整体长度(也就是时间)最短,并且形状最“舒服”。
对于阿克曼车型,TEB最大的优势在于它内置了Car-Like运动学模型。这个模型明确考虑了前后轮轴距(wheelbase)和最小转弯半径(min_turning_radius)的约束。这意味着,TEB规划出的路径,从理论上就是你的车能开出来的真实轨迹,不会出现“理论上能走,实际上方向盘打不过去”的尴尬。
但是,先别高兴太早。TEB功能强大,却也以“参数多、调参玄学”而闻名。默认参数往往只能让车“动起来”,想要它跑得又快又稳、灵活避障,不经过一番细致的调优是做不到的。很多新手在换上TEB后,会发现小车要么变得异常“胆小”,离障碍物八丈远就停下;要么变得极其“莽撞”,贴着障碍物呼啸而过,让人心惊胆战;更常见的是规划速度巨慢,小车走一步停三秒,像是在做高数题。接下来,我就结合自己踩过的坑,带你从理论到实战,一步步驯服TEB,让它为你的阿克曼车型高效服务。
2. 核心参数详解:搞懂这些,就掌握了TEB的“方向盘”
调参不是瞎调,必须明白每个参数背后的物理意义。TEB的参数虽多,但我们可以把它们分成几大类来理解:运动能力约束、目标容差与全局路径跟随、障碍物处理以及优化器核心配置。理解这几块,调参就有了方向。
2.1 运动能力约束:告诉TEB你的车“几斤几两”
这是最基础也是最重要的一组参数,它定义了机器人的物理极限。如果这里设错了,规划器要么规划出天马行空无法执行的路径,要么严重限制机器人的性能。
max_vel_x与acc_lim_x:这是纵向(前进/后退)的最大速度和加速度。注意,加速度也约束减速度。如果你的电机响应快、刹车猛,可以把acc_lim_x设大甚至不设限(但别为0,0在优化中可能有问题,可以设一个极大值如100)。但对于大惯性的车,必须设置一个合理的加速度,否则规划出的急刹指令会让实际车辆打滑或失控。max_vel_x_backwards是最大倒车速度,如果你不希望车倒车,不是把它设为0,而是要通过后面的权重参数来惩罚倒车行为。max_vel_theta与acc_lim_theta:这是转向的最大角速度和角加速度。它们和下面的最小转弯半径共同约束了转向性能。一个常见的误区是只设min_turning_radius。实际上,最小转弯半径通常在低速时生效(转弯半径 = 线速度 / 角速度)。当车速提高后,即使方向盘打死(转角固定),由于线速度变大,转弯半径也会变大,此时限制转弯剧烈程度的是角速度。所以高速过弯时,是max_vel_theta在起保护作用,防止翻车或侧滑。min_turning_radius与wheelbase:这是阿克曼车型的灵魂参数。wheelbase是你的车前后轴之间的距离,必须准确测量。min_turning_radius是车辆能实现的最小转弯半径,通常由最大转向角决定。计算公式是:min_turning_radius = wheelbase / tan(m


被折叠的 条评论
为什么被折叠?



