在上一讲《Coursera自动驾驶课程第6讲:Vehicle Longitudinal Control》中我们了解了如何使用PID算法进行汽车纵向控制
。
本讲我们继续学习新的模块:汽车横向控制
。具体地,我们将学习三种控制算法:Pure pursuit
,Stanley
,MPC
。
B站视频链接:https://www.bilibili.com/video/BV1WE411D74g?p=1
文章目录
- 1. Introduction to Lateral Control
- 1.1 Overview
- 1.2 Two Types of Control Design
- 1.3 Driving Controller
- 2. Geometric Steering Control - Pure Pursuit
- 2.1 Geometric path tracking
- 2.2 Pure pursuit
- 3. Geometric Steering Control - Stanley Controller
- 3.1 Stanley Controller Approach
- 3.2 Heading control & Combined steering law
- 3.3 Case Study
- 4. Advanced Vehicle Control Methods (难点)
- 4.1 Overview
- 4.2 Receding Horizon Control
- 4.3 MPC Structure
- 4.4 Vehicle Lateral Control
1. Introduction to Lateral Control
1.1 Overview
在设计汽车横向控制器时,通常需要进行以下三步:
定义车辆所处位置和预期路径之间的偏差。
选择一种控制设计策略,将偏差降至零,同时仍满足输入限制(如输入转向角限制等)。
考虑车辆本身的动态限制和所需的行驶特性。
下面介绍三种参考路径
定义:
直线段序列
。一系列紧密间隔的航点
。- 一系列连续的
参数化曲线
来定义路径。
在上述三种路径跟踪情况下,控制器都试图消除车辆与预期路径之间的偏差,并使车辆航向与路径方向对齐
。
1.2 Two Types of Control Design
下面介绍两种类型控制器:
- 第一类控制器是
几何控制器(Geometric Controllers)
,常见的有:Pure pursuit
和Stanley
。- 另一类控制器称为
动态控制器(Dynamic Controllers)
,常见的有:MPC 控制
。
后面我们以自行车模型
为基础来讨论汽车横向控制。
如下图所示,我们将使用线段作为参考路径,在图中以实心黑线
显示。还可以看到一条平行于路径但穿过前轴中心的黑色虚线
。为了进行横向控制,我们重新定义了相对于当前路径线段的航向δ\deltaδ和ψ\psiψ。
请注意,根据我们的控制器设计,我们可以在后轴中心,前轴中心或重心处
放置车辆参考系。
1.3 Driving Controller
如上一节所述,我们将介绍两种类型误差:航向误差
和轨迹偏移误差
。
航向误差
为沿路径参考点的路径方向与车辆实际航向之差。 航向误差变化率有助于我们了解航向误差如何随时间变化,并且可以从自行车模型方程中进行计算。
这里,我们介绍相对于前轴的航向误差率。对于直线段,所需的航向变化率为零,可以将其删除
。 这是因为参考航向对于一条直线不是随时间变化的,并且实际上等于零。最终我们得到航向误差变化率为:
ψ˙(t)=−vf(t)sinδ(t)L\dot{\psi}(t)=\frac{-v_{f}(t) \sin \delta(t)}{L}ψ˙(t)=L−vf(t)sinδ(t)
另一种类型的误差是轨迹偏移误差
。定义为车辆上的参考点与所需路径上的最接近点之间的距离。其公式为:
e˙(t)=vf(t)sin(ψ(t)−δ(t))\dot{e}(t)=v_{f}(t) \sin (\psi(t)-\delta(t))e˙(t)=vf(t)sin(ψ(t)−δ(t))
从该方程中,我们可以看到,随着速度的增加,误差变化更快。
2. Geometric Steering Control - Pure Pursuit
2.1 Geometric path tracking
几何路径跟踪控制器
使用车辆运动学的几何形状和参考路径来跟踪参考路径。
几何路径跟踪控制器依赖于沿所需路径的参考点,该参考点可以是用于计算航向和轨迹偏移误差的参考点,也可以是沿路径在车辆前方一定距离处的超前点,一此处以红色显示。
2.2 Pure pursuit
下面我们介绍Pure pursuit
。其核心思想是可以将参考点放置在路径上距车辆前方固定距离的位置
,并且可以使用恒定的转向角计算与该点相交所需的转向命令。
在这种方法中,后轴的中心为车辆参考点
,我们将后轴中心与目标参考点之间距离定义为ldl_dld。 车辆的车身方向与连接线之间的角度为α\alphaα。
为了构造Pure pursuit
控制器,我们再次引入瞬时旋转中心的概念。 轨迹上的目标点,后轴中心和瞬时旋转中心形成一个三角形,其半径长度为RRR,目标点和后轴中心长度为ldl_dld。 从几何关系以及正弦定律我们可以得出路径曲率
:
κ=1R=2sinαld\\\kappa=\frac{1}{R}=\frac{2 \sin \alpha}{l_{d}}κ=R1=ld2sinα
现在,让我们看一下自行车模型,以计算跟踪此弧线所需的转向角
:
δ=tan−1(2Lsinαld)\delta=\tan ^{-1}\left(\frac{2 L \sin \alpha}{l_{d}}\right)δ=tan−1(ld2Lsinα)
轨迹偏移误差eee在这里定义为航向矢量和目标点之间的横向距离,因此我们可以得出曲率与误差之间关系:
κ=2ld2e\kappa=\frac{2}{l_{d}^{2}} eκ=ld22e
随着误差的增加,曲率也随之增加,使车辆更快速地返回至参考路径。
该式也表明,Pure pursuit控制器以类似于比例控制的方式工作,以使用路径曲率作为控制器的输出来校正轨迹偏移误差
。比例增益为2ld2\frac{2}{l_{d}^{2}}ld22。因此,随着ldl_dld的增加,比例增益减小。
我们也可以对Pure pursuit制器进行修改。 我们可以根据车辆的速度改变距离ldl_dld。 使其与车辆前进速度成正比:
ld=Kddvfl_{d}=K_{d d} v_{f}ld=Kddvf
综合以上式子,我们得到转向角和车速之间的关系:
δ=tan−1(2LsinαKddvf)\delta=\tan ^{-1}\left(\frac{2 L \sin \alpha}{K_{d d} v_{f}}\right)δ=tan−1(Kddvf2Lsinα)
3. Geometric Steering Control - Stanley Controller
3.1 Stanley Controller Approach
Stanley Controller 是一种几何路径跟踪控制器。最初是由斯坦福大学的Gabe Hoffman开发的,并以斯坦利车名字命名。其主要特点有:
- 将车辆参考点切换到
前轴中心
。 - 同时考虑航向对齐和轨迹偏移误差。
- Stanley控制器为其输出设置了上限,使输出落在最大转向角范围内。
3.2 Heading control & Combined steering law
我们先介绍下如何进行航向控制的。
在左图中可以看到轨迹偏移误差是相对于前轴测量
的。 Stanley控制器通常会有以下三个需求:
- 为了消除相对于路径的航向误差,
转向角直接等于航向角
:δ(t)=ψ(t)\delta(t) = \psi(t)δ(t)=ψ(t) - 为了消除轨迹偏移误差,使用了
比例控制
,其增益kkk满足以下公式:δ(t)=tan−1(ke(t)vf(t))\delta(t) = tan^{-1}(\frac{ke(t)}{v_f(t)})δ(t)=tan−1(vf(t)ke(t))。与误差基本成正比,与速度成反比,控制函数为反正切函数。 - 最后,转向角会限制在一个取值范围内:δ(t)∈[δmin,δmax]\delta(t)\in[\delta_{min},\delta_{max}]δ(t)∈[δmin,δmax]。
为了消除航向误差和轨迹偏移误差,最终得到的汽车转向角为:
δ(t)=ψ(t)+tan−1(ke(t)vf(t)),δ(t)∈[δmin,δmax]\delta(t) = \psi(t) + tan^{-1}(\frac{ke(t)}{v_f(t)}), \delta(t)\in[\delta_{min},\delta_{max}]δ(t)=ψ(t)+tan−1(vf(t)ke(t)),δ(t)∈[δmin,δmax]
现在让我们看一下对于不同的误差系统要求的汽车转向角是多少。
对于航向误差,转向命令指向与航向误差相反的方向
,从而使车辆转弯以纠正与路径未对准的情况。 例如,对于较大的航向误差,如果航向误差超过最大转向角,则控制器将会发出最大转向指令。
对于较大的轨迹偏移误差,此时反正切角将会接近π2\frac{\pi}22π。因此,我们可以将Stanley控制器输出为航向误差加上π2\frac{\pi}22π。
tan−1(ke(t)vf(t))≈π2→δ(t)≈ψ(t)+π2\tan ^{-1}\left(\frac{k e(t)}{v_{f}(t)}\right) \approx \frac{\pi}{2} \rightarrow \delta(t) \approx \psi(t)+\frac{\pi}{2}tan−1(vf(t)ke(t))≈2π→δ(t)≈ψ(t)+2π
我们讨论以下误差的变化情况。=我们代入上式,可以得到误差变化率为:
e˙(t)=−vf(t)sin(ψ(t)−δ(t))=−vf(t)sin(tan−1(ke(t)vf(t)))=−ke(t)1+(ke(t)vf)2\begin{aligned} \dot{e}(t)=-v_{f}(t) \sin (\psi(t)-\delta(t)) &=-v_{f}(t) \sin \left(\tan ^{-1}\left(\frac{k e(t)}{v_{f}(t)}\right)\right) \\ &=\frac{-k e(t)}{\sqrt{1+\left(\frac{k e(t)}{v_{f}}\right)^{2}}} \end{aligned}e˙(t)=−vf(t)sin(ψ(t)−δ(t))=−vf(t)sin(tan−1(vf(t)ke(t)))=1+(vfke(t))2−ke(t)
当跨轨偏移误差较小时,上式可以简化为:
e˙(t)≈−ke(t)\dot{e}(t)\approx-ke(t)e˙(t)≈−ke(t)
上式最有趣的是误差变化率与速度完全无关
。
3.3 Case Study
下面我们来看两个仿真例子。
第一个例子,对于较大的初始轨迹偏移误差
,让我们假设初始误差为5米,最大允许转向角为25度,前进速度为5m/s。
仿真结果显示了Stanley控制器如何纠正较大的轨迹偏移误差并收敛到所需路径。较大的初始误差会导致较大的转向指令,从而使车辆迅速转向行驶路径。然后,航向误差和跨轨误差项达到平衡,车辆沿直线继续朝向路径行驶。
我们还可以在不同的速度下运行相同的模拟。因此,让我们尝试2m/s,5m/s和10m/s的速度。结果显示了Stanley控制器的主要特征。在所有情况下,都可以看到朝向路径的转弯,直线前进以及路径的指数衰减。速度越高,汽车在到达路径之前行驶的距离就越远。
现在让我们看看第二个仿真例子,初始时车辆的航向误差很大
。
仿真结果表明航向误差已由Stanley控制器校正。首先,在纠正航向误差时,转向指令已超过其极限。然后,随着轨迹偏移误差开始增加,转向命令将继续校正汽车的行驶方向,使其与路径对齐。最后,汽车像进入指数收敛段。实际上,它具有全局稳定性功能
,这意味着无论初始条件如何,控制器都将引导汽车返回原路。
然而在实际情况中,需要对Stanley控制器进行一些调整。
- 由于速度项位于反正切内的分数的分母中,因此
低速往往会导致转向命令放大
。这导致方向盘剧烈晃动,这对于驾驶员的舒适性而言是不希望的。因此,为了消除此问题并提高解决方案在低速下的稳定性,可以添加了一个常数,该常数可以在现场进行调整。 - 在
较高的速度
下,我们存在一个问题,即转向命令需要缓慢变化以确保横向力不会过大。即使在速度上如此缩放,斯坦利在高速下的反应仍然过于激进,因此还增加了航向阻尼项
。这实质上将航向误差控制部分转换为PD控制器。 - 最后,对于具有
高曲率的弯曲路径
,控制器无法很好地跟踪它们,因为在几何控制器的推导中未考虑动力学。正如我们在纵向控制中看到的,通过向控制器添加前馈项,可以提高系统性能并将误差更快收敛为0。
4. Advanced Vehicle Control Methods (难点)
4.1 Overview
MPC指的是一种控制设计方法,可以在每个时间步长上以数值方式优化和解决问题
。
用于自动驾驶汽车的纵向和横向控制是MPC的一个常见应用。模型预测控制通常也可以称为Receding horizon approach
,因为控制器会在每个时间步长基于固定的有限长度生成一个执行器信号。MPC的主要优势有:
-
MPC控制器的公式简单,只需定义目标函数和相关约束,然后使用已知的求解器对其进行优化。
-
由于许多汽车子系统具有严格的执行器约束和多样化的性能目标,因此MPC已成为车辆控制的主要工具。 **控制器可以明确地应用于车辆及其子系统的线性或非线性模型,这意味着即使模型随时间变化或改进,也可以使用相同的方法。
当然MPC与其它控制方法相比,其缺点则是需要更多的计算资源。
4.2 Receding Horizon Control
在开始设计MPC控制器之前,让我们仔细研究一下Receding Horizon
的概念。Receding Horizon Control解决了每个时间步长上的固定大小优化问题,该问题根据目标约束和车辆的当前状态确定从当前时间到horizon结束要应用的最佳控制输入。然而,在实现中出现的一个问题是,由于优化可能需要花费一段时间,因此开始优化时的车辆状态将不同于优化完成时的车辆状态。
因此,我们必须在优化中使用预测状态来做为实际控制输入。现在我们定义一些术语符号:
- 首先,我们定义receding horizon长度TTT。
- 然后,我们将优化初始状态设置为在ttt时刻的xxx优化结束时的预测状态。
- 接下来,我们使用上次优化中确定的控制输入ut−1u_{t-1}ut−1,在车辆从时间ttt的当前状态xt−1x_{t-1}xt−1移动到ttt时刻。
- 最后,我们应用receding horizon优化的第一时间步骤中的控制信号,并为下一个时间步骤重复该过程。
4.3 MPC Structure
我们可以使用下方左图来可视化MPC结构。
我们有两个主要模块,一个是优化器模块
,它是核心MPC组件,另一个是动态模型
。 该模型从时间ttt减去一开始获取过去的输入和状态,并获取优化器的输出,该输出是地平线上每个时间步长的输入UUU的当前序列。 然后,该模型在下一个时间步输出预测状态,将其与参考轨迹进行比较,并作为预测误差传递到优化器中。
优化器还接收更新的约束和要使用的成本函数,这些约束可以预先确定,也可以根据运行模式的变化而变化。 优化器解决其优化问题,然后重复该过程。
现在,让我们看一下线性MPC
。
- 我们使用
状态空间来表示离散形式的运动模型
。 未来状态xt+1x_{t+1}xt+1与当前状态xtx_txt和执行器信号utu_tut线性相关。 注意,AAA和BBB是系数矩阵,并且被假定为是不变的。
xt+1=Axt+Butx_{t+1} = Ax_t + Bu_txt+1=Axt+But - MPC试图找到输入的控制策略UUU。
U={ut∣t,ut+1∣t,ut+2∣t,⋅⋅⋅}U = \{u_{t|t},u_{t+1|t},u_{t+2|t},···\}U={ut∣t,ut+1∣t,ut+2∣t,⋅⋅⋅} - 目标函数可以定义为:
J(x(t),U)=∑j=tt+T−1xj∣tTQxj∣t+uj∣tTRuj∣tJ(x(t),U) = \sum_{j=t}^{t+T-1}x^{T}_{j|t}Qx_{j|t}+u^T_{j|t}Ru_{j|t}J(x(t),U)=j=t∑t+T−1xj∣tTQxj∣t+uj∣tTRuj∣t
在从零到非零的控制输入的状态偏差上具有二次误差,类似于最优控制理论的优化问题,并在控制性能和输入积极性之间进行权衡。 注意,矩阵Q和R称为权重矩阵,可以进行适当选择以实现特定类型的响应。
相反,如果我们需要跟踪参考信号(例如所需轨迹),则可以修改公式以包括相对于所需状态的误差增量xxx。
δxj∣t=xj∣t,des−xj∣tJ(x(t),U)=∑j=tt+T−1xj∣tTQxj∣t+uj∣tTRuj∣t\delta x_{j|t}=x_{j|t,des}-x_{j|t} \\ J(x(t),U) = \sum_{j=t}^{t+T-1}x^{T}_{j|t}Qx_{j|t}+u^T_{j|t}Ru_{j|t}δxj∣t=xj∣t,des−xj∣tJ(x(t),U)=j=t∑t+T−1xj∣tTQxj∣t+uj∣tTRuj∣t
下面我们给出其对应的优化公式
,是一个具有封闭形式的解决方案,即线性二次调节器或LQR。 封闭式解决方案使用完整状态反馈,这意味着在控制响应中使用了所有状态。 LQR解决方案定义了一个控制增益矩阵KKK,该矩阵可以根据状态空间模型的AAA和BBB矩阵以及成本函数的QQQ和RRR矩阵进行计算。
minU≜{ut∣tut+1∣t,…}J(x(t),U)=xt+T∣tTQfxt+T∣t+∑j=tt+T−1xj∣tTQxj∣t+uj∣tTRuj∣ts.t.xj+1∣t=Axt∣t+But∣t,t≤j≤t+T−1\min _{U \triangleq\left\{u_{t \mid t} u_{t+1 \mid t, \ldots\}}\right.} J(x(t), U)=x_{t+T \mid t}^{\mathrm{T}} Q_{f} x_{t+T \mid t}+\sum_{j=t}^{t+T-1} x_{j \mid t}^{\mathrm{T}} Q x_{j \mid t}+u_{j \mid t}^{\mathrm{T}} R u_{j \mid t}\\\quad s.t. \quad x_{j+1 \mid t}=A x_{t \mid t}+B u_{t \mid t}, \quad t \leq j \leq t+T-1U≜{ut∣tut+1∣t,…}minJ(x(t),U)=xt+T∣tTQfxt+T∣t+j=t∑t+T−1xj∣tTQxj∣t+uj∣tTRuj∣ts.t.xj+1∣t=Axt∣t+But∣t,t≤j≤t+T−1
现在让我们看一下非线性MPC
:
在更一般的情况下,其目标函数是状态和receding horizon输入
的任何可微的非线性函数。 对于这样的一般优化问题,不存在封闭形式的解决方案。 因此,我们必须依靠数值优化来找到解决方案。
4.4 Vehicle Lateral Control
现在,让我们看一下MPC控制器在自动驾驶汽车上进行轨迹跟踪的效果。
MPC与之前介绍的反馈结构相同,但我们将油门,制动和转向命令作为回路中的低级控制器输出
。 MPC控制器的输入,包括参考路径和速度以及每个时间步的车辆状态
。 MPC控制器的输出是遵循所需轨迹所需的横向和纵向力
。 之后低级控制器转换为相应的油门,断开和转向命令,最后,在每个时间步长上将操纵信号施加到车辆上,并通过反馈回路获得新的车辆状态。
在这里我们定义了跟踪所需轨迹的成本函数,包括最小化与所需轨迹的偏差和控制命令幅度
。接下来,我们根据先前视频中开发的横向和纵向模型定义车辆的运动约束。我们还对轮胎力施加最大限制,以将其限制在线性轮胎区域内。
现在让我们看一下控制效果。
对双车道变更场景进行仿真,右图显示了带有MPC控制的模拟操纵结果,参考轨迹为蓝色,实际车辆轨迹为红色
。我们可以看到,MPC控制器的跟踪性能非常好,略有滞后,但没有超调或振荡。可以看到模型预测控制器的输出(横向和纵向力)平滑变化。
同样,绘制了在双车道变更操纵期间的车辆偏航率。
总结,在本讲我们学习了:
- 如何定义横向路径跟踪问题;
- 如何将pure pursuit跟踪和Stanley控制方法;
- MPC控制方法。