4、车辆运动学模型:自行车模型、阿克曼转向模型、状态空间表示、微分约束
各位工程师朋友,今天我们来聊聊车辆运动学模型。说实话,这部分内容在路径规划里属于「地基」一样的存在。你规划出来的轨迹再漂亮,如果车辆根本走不出来,那就是纸上谈兵。我个人习惯把运动学模型看作是「车辆的语言」——你得先听懂车想怎么动,才能给它下指令。
4.1 自行车模型:最经典的简化
先说说自行车模型。为什么叫这个名字?你想想看,一辆四轮汽车在低速转弯时,左右轮的转角其实差不多。那干脆把左右轮合并成一个虚拟的「前轮」和「后轮」,这不就变成自行车了吗?
我在项目中遇到过这样的情况:刚开始做路径跟踪时,直接用四轮模型,结果参数调得头大。后来换成自行车模型,效果反而更好。为什么?因为低速场景下,轮胎侧偏角很小,自行车模型的假设基本成立。
自行车模型的数学表达其实很简洁:
状态变量: [x, y, θ, δ, v]
- x, y: 车辆后轴中心位置
- θ: 航向角
- δ: 前轮转角
- v: 纵向速度
运动方程:
x_dot = v * cos(θ)
y_dot = v * sin(θ)
θ_dot = v * tan(δ) / L
δ_dot = ω (转向角速度)
v_dot = a (纵向加速度)
这里 L 是轴距。嗯,要注意一点:这个模型假设轮胎是刚性的,没有侧偏。说白了就是「轮子指哪打哪」。实际轮胎会有侧偏角,但那是动力学范畴的事了。
核心要点:自行车模型适用于低速(通常 < 5 m/s)、小转角场景。我建议你在做泊车、园区物流这类应用时优先考虑它。
4.2 阿克曼转向模型:更真实的转向几何
自行车模型虽然好用,但它忽略了一个关键问题:实际车辆转弯时,内外侧车轮的转角是不一样的。这就是阿克曼转向几何要解决的问题。
我记得第一次调试阿克曼模型时,发现车辆转弯半径总跟理论值对不上。后来一查,原来是转向梯形设计导致的阿克曼率不是100%。这玩意儿在实车上很常见,你想想看,完全阿克曼转向在低速时转向力太大,所以很多车会故意做成「不足阿克曼」。
阿克曼转向的核心公式:
内轮转角: δ_i = arctan(L / (R - W/2))
外轮转角: δ_o = arctan(L / (R + W/2))
平均转角: δ = (δ_i + δ_o) / 2
其中:
- R: 转弯半径
- W: 轮距
- L: 轴距
实战技巧:在做路径跟踪时,如果你用的是自行车模型,但实际车辆是阿克曼转向,记得加一个「阿克曼补偿」。我曾经在AGV项目里吃过这个亏,轨迹跟踪误差一直降不下来,加了补偿后立马收敛。
4.3 状态空间表示:让模型更「听话」
有了运动学模型,怎么把它变成计算机能用的形式?这就轮到状态空间表示出场了。
说白了,状态空间表示就是把运动学方程写成矩阵形式:
状态向量: x = [x, y, θ, δ, v]^T
控制输入: u = [ω, a]^T
连续时间状态空间:
x_dot = f(x, u)
离散化后(用于计算机控制):
x(k+1) = x(k) + Ts * f(x(k), u(k))
其中 Ts 是采样时间
我个人习惯用欧拉法做离散化,简单够用。如果你追求更高精度,可以考虑RK4,但计算量会大一些。
注意:状态空间表示中的状态变量一定要可观测。我见过有人把轮胎滑移角也放进状态里,结果卡尔曼滤波根本收敛不了——因为滑移角没法直接测量。
4.4 微分约束:车辆不是你想动就能动
最后聊聊微分约束。这玩意儿说白了就是「车辆的运动受物理规律限制」。你不可能让车原地掉头,也不可能让它横着走。
常见的微分约束包括:
- 非完整约束:车辆不能侧向移动,即 y_dot * cos(θ) - x_dot * sin(θ) = 0
- 曲率约束:路径曲率 κ ≤ tan(δ_max) / L
- 加速度约束:|a| ≤ a_max
- 转向速率约束:|ω| ≤ ω_max
我曾经在做一个高速路径跟踪项目时,忽略了转向速率约束。结果规划出来的路径曲率变化太快,执行器根本跟不上,车辆直接冲出车道。嗯,从那以后我再也不敢忽略微分约束了。
避坑指南:微分约束一定要在路径规划阶段就考虑进去。等到了跟踪阶段再处理,往往为时已晚。我建议你把约束写成不等式形式,直接塞进优化问题里。
知识体系总览
下面这张图展示了本章的核心逻辑:从最简单的自行车模型出发,逐步引入阿克曼转向、状态空间表示,最后用微分约束收尾。整个链条就是「模型 → 表示 → 约束」。
好了,以上就是车辆运动学模型的全部核心内容。从自行车模型到阿克曼转向,再到状态空间表示和微分约束,每一步都是环环相扣的。你在实际项目中,可以根据场景灵活选择——低速用自行车,高速加约束,中间用阿克曼。记住,模型不是越复杂越好,够用就行。
最后说一句:如果你刚开始接触这部分内容,我建议你先从自行车模型入手,跑通一个简单的路径跟踪demo。等理解了状态空间表示,再慢慢加入阿克曼和微分约束。一口吃不成胖子,做工程更是如此。
可可精品资料库