坐标系与车辆模型:Frenet坐标系、笛卡尔坐标系、自行车模型、车辆运动学方程
各位同学,今天我们来聊聊轨迹规划里最基础、也最绕不开的两个东西——坐标系和车辆模型。
说实话,我刚入行那会儿,觉得坐标系嘛,不就是个坐标轴吗?有什么好讲的。直到我第一次在实车上调试轨迹跟踪算法,发现规划出来的路径明明很平滑,但车就是走不直。查了半天,原来是坐标系选错了。嗯,从那以后,我再也不敢小看这个环节了。
为什么需要两种坐标系?
你想想看,我们平时开车,导航告诉你的信息是什么?是「前方500米右转」、「距离出口还有2公里」。这些都是沿着道路走的距离,而不是「向东走100米,再向北走50米」。对吧?
笛卡尔坐标系(就是咱们中学学的x-y坐标系)适合描述绝对位置,但在道路场景下有个致命问题——道路是弯曲的。一条弯弯曲曲的路,用笛卡尔坐标表示,那方程能写到你手酸。
而Frenet坐标系,说白了就是「贴着路走的坐标系」。它把问题分解成两个方向:
- 纵向(s):沿着道路中心线走了多远
- 横向(d):偏离道路中心线多少
这样做的好处是什么?我举个例子。你在高速上变道,用笛卡尔坐标你得算一大堆三角函数,用Frenet坐标就简单了——纵向保持匀速,横向从当前车道中心平滑过渡到目标车道中心。就这么简单。
核心思想:Frenet坐标系把三维的轨迹规划问题,解耦成两个独立的一维问题。这是自动驾驶轨迹规划里最经典的思想之一。
Frenet坐标系 vs 笛卡尔坐标系
咱们来对比一下这两种坐标系在实际应用中的区别:
| 特性 | 笛卡尔坐标系 | Frenet坐标系 |
|---|---|---|
| 坐标含义 | 绝对位置 (x, y) | 沿道路距离 (s) + 横向偏移 (d) |
| 道路适应性 | 差,弯曲道路需分段拟合 | 好,天然贴合道路几何 |
| 约束表达 | 复杂,需额外计算道路边界 | 简单,d 直接表示偏离程度 |
| 速度规划 | 需处理方向变化 | 纵向速度独立控制 |
| 典型应用 | 全局路径、地图定位 | 局部轨迹规划、行为决策 |
我个人习惯是:全局路径规划用笛卡尔坐标,因为地图数据本身就是经纬度;但一旦进入局部规划层,立刻切换到Frenet坐标系。这样处理起来清爽很多。
Frenet与笛卡尔的相互转换
实际工程中,这两个坐标系需要来回切换。比如传感器给的障碍物位置是笛卡尔坐标,但规划器需要的是Frenet坐标。转换公式长这样:
// 笛卡尔 → Frenet(简化版)
s = 找到参考线上最近点的弧长
d = 点到参考线的有向距离(左为正,右为负)
// Frenet → 笛卡尔(简化版)
x = x_ref(s) - d * sin(theta_ref(s))
y = y_ref(s) + d * cos(theta_ref(s))
这里 x_ref(s) 和 y_ref(s) 是参考线上弧长 s 对应的点坐标,theta_ref(s) 是该点的切线方向角。
避坑指南:我曾经在计算有向距离 d 时,忘了考虑参考线的曲率方向,结果在弯道处 d 的符号反了。车明明在道路右侧,系统却认为它在左侧。嗯,这个bug调了我整整一个下午。
自行车模型——把四轮车简化成两轮
好了,坐标系搞定了,接下来得说说车辆本身怎么建模。
真实的车辆有四个轮子,转向系统复杂得很。但咱们做轨迹规划,不需要那么精细的动力学模型。这时候,自行车模型就派上用场了。
说白了,就是把前后轮分别合并成一个虚拟轮,假设车辆像自行车一样运动。这个模型在低速场景下(比如泊车、城区道路)精度足够,而且计算量小。
自行车模型的假设条件:
- 车辆在平坦路面上行驶(忽略垂向运动)
- 轮胎侧偏角忽略不计(低速假设)
- 前后轮转向角满足阿克曼几何关系
- 车辆刚体,不考虑悬架变形
车辆运动学方程
有了自行车模型,我们就可以写出车辆的运动学方程了。这是轨迹规划的「物理基础」——你规划的轨迹,必须满足这组方程,否则车开不出来。
状态量通常取:
x:车辆后轴中心 x 坐标y:车辆后轴中心 y 坐标θ:车辆航向角(车头朝向)v:车辆速度(沿车头方向)δ:前轮转向角
运动学方程:
dx/dt = v * cos(θ)
dy/dt = v * sin(θ)
dθ/dt = v * tan(δ) / L
dv/dt = a
dδ/dt = ω
其中 L 是轴距(前后轮距离),a 是加速度,ω 是转向角速度。
注意:这个模型假设车辆是「后轮驱动、前轮转向」。如果你的车是四轮转向或者差速转向(比如某些AGV),方程需要调整。我在做园区物流车项目时就踩过这个坑——那车是四轮转向,直接用自行车模型算出来的轨迹,实车根本走不出来。
知识体系结构图
下面这张图,是我自己梳理的本章知识脉络。你可以把它当作一个「思维导图」来看:
实际应用中的选择策略
讲了这么多理论,最后聊聊实际工程中怎么选。
我个人的经验是:
- 低速场景(< 30 km/h):用自行车模型 + Frenet坐标系,精度够用,计算快。泊车、园区接驳车都这么干。
- 中高速场景(30-80 km/h):自行车模型勉强能用,但最好加入轮胎侧偏角补偿。我在高速代驾项目里吃过亏——车一上60,自行车模型算出来的轨迹就开始飘。
- 高速场景(> 80 km/h):必须上动力学模型了。自行车模型只适合做参考线跟踪,不能直接用于规划。
一个小技巧:如果你不确定该用哪种模型,先跑个仿真。把自行车模型和动力学模型的轨迹画在一起,看看偏差有多大。偏差在可接受范围内,就用简单的。别一开始就上复杂的——复杂模型参数多,调起来能让你怀疑人生。
好了,坐标系和车辆模型这部分就聊到这儿。记住一句话:好的轨迹规划,一半靠算法,一半靠模型选得对。下次你看到一条漂亮的轨迹,不妨想想——它是在哪个坐标系下规划的?用的什么车辆模型?想明白了,你离高手就不远了。
可可精品资料库