第1章:车辆运动学模型——自行车模型(Bicycle Model)
各位同学好,我是你们的老朋友。今天咱们来聊聊路径跟踪控制里最基础、也最核心的一个模型——自行车模型。
说实话,我刚入行那会儿,看到各种复杂的车辆模型就头疼。什么七自由度、十四自由度,参数多得记不住。后来带我的老工程师跟我说了一句话,我到现在都记得:「控制算法不是越复杂越好,能用简单的模型解决问题,才是真本事。」
嗯,自行车模型就是这样一个「简单但够用」的模型。
1.1 为什么叫「自行车模型」?
你想想看,一辆真正的自行车,前轮负责转向,后轮负责驱动。汽车其实也一样——前轮转向、后轮驱动(或者前轮驱动,但转向还是靠前轮)。
自行车模型的核心思想就是:把四轮汽车简化成两个轮子。前轮和后轮各一个,中间用一根刚性杆连接。这根杆的长度就是汽车的轴距。
关键假设:
- 车辆只在平面内运动(不考虑垂向跳动)
- 左右车轮合并为一个虚拟轮(忽略轮距)
- 轮胎侧偏角为零(低速时成立)
- 车辆为刚性体(不考虑悬架变形)
我在项目里遇到过好几次,有人上来就用复杂的动力学模型,结果参数标定花了两个月,最后效果还不如一个调好的自行车模型。说白了,对于低速路径跟踪(比如自动泊车、园区物流),自行车模型完全够用。
1.2 运动学方程推导
好,咱们来推公式。别怕,我保证这是整个课程里最简单的数学。
先定义几个变量:
| 符号 | 含义 | 单位 |
|---|---|---|
| (x, y) | 后轴中心坐标 | m |
| θ | 车辆航向角(车头朝向) | rad |
| v | 后轴中心速度(车速) | m/s |
| δ | 前轮转向角 | rad |
| L | 轴距(前后轮距离) | m |
现在,我们来看车辆的运动。后轮的速度方向,就是车身的方向。所以:
ẋ = v * cos(θ)
ẏ = v * sin(θ)
这个好理解吧?就是速度在x和y方向上的分解。
那航向角的变化率呢?这里有个几何关系。前轮转向角δ,决定了车辆转弯的曲率。曲率半径R = L / tan(δ)。而角速度ω = v / R,所以:
θ̇ = v * tan(δ) / L
合在一起,就是完整的自行车模型运动学方程:
ẋ = v * cos(θ)
ẏ = v * sin(θ)
θ̇ = v * tan(δ) / L
就这么简单。三个方程,描述了一辆车在平面上的运动。
我的小技巧: 实际编程时,我习惯把这三个方程封装成一个函数。输入是当前状态(x, y, θ)和控制量(v, δ),输出是状态导数。这样不管是做仿真还是做控制,调用起来都方便。
1.3 前轮转向与后轮驱动模型
刚才我们推导的,其实是「前轮转向、后轮驱动」的模型。这也是最常见的配置。
为什么后轮驱动?因为后轮的速度方向就是车身方向,这样方程才简洁。如果是前轮驱动,前轮既有速度又有转向角,推导起来就复杂了。
我曾经踩过一个坑:有次做自动泊车项目,我直接用后轮驱动模型去控制一辆前轮驱动的车。结果低速时还好,一加速就偏得离谱。后来才发现,前轮驱动时,前轮的速度方向并不等于车身方向,而是有一个偏移角。
避坑指南: 如果你控制的车是前轮驱动,记得在模型里加上前轮速度方向的修正项。否则,控制精度会大打折扣。
不过话说回来,对于大多数路径跟踪应用,我们默认使用后轮驱动模型就够了。原因很简单:控制量是车速v和转向角δ,而v通常指的是后轴中心的速度。这个速度可以通过轮速传感器直接测量,不需要额外处理。
1.4 知识体系总览
为了让大家对本章内容有个整体认识,我画了一张图:
这张图把本章的核心内容串起来了。从自行车模型出发,左边是它的假设条件,中间是运动学方程,右边是驱动方式。你只要记住这三个分支,这一章就算学透了。
1.5 小结
这一章我们讲了:
- 自行车模型是什么,为什么它叫这个名字
- 三个运动学方程的推导过程
- 前轮转向和后轮驱动的区别
- 我踩过的坑和避坑建议
说实话,自行车模型虽然简单,但它是整个路径跟踪控制的基石。后面讲的所有控制算法——纯跟踪、Stanley、MPC——都离不开这三个方程。所以,请务必把这一章吃透。
下一章,我们会用这个模型来做仿真,看看它到底能不能模拟出真实的车辆运动。到时候我会手把手带大家写代码。