自动驾驶-控制算法(二)
本文主要记录线性二次型调节器(Linear quadratic regulator,LQR)原理和推导过程,并使用基于运动学模型的LQR实现车辆路径跟踪。提示:以下是本篇文章正文内容,下面案例可供参考。
前言
本文主要记录线性二次型调节器(Linear quadratic regulator,LQR)原理和推导过程,并使用基于运动学模型的LQR实现车辆路径跟踪。
提示:以下是本篇文章正文内容,下面案例可供参考
一、全状态反馈控制系统
假设有一个线性系统用状态向量表示:
x ˙ = A x + B u y ˙ = C x + D u \begin{align} \dot{x} =Ax+Bu \\ \dot{y} =Cx+Du \\ \end{align} x˙=Ax+Buy˙=Cx+Du
其中, x ( t ) ∈ R n x(t) \in R^n x(t)∈Rn, u ( t ) ∈ R m u(t) \in R^m u(t)∈Rm。
设计状态反馈控制器
u = − K x \begin{align} u = -Kx \end{align} u=−Kx
将式(3)带入系统状态方程中,可得:
x ˙ = ( A − B K ) x = A c x \begin{align} \dot{x}=(A-BK)x=A_cx \end{align} x˙=(A−BK)x=Acx
设定系统中的各个状态量都可知,式(1)所示的开环系统,传递函数的极点就是系统矩阵A的特征值。式(4)所示的闭环系统,通过配置反馈矩阵 K K K,可以使得闭环系统达到所期望的系统状态。
二、LQR控制器
LQR(Linear Quadratic Regulator,线性二次型调节器)是一种用于解决最优控制问题的数学方法,特别是在系统可以表示为线性方程,且性能指标可以表示为二次型的情况下。LQR通常用于设计线性系统的控制器,使得系统从一个初始状态转移到期望的最终状态,同时最小化一个给定的性能指标。
2.1 连续时间
LQR目标是找到一组控制量 u 0 , u 1 , . . . u_0, u_1, ... u0,u1,...,使得 x 0 , x 1 , . . . x_0, x_1, ... x0,x1,...能够快速、稳定地趋近于零,并保持平衡(系统达到稳定状态),同时控制量 u 0 , u 1 , . . . u_0, u_1, ... u0,u1,...尽可能小。
这是一个典型的多目标优化最优控制稳定,选取目标函数为
J = 1 2 ∫ 0 ∞ ( x T Q x + u T R u ) d t \begin{align} J=\frac{1}{2} \int_{0}^{\infty } (x^TQx + u^TRu)dt \end{align} J=21∫0∞(xTQx+uTRu)dt
其中,Q、R分别是需要设计的半正定矩阵和正定矩阵。Q矩阵元素变大意味着希望状态量能够快速趋近于零,R矩阵元素变大意味着希望控制输入能够尽可能小,系统的状态衰减将变慢。Q、R的设置需结合具体的实际应用场景来调节。
将 u = − K x u=-Kx u=−Kx带入代价函数,可得:
J = 1 2 ∫ 0 ∞ x T ( Q + K T R K ) x d t \begin{align} J=\frac{1}{2} \int_{0}^{\infty } x^T(Q + K^TRK)xdt \end{align} J=21∫0∞xT(Q+KTRK)xdt
假设存在一个常量矩阵 P P P,使得:
d d t x T P x = − x T ( Q + K T R K ) x \begin{align} \frac{d}{dt}x^TPx=-x^T(Q + K^TRK)x \end{align} dtdxTPx=−xT(Q+KTRK)x
将式(7)带入式(6)可得:
J = − 1 2 ∫ 0 ∞ d d t ( x T P x ) d t = − 1 2 x T P x ∣ 0 ∞ = 1 2 x T ( 0 ) P x ( 0 ) \begin{align} J=-\frac{1}{2} \int_{0}^{\infty } \frac{d}{dt}(x^TPx) dt=-\frac{1}{2}x^TPx|_0^\infty =\frac{1}{2}x^T(0)Px(0) \end{align} J=−21∫0∞dtd(xTPx)dt=−21xTPx∣0∞=21xT(0)Px(0)
上式当 t → ∞ t \to \infty t→∞时,系统状态向量 x ( t ) x(t) x(t)趋近于0。
将式(7)左边微分展开,可得:
x ˙ T P x + x T P x ˙ + x T ( Q + K T R K ) x = 0 \begin{align} \dot x^TPx + x^TP\dot x+x^T(Q + K^TRK)x = 0 \end{align} x˙TPx+xTPx˙+xT(Q+KTRK)x=0
将 x ˙ = ( A − B K ) x \dot x=(A-BK)x x˙=(A−BK)x带入上式并整理可得:
x T ( A T P − K T B T P + P A − P B K + Q + K T R K ) x = 0 \begin{align} x^T(A^TP - K^TB^TP+PA-PBK+Q+K^TRK)x = 0 \end{align} xT(ATP−KTBTP+PA−PBK+Q+KTRK)x=0
若上式有解,则括号中的部分必须为零,即:
A T P − K T B T P + P A − P B K + Q + K T R K = 0 \begin{align} A^TP - K^TB^TP+PA-PBK+Q+K^TRK = 0 \end{align} ATP−KTBTP+PA−PBK+Q+KTRK=0
令 K = R − 1 B T P K=R^{-1}B^TP K=R−1BTP,上式可化简为:
A T P + P A − P B R − 1 B T P + Q = 0 \begin{align} A^TP +PA-PBR^{-1}B^TP+Q= 0 \end{align} ATP+PA−PBR−1BTP+Q=0
式(12)中, A , B , Q , R A, B, Q, R A,B,Q,R都是已知量,通过上式可求解出 P P P,式(12)就是著名的连续时间代数Riccati方程。
连续时间下的LQR算法步骤如下:
1.选择参数矩阵 Q , R Q, R Q,R(分别满足半正定和正定)
2.根据公式(12)求解Riccati方程得到矩阵P
A T P + P A − P B R − 1 B T P + Q = 0 \begin{aligned} A^TP +PA-PBR^{-1}B^TP+Q= 0 \end{aligned} ATP+PA−PBR−1BTP+Q=0
3. 根据 P P P计算增益 K = R − 1 B T P K=R^{-1}B^TP K=R−1BTP
4. 计算控制量 u ∗ = − K x u^{*} = -Kx u∗=−Kx
2.2 离散时间
假设一个离散系统表示为
x k + 1 = A x k + 1 + B u k \begin{align} \mathrm{x}_{k+1}= A \mathrm{x}_{k+1}+B \mathrm{u}_{k} \end{align} xk+1=Axk+1+Buk
离散LQR代价函数为:
J = ∑ k = 0 N − 1 ( x k T Q x k + u k T R u k ) + x N T Q f x N \begin{align} J= \sum_{k=0}^{N-1} (\mathrm{x}_k^T Q \mathrm{x}_k+\mathrm{u}_k^TR\mathrm{u}_k)+\mathrm{x}_N^TQ_f\mathrm{x}_N \end{align} J=k=0∑N−1(xkTQxk+ukTRuk)+xNTQfxN
其中, Q Q Q为状态代价矩阵, Q f Q_f Qf为最终状态代价矩阵, R R R为输入代价矩阵, N N N为时间范围。
求解离散LQR的方法有最小二乘法、动态规划算法等,在此不做详细介绍,详情参考基础算法 - LQR - 离散时间有限边界
根据参考链接中动态规划算法的求解结果,给出离散LQR的求解步骤:
- 确定迭代范围 N N N,设置迭代初始值 P N = Q f P_N=Q_f PN=Qf;
- 循环迭代, k = N , . . . , 1 k= N,...,1 k=N,...,1
P k − 1 = Q + A T P k A − A T P k B ( R + B T P k B ) − 1 B T P k A \begin{aligned} P_{k-1}=Q+A^TP_{k}A - A^TP_{k}B(R+B^TP_{k}B)^{-1}B^TP_{k}A \end{aligned} Pk−1=Q+ATPkA−ATPkB(R+BTPkB)−1BTPkA - 反馈系数 K k = − ( R + B T P k + 1 B ) − 1 B T P k + 1 A K_k=-(R+B^TP_{k+1}B)^{-1}B^TP_{k+1}A Kk=−(R+BTPk+1B)−1BTPk+1A
- 优化的控制量 u k = K k x t \mathrm{u}_k = K_k\mathrm{x}_t uk=Kkxt
三、基于车辆运动学模型的LQR优化
采用以车辆后轴中心为原点的运动学模型
图中的部分符号和定义如下:
A 、 B A、B A、B:车辆前轴、后轴中心点;
P P P:规划路径中距后轴中心最近的点;
L L L:车辆轴距;
v v v:车辆后轴中心处的速度;
s ˙ \dot s s˙:目标点处的速度;
ψ \psi ψ:车辆航向角;
ψ t \psi_t ψt: P P P点处的航向角;
δ f \delta_f δf:车辆的前轮转角;
ψ e \psi_e ψe: P P P点处航向角与车辆航向角之间的偏差;
e y e_y ey:前轴中线点到 P P P点切线方向的偏差;
d d d:后轴中心点到目标点的距离;
对应的运动学模型如下:
x ˙ = v ⋅ cos ψ y ˙ = v ⋅ sin ψ ψ ˙ = v ⋅ tan δ f L \begin{align} \dot x = v \cdot \cos \psi \\ \dot y = v \cdot \sin \psi \\ \dot \psi = \frac{v \cdot \tan \delta_f}{L} \end{align} x˙=v⋅cosψy˙=v⋅sinψψ˙=Lv⋅tanδf
状态量为: X = [ x , y , ψ ] T X=[x,y,\psi]^T X=[x,y,ψ]T,控制量为: u = [ v , δ ] T \mathrm{u}=[v,\delta]^T u=[v,δ]T。
将上述模型在参考点 X r = [ x r , y r , ψ r ] X_r=[x_r,y_r,\psi_r] Xr=[xr,yr,ψr]处利用泰勒级数展开线性化:
X ˙ = f ( X , u ) X ˙ = X ˙ r + f X ′ ( X r , u r ) [ X − X r ] + f u ′ ( X r , u r ) [ u − u r ] \begin{gather} \dot X =f(X, u) \\ \dot X =\dot X_{r} + f^{'}_{X}(X_{r},u_{r})[X-X_{r}]+f^{'}_{u}(X_{r},u_{r})[u-u_{r}]\\ \end{gather} X˙=f(X,u)X˙=X˙r+fX′(Xr,ur)[X−Xr]+fu′(Xr,ur)[u−ur]
可得状态误差方程:
X ~ ˙ = A X ~ + B u ~ \begin{align} \dot{\tilde{X}} =A\tilde{X}+B\tilde{\mathrm{u}} \end{align} X~˙=AX~+Bu~
其中:
X ~ = [ x − x r y − y r ψ − ψ r ] \tilde{X}=\begin{bmatrix} x - x_r \\ y - y_r \\ \psi - \psi_r \end{bmatrix} X~=
x−xry−yrψ−ψr
u ~ = [ v − v r δ − δ r ] \tilde{\mathrm{u}}=\begin{bmatrix} v - v_r \\ \delta - \delta_r \end{bmatrix} u~=[v−vrδ−δr]
A = [ 0 0 − v r sin ψ r 0 0 v r cos ψ r 0 0 0 ] A=\begin{bmatrix} 0& 0& -v_r\sin \psi _r\\ 0& 0& v_r\cos \psi _r\\ 0& 0& 0 \end{bmatrix} A= 000000−vrsinψrvrcosψr0
B = [ cos ψ r 0 sin ψ r 0 tan δ r L v r L ⋅ cos 2 δ r ] B=\begin{bmatrix} \cos \psi _r& 0 \\ \sin \psi _r& 0 \\ \frac{\tan \delta _r}{L} & \frac{v_r}{L\cdot \cos ^2 \delta _r} \end{bmatrix} B= cosψrsinψrLtanδr00L⋅cos2δrvr
将上述方程利用前向欧拉法进行离散化可得:
X ~ ( k + 1 ) = A ~ X ~ ( k ) + B ~ u ~ ( k ) \begin{align} \tilde{X}(k+1) = \tilde{A}\tilde{X}(k)+\tilde{B}\tilde{\mathrm{u}}(k) \end{align} X~(k+1)=A~X~(k)+B~u~(k)
其中:
X ~ ( k ) = [ x ( k ) − x r y ( k ) − y r ψ ( k ) − ψ r ] \tilde{X}(k)=\begin{bmatrix} x(k) - x_r \\ y(k) - y_r \\ \psi(k) - \psi_r \end{bmatrix} X~(k)=
x(k)−xry(k)−yrψ(k)−ψr
u ~ ( k ) = [ v ( k ) − v r δ ( k ) − δ r ] \tilde{\mathrm{u}}(k)=\begin{bmatrix} v(k) - v_r \\ \delta(k) - \delta_r \end{bmatrix} u~(k)=[v(k)−vrδ(k)−δr]
A ~ = A ⋅ T + I = [ 1 0 − v r ⋅ T ⋅ sin ψ r 0 1 v r ⋅ T ⋅ cos ψ r 0 0 1 ] \tilde{A}=A\cdot T+I=\begin{bmatrix} 1& 0& -v_r \cdot T \cdot \sin \psi _r \\ 0& 1& v_r \cdot T \cdot \cos \psi _r \\ 0& 0& 1 \end{bmatrix} A~=A⋅T+I=
100010−vr⋅T⋅sinψrvr⋅T⋅cosψr1
B ~ = B ⋅ T = [ T cos ψ r 0 T sin ψ r 0 T ⋅ tan δ r L v r ⋅ T L ⋅ cos 2 δ r ] \tilde{B}=B\cdot T=\begin{bmatrix} T\cos \psi _r & 0 \\ T\sin \psi _r & 0 \\ \frac{T \cdot \tan \delta _r}{L} & \frac{v_r \cdot T}{L\cdot \cos ^2 \delta _r} \end{bmatrix} B~=B⋅T= TcosψrTsinψrLT⋅tanδr00L⋅cos2δrvr⋅T
式中, T T T为采样步长, I I I为单位矩阵,维度与矩阵 A A A一致。
采用LQR进行控制量求解的步骤包括:
- 确定迭代范围 N N N,预设精度 e p s eps eps;
- 设置 Q 、 R Q、R Q、R矩阵,设置迭代初始值为 P N = Q P_N=Q PN=Q;
- 根据车辆状态信息、目标点计算偏差方程中的 A 、 B A、B A、B矩阵(对应上述偏差方程中 A ~ 、 B ~ \tilde{A}、\tilde{B} A~、B~);
- 循环迭代, k = N , . . . , 1 k= N,...,1 k=N,...,1
P k − 1 = Q + A T P k A − A T P k B ( R + B T P k B ) − 1 B T P k A \begin{aligned} P_{k-1}=Q+A^TP_{k}A - A^TP_{k}B(R+B^TP_{k}B)^{-1}B^TP_{k}A \end{aligned} Pk−1=Q+ATPkA−ATPkB(R+BTPkB)−1BTPkA
若 ∣ ∣ P k − 1 − P k ∣ ∣ < e p s ||P_{k-1} - P_{k}||<eps ∣∣Pk−1−Pk∣∣<eps,结束循环; - 计算反馈系数 K = − ( R + B T P k B ) − 1 B T P k A K=-(R+B^TP_{k}B)^{-1}B^TP_{k}A K=−(R+BTPkB)−1BTPkA
- 优化的控制偏差量为 u ~ = K X ~ \tilde{\mathrm{u}} = K\tilde{X} u~=KX~
- 进一步计算得控制量 u \mathrm{u} u。
车辆前进和后退控制的唯一区别是:前进速度为正,后退速度为负;
车辆方向信息始终采用车辆朝向,即车头对应的方向。
参考文献
1、【控制理论】离散及连续的LQR控制算法原理推导
2、基础算法 - LQR - 离散时间有限边界
3、基于车辆运动学模型的LQR轨迹跟踪控制器
更多推荐




所有评论(0)