速度约束建模:运动学模型、动力学模型、轮胎-地面摩擦约束
速度约束这个话题,说实话是自动驾驶规划与控制里最绕不开的硬骨头。我做了这么多年系统,见过太多因为速度约束没处理好而出事的案例。今天咱们就掰开揉碎了聊聊,速度约束到底该怎么建模。
我个人习惯把速度约束分成三个层次来看:运动学层面的、动力学层面的、还有轮胎-地面摩擦这个最底层的物理约束。这三个层次层层递进,缺一不可。
一、运动学模型中的速度约束
运动学约束,说白了就是「车能怎么走」的几何限制。它不考虑力,只考虑位置、速度和加速度之间的关系。
最经典的当然是自行车模型。嗯,这里要注意,自行车模型虽然简单,但实际工程中非常好用。我曾在某量产项目中,就用这个模型做了整个纵向控制模块。
运动学速度约束主要包含以下几点:
- 最大速度限制:车辆本身能跑多快,这是硬件决定的
- 最大加速度/减速度限制:电机/发动机和制动系统的能力边界
- 曲率-速度耦合约束:转弯时速度不能太快,否则横向加速度会超标
举个例子,你想想看,一个急弯处,如果还按直道速度跑,那横向加速度肯定爆表。这个约束的数学表达很简单:
v_max = sqrt(a_y_max / |κ|)
其中 κ 是路径曲率,a_y_max 是允许的最大横向加速度。我在项目中遇到过,有些工程师直接把这个公式写进规划器,结果发现车辆在高速弯道处频繁震荡。为什么?因为忽略了加速度的响应延迟。
二、动力学模型中的速度约束
运动学模型只考虑几何关系,但真实车辆是有惯性的。动力学模型就要考虑力、质量、转动惯量这些东西了。
我个人觉得,动力学速度约束最核心的是纵向动力学方程:
m * a = F_traction - F_rolling - F_aero - F_grade
这里:
- m 是整车质量
- a 是纵向加速度
- F_traction 是驱动力
- F_rolling 是滚动阻力
- F_aero 是空气阻力
- F_grade 是坡度阻力
我曾经在一个重卡项目中吃过亏。当时只考虑了平路工况,结果车一上坡,速度就掉得厉害,根本追不上目标速度。后来才把坡度项加进去,问题才解决。
动力学约束还有一个重要方面——执行器限制。电机有最大扭矩曲线,制动有最大制动压力,这些都会限制速度的变化率。说白了就是:你规划的速度曲线再漂亮,执行器跟不上也是白搭。
三、轮胎-地面摩擦约束
这是最底层、也是最容易被忽视的约束。轮胎和地面之间的摩擦力,决定了车辆能实现多大的加速度。
摩擦圆理论是这里的基础。每个轮胎能提供的合力(纵向力 + 横向力)不能超过摩擦极限:
F_x² + F_y² ≤ (μ * F_z)²
其中 μ 是路面附着系数,F_z 是轮胎垂直载荷。
这个约束在实际工程中怎么用?我一般这样处理:
- 先估算路面附着系数(干沥青、湿沥青、冰雪路面都不一样)
- 根据当前车速和转向角,计算需要的横向力
- 用摩擦圆反推可用的纵向力上限
- 这个上限就是当前速度下的最大加速度/减速度
这里我画了一张图,把三个层次的速度约束关系梳理了一下:
从这张图可以看得很清楚:运动学约束是最上层的简化,动力学约束是中间层,摩擦约束是最底层的物理极限。实际工程中,我建议从下往上建模——先搞清楚轮胎能提供多少力,再反推动力学能力,最后简化成运动学约束。
最后说一句,速度约束建模没有银弹。不同场景、不同车型、不同路面,约束的权重都不一样。关键是要理解每个约束背后的物理含义,而不是死记公式。你想想看,如果连轮胎能提供多少力都不清楚,规划出来的速度曲线再漂亮又有什么用呢?
可可精品资料库