轨迹优化 | 微分动态规划DDP与迭代线性二次型调节器iLQR理论推导
微分动态规划DDP与迭代二次型调节器iLQR是非线性轨迹优化中最常用的一类算法。本文从贝尔曼最优性原理出发,详细推导DDP与iLQR的算法脉络,并总结其正向反向传播的迭代过程
目录
- 0 专栏介绍
- 1 LQR算法的局限性
- 2 贝尔曼最优性原理
- 3 微分动态规划DDP原理
- 4 算法流程与图示
0 专栏介绍
🔥课设、毕设、创新竞赛必备!🔥本专栏涉及更高阶的运动规划算法轨迹优化实战,包括:曲线生成、碰撞检测、安全走廊、优化建模(QP、SQP、NMPC、iLQR等)、轨迹优化(梯度法、曲线法等),每个算法都包含代码实现加深理解
🚀详情:运动规划实战进阶:轨迹优化篇
1 LQR算法的局限性
若系统动力学特性可以用一组线性微分方程表示,且性能指标为状态变量和控制变量的二次型函数,则此类最优控制问题称为线性二次型问题。线性二次调节器(Linear Quadratic Regulator, LQR)是求解线性二次型问题常用的求解方法之一,其数学形式优美且求解解析性强。然而,LQR固有的局限性也相当显著,主要体现在两个方面:
- LQR的核心理论建立在线性系统模型与二次型代价函数的基础之上,对非线性的被控对象应用LQR必须首先在工作点附近进行线性化,这种近似处理在状态偏离工作点较大或期望优化的轨迹远离线性化区域时,控制器性能会急剧下降甚至导致不稳定;
- LQR本质上是一种无限时间域的静态状态反馈策略,它求解的是一个全局统一的、固定的反馈增益矩阵,通常用于初解生成(这方面应用可以参考轨迹优化 | 基于最优控制的运动学约束路径平滑与粗轨迹生成(附ROS C++/Python实现))。静态反馈难以处理具有复杂约束、时变目标或需要在状态空间中进行大范围机动的优化问题。

从LQR的线性化局限可以看出,对于轨迹优化问题
J ( u ) = ℓ f ( x N ) + ∑ k = 0 N − 1 ℓ ( x k , u k ) s . t . x k + 1 = f ( x k , u k ) , k = 0 , 1 , ⋯ , N − 1 J\left( \boldsymbol{u} \right) =\ell _f\left( \boldsymbol{x}_N \right) +\sum_{k=0}^{N-1}{\ell \left( \boldsymbol{x}_k, \boldsymbol{u}_k \right)}\\ s.t.\ \ \boldsymbol{x}_{k+1}=\boldsymbol{f}\left( \boldsymbol{x}_k, \boldsymbol{u}_k \right) , k=0,1,\cdots ,N-1 J(u)=ℓf(xN)+k=0∑N−1ℓ(xk,uk)s.t. xk+1=f(xk,uk),k=0,1,⋯,N−1
其中系统动力学和损失函数均为非线性函数。若仅在 x 0 \boldsymbol{x}_0 x0处线性化,那么在给定轨迹的其他位置 x i \boldsymbol{x}_i xi都不容易满足该局部线性假设。自然地,如果在每个轨迹点都进行线性化,就能避免单一线性模型带来的误差,同时当轨迹点足够稠密时能取得接近非线性模型的精度。本节介绍应用该思想处理非线性轨迹优化问题的微分动态规划(Differential Dynamic Programming, DDP)算法及其特例迭代线性二次型调节器iLQR算法。
2 贝尔曼最优性原理
离散时间系统的控制问题本质上是基于迭代的多级决策问题,求解的核心是贝尔曼最优性原理(Bellman’s Principle of Optimality),表述为:若
x ( 1 ) , x ( 2 ) , ⋯ , x ( N ) \boldsymbol{x}\left( 1 \right) , \boldsymbol{x}\left( 2 \right) , \cdots , \boldsymbol{x}\left( N \right) x(1),x(2),⋯,x(N)
是0时刻起,以 x ( 0 ) \boldsymbol{x}\left( 0 \right) x(0)为初始状态的控制问题最优解,则对 ∀ k = 0 , 1 , ⋯ , N − 1 \forall k=0,1,\cdots ,N-1 ∀k=0,1,⋯,N−1,决策序列
x ( k + 1 ) , x ( k + 2 ) , ⋯ , x ( N ) \boldsymbol{x}\left( k+1 \right) , \boldsymbol{x}\left( k+2 \right) , \cdots , \boldsymbol{x}\left( N \right) x(k+1),x(k+2),⋯,x(N)
是 k k k为初始时刻, x k \boldsymbol{x}_k xk为初始状态的子问题的最优解。贝尔曼最优性原理体现了动态规划在控制理论中的应用。
为了应用贝尔曼最优性原理,定义最优控制下最小化的性能指标
V ( x ( k ) , k ) = d e f min u ∈ U J ( u ; x ( k ) , k ) , k = 0 , 1 , ⋯ V\left( \boldsymbol{x}\left( k \right) ,k \right) \xlongequal{\mathrm{def}}\min _{\boldsymbol{u}\in \mathcal{U}}J\left( \boldsymbol{u}; \boldsymbol{x}\left( k \right) ,k \right) , k=0,1,\cdots V(x(k),k)defu∈UminJ(u;x(k),k),k=0,1,⋯
为最优控制问题的值函数(Value Function)。离散时间最优控制问题的最优控制满足以下关于值函数的贝尔曼方程(Bellman Equation)
{ V ( x ( N ) , N ) = h D ( x ( N ) , N ) V ( x ( k ) , k ) = min u ∈ U { g D ( x ( k ) , u ( k ) , k ) + V ( x ( k + 1 ) , k + 1 ) } k = N − 1 , ⋯ , 0 \begin{cases} V\left( \boldsymbol{x}\left( N \right) ,N \right) =h_D\left( \boldsymbol{x}\left( N \right) , N \right)\\ V\left( \boldsymbol{x}\left( k \right) ,k \right) =\underset{\boldsymbol{u}\in \mathcal{U}}{\min}\left\{ g_D\left( \boldsymbol{x}\left( k \right) ,\boldsymbol{u}\left( k \right) ,k \right) +V\left( \boldsymbol{x}\left( k+1 \right) , k+1 \right) \right\} \,\,k=N-1,\cdots ,0\\\end{cases} {V(x(N),N)=hD(x(N),N)V(x(k),k)=u∈Umin{gD(x(k),u(k),k)+V(x(k+1),k+1)}k=N−1,⋯,0
本质上是一个反向动态规划过程。若能解得贝尔曼方程的唯一解,即对 ∀ k = 0 , 1 , ⋯ , N − 1 \forall k=0,1,\cdots ,N-1 ∀k=0,1,⋯,N−1都有已知的函数 V ( x ( k ) , k ) V\left( \boldsymbol{x}\left( k \right) ,k \right) V(x(k),k),则对于任意时刻 k k k和任意可能状态 x k \boldsymbol{x}_k xk,可得闭环最优控制
u ( k ) = a r g min u ∈ U { g D ( x ( k ) , u ( k ) , k ) + V ( f D ( x ( k ) , u ( k ) , k ) , k + 1 ) } \boldsymbol{u}\left( k \right) =\mathrm{arg}\min _{\boldsymbol{u}\in \mathcal{U}}\left\{ g_D\left( \boldsymbol{x}\left( k \right) ,\boldsymbol{u}\left( k \right) ,k \right) +V\left( f_D\left( \boldsymbol{x}\left( k \right) ,\boldsymbol{u}\left( k \right) , k \right) , k+1 \right) \right\} u(k)=argu∈Umin{gD(x(k),u(k),k)+V(fD(x(k),u(k),k),k+1)}
3 微分动态规划DDP原理
对于第 k k k个轨迹点,将系统状态方程 f \boldsymbol{f} f在 x = x k \boldsymbol{x}=\boldsymbol{x}_k x=xk、 u = u k \boldsymbol{u}=\boldsymbol{u}_k u=uk处二阶展开
f ( x k + δ x , u k + δ u ) = f ( x k , u k ) + F x δ x + F u δ u + 1 2 F x x ( δ x ⊗ I n ) δ x + 1 2 F u u ( δ u ⊗ I m ) δ u + 1 2 F x u ( δ x ⊗ I m ) δ u + 1 2 F u x ( δ u ⊗ I n ) δ x \boldsymbol{f}\left( \boldsymbol{x}_k+\delta \boldsymbol{x}, \boldsymbol{u}_k+\delta \boldsymbol{u} \right) =\boldsymbol{f}\left( \boldsymbol{x}_k, \boldsymbol{u}_k \right) +\boldsymbol{F}_{\boldsymbol{x}}\delta \boldsymbol{x}+\boldsymbol{F}_{\boldsymbol{u}}\delta \boldsymbol{u}\\\,\, +\frac{1}{2}\boldsymbol{F}_{\boldsymbol{xx}}\left( \delta \boldsymbol{x}\otimes \boldsymbol{I}_n \right) \delta \boldsymbol{x}+\frac{1}{2}\boldsymbol{F}_{\boldsymbol{uu}}\left( \delta \boldsymbol{u}\otimes \boldsymbol{I}_m \right) \delta \boldsymbol{u}+\frac{1}{2}\boldsymbol{F}_{\boldsymbol{xu}}\left( \delta \boldsymbol{x}\otimes \boldsymbol{I}_m \right) \delta \boldsymbol{u}+\frac{1}{2}\boldsymbol{F}_{\boldsymbol{ux}}\left( \delta \boldsymbol{u}\otimes \boldsymbol{I}_n \right) \delta \boldsymbol{x} f(xk+δx,uk+δu)=f(xk,uk)+Fxδx+Fuδu+21Fxx(δx⊗In)δx+21Fuu(δu⊗Im)δu+21Fxu(δx⊗Im)δu+21Fux(δu⊗In)δx
同样地,将损失函数在 x = x k \boldsymbol{x}=\boldsymbol{x}_k x=xk、 u = u k \boldsymbol{u}=\boldsymbol{u}_k u=uk处二阶展开
J ( u ) = ℓ f , x T δ x N + 1 2 δ x N T ℓ f , x x δ x N + ∑ k = 0 N − 1 ( ℓ x T δ x k + ℓ u T δ u k + 1 2 δ x k T ℓ x x δ x k + 1 2 δ u k T ℓ u u δ u k + 1 2 δ x k T ℓ x u δ u k + 1 2 δ u k T ℓ u x δ x k ) J\left( \boldsymbol{u} \right) =\boldsymbol{\ell }_{f, \boldsymbol{x}}^{T}\delta \boldsymbol{x}_N+\frac{1}{2}\delta \boldsymbol{x}_{N}^{T}\boldsymbol{\ell }_{f, \boldsymbol{xx}}\delta \boldsymbol{x}_N+\\\sum_{k=0}^{N-1}{\left( \boldsymbol{\ell }_{\boldsymbol{x}}^{T}\delta \boldsymbol{x}_k+\boldsymbol{\ell }_{\boldsymbol{u}}^{T}\delta \boldsymbol{u}_k+\frac{1}{2}\delta \boldsymbol{x}_{k}^{T}\boldsymbol{\ell }_{\boldsymbol{xx}}\delta \boldsymbol{x}_k+\frac{1}{2}\delta \boldsymbol{u}_{k}^{T}\boldsymbol{\ell }_{\boldsymbol{uu}}\delta \boldsymbol{u}_k+\frac{1}{2}\delta \boldsymbol{x}_{k}^{T}\boldsymbol{\ell }_{\boldsymbol{xu}}\delta \boldsymbol{u}_k+\frac{1}{2}\delta \boldsymbol{u}_{k}^{T}\boldsymbol{\ell }_{\boldsymbol{ux}}\delta \boldsymbol{x}_k \right)} J(u)=ℓf,xTδxN+21δxNTℓf,xxδxN+k=0∑N−1(ℓxTδxk+ℓuTδuk+21δxkTℓxxδxk+21δukTℓuuδuk+21δxkTℓxuδuk+21δukTℓuxδxk)
根据贝尔曼最优性原理可得
{ V N ( x N ) = ℓ f ( x N ) V k ( x k ) = min u k { ℓ ( x k , u k ) + V k + 1 ( x k + 1 ) } \begin{cases} V_N\left( \boldsymbol{x}_N \right) =\ell _f\left( \boldsymbol{x}_N \right)\\ V_k\left( \boldsymbol{x}_k \right) =\min _{\boldsymbol{u}_k}\left\{ \ell \left( \boldsymbol{x}_k, \boldsymbol{u}_k \right) +V_{k+1}\left( \boldsymbol{x}_{k+1} \right) \right\}\\\end{cases} {VN(xN)=ℓf(xN)Vk(xk)=minuk{ℓ(xk,uk)+Vk+1(xk+1)}
对值函数在 x = x k \boldsymbol{x}=\boldsymbol{x}_k x=xk处二阶泰勒展开
V k ( x k + δ x ) = V k ( x k ) + s k T δ x + 1 2 δ x T S k δ x V_k\left( \boldsymbol{x}_k+\delta \boldsymbol{x} \right) =V_k\left( \boldsymbol{x}_k \right) +\boldsymbol{s}_{k}^{T}\delta \boldsymbol{x}+\frac{1}{2}\delta \boldsymbol{x}^T\boldsymbol{S}_k\delta \boldsymbol{x} Vk(xk+δx)=Vk(xk)+skTδx+21δxTSkδx
设动作值函数
Q k ( x k , u k ) = ℓ ( x k , u k ) + V k + 1 ( x k + 1 ) = ℓ ( x k , u k ) + V k + 1 ( f ( x k , u k ) ) Q_k\left( \boldsymbol{x}_k, \boldsymbol{u}_k \right) =\ell \left( \boldsymbol{x}_k, \boldsymbol{u}_k \right) +V_{k+1}\left( \boldsymbol{x}_{k+1} \right) =\ell \left( \boldsymbol{x}_k, \boldsymbol{u}_k \right) +V_{k+1}\left( \boldsymbol{f}\left( \boldsymbol{x}_k, \boldsymbol{u}_k \right) \right) Qk(xk,uk)=ℓ(xk,uk)+Vk+1(xk+1)=ℓ(xk,uk)+Vk+1(f(xk,uk))
对动作-值函数在 x = x k \boldsymbol{x}=\boldsymbol{x}_k x=xk、 u = u k \boldsymbol{u}=\boldsymbol{u}_k u=uk处二阶泰勒展开
Q k ( x k + δ x , u k + δ u ) = Q k ( x k , u k ) + Q k , x T δ x + Q k , u T δ u + 1 2 δ x T Q k , x x δ x + 1 2 δ u T Q k , u u δ u + 1 2 δ x T Q k , x u δ u + 1 2 δ u T Q k , u x δ x Q_k\left( \boldsymbol{x}_k+\delta \boldsymbol{x}, \boldsymbol{u}_k+\delta \boldsymbol{u} \right) =Q_k\left( \boldsymbol{x}_k, \boldsymbol{u}_k \right) +\boldsymbol{Q}_{k,\boldsymbol{x}}^{T}\delta \boldsymbol{x}+\boldsymbol{Q}_{k,\boldsymbol{u}}^{T}\delta \boldsymbol{u}\\+\frac{1}{2}\delta \boldsymbol{x}^T\boldsymbol{Q}_{k,\boldsymbol{xx}}\delta \boldsymbol{x}+\frac{1}{2}\delta \boldsymbol{u}^T\boldsymbol{Q}_{k,\boldsymbol{uu}}\delta \boldsymbol{u}+\frac{1}{2}\delta \boldsymbol{x}^T\boldsymbol{Q}_{k,\boldsymbol{xu}}\delta \boldsymbol{u}+\frac{1}{2}\delta \boldsymbol{u}^T\boldsymbol{Q}_{k,\boldsymbol{ux}}\delta \boldsymbol{x} Qk(xk+δx,uk+δu)=Qk(xk,uk)+Qk,xTδx+Qk,uTδu+21δxTQk,xxδx+21δuTQk,uuδu+21δxTQk,xuδu+21δuTQk,uxδx
求导利用链式法则和乘法原理
Q k , u = ℓ u + F u T s k + 1 Q k , x x = L x x + F x T S k + 1 F x + T ( F x x ) ( s k + 1 ⊗ I n ) ⏟ 二阶部分 Q k , u u = L u u + F u T S k + 1 F u + T ( F u u ) ( s k + 1 ⊗ I m ) ⏟ 二阶部分 Q k , u x = L u x + F u T S k + 1 F x + T ( F u x ) ( s k + 1 ⊗ I n ) ⏟ 二阶部分 \boldsymbol{Q}_{k,\boldsymbol{u}}=\boldsymbol{\ell }_{\boldsymbol{u}}+\boldsymbol{F}_{\boldsymbol{u}}^{T}\boldsymbol{s}_{k+1} \\ \boldsymbol{Q}_{k,\boldsymbol{xx}}=\mathcal{L} _{\boldsymbol{xx}}+\boldsymbol{F}_{\boldsymbol{x}}^{T}\boldsymbol{S}_{k+1}\boldsymbol{F}_{\boldsymbol{x}}+\underset{\text{二阶部分}}{\underbrace{T\left( \boldsymbol{F}_{\boldsymbol{xx}} \right) \left( \boldsymbol{s}_{k+1}^{}\otimes \boldsymbol{I}_n \right) }} \\ \boldsymbol{Q}_{k,\boldsymbol{uu}}=\mathcal{L} _{\boldsymbol{uu}}+\boldsymbol{F}_{\boldsymbol{u}}^{T}\boldsymbol{S}_{k+1}\boldsymbol{F}_{\boldsymbol{u}}+\underset{\text{二阶部分}}{\underbrace{T\left( \boldsymbol{F}_{\boldsymbol{uu}} \right) \left( \boldsymbol{s}_{k+1}^{}\otimes \boldsymbol{I}_m \right) }} \\ \boldsymbol{Q}_{k,\boldsymbol{ux}}=\mathcal{L} _{\boldsymbol{ux}}+\boldsymbol{F}_{\boldsymbol{u}}^{T}\boldsymbol{S}_{k+1}\boldsymbol{F}_{\boldsymbol{x}}+\underset{\text{二阶部分}}{\underbrace{T\left( \boldsymbol{F}_{\boldsymbol{ux}} \right) \left( \boldsymbol{s}_{k+1}^{}\otimes \boldsymbol{I}_n \right) }} Qk,u=ℓu+FuTsk+1Qk,xx=Lxx+FxTSk+1Fx+二阶部分 T(Fxx)(sk+1⊗In)Qk,uu=Luu+FuTSk+1Fu+二阶部分 T(Fuu)(sk+1⊗Im)Qk,ux=Lux+FuTSk+1Fx+二阶部分 T(Fux)(sk+1⊗In)
当不考虑环境的二阶属性时,DDP退化为迭代LQR算法(Iterative Linear Quadratic Regulator, iLQR)。
对泛函增量 Δ V k ( x k + δ x ) = min δ u { Δ Q k ( x k + δ x , u k + δ u ) } \varDelta V_k\left( \boldsymbol{x}_k+\delta \boldsymbol{x} \right) =\min _{\delta \boldsymbol{u}}\left\{ \varDelta Q_k\left( \boldsymbol{x}_k+\delta \boldsymbol{x}, \boldsymbol{u}_k+\delta \boldsymbol{u} \right) \right\} ΔVk(xk+δx)=minδu{ΔQk(xk+δx,uk+δu)}求最优扰动 ∂ Δ Q k ( x k + δ x , u k + δ u ) / ∂ δ u = 0 {{\partial \varDelta Q_k\left( \boldsymbol{x}_k+\delta \boldsymbol{x}, \boldsymbol{u}_k+\delta \boldsymbol{u} \right)}/{\partial \delta \boldsymbol{u}}}=\mathbf{0} ∂ΔQk(xk+δx,uk+δu)/∂δu=0可得
δ u ∗ = K k δ x + d k \delta \boldsymbol{u}^*=\boldsymbol{K}_k\delta \boldsymbol{x}+\boldsymbol{d}_k δu∗=Kkδx+dk
其中 K k = − Q k , u u − 1 Q k , u x \boldsymbol{K}_k=-\boldsymbol{Q}_{k,\boldsymbol{uu}}^{-1}\boldsymbol{Q}_{k,\boldsymbol{ux}} Kk=−Qk,uu−1Qk,ux、 d k = − Q k , u u − 1 Q k , u \boldsymbol{d}_k=-\boldsymbol{Q}_{k,\boldsymbol{uu}}^{-1}\boldsymbol{Q}_{k,\boldsymbol{u}} dk=−Qk,uu−1Qk,u
将 δ u ∗ \delta \boldsymbol{u}^* δu∗代回 Δ Q k ( x k + δ x , u k + δ u ) \varDelta Q_k\left( \boldsymbol{x}_k+\delta \boldsymbol{x}, \boldsymbol{u}_k+\delta \boldsymbol{u} \right) ΔQk(xk+δx,uk+δu)对比 Δ V k ( x k + δ x ) = s k T δ x + δ x T S k δ x / 2 \varDelta V_k\left( \boldsymbol{x}_k+\delta \boldsymbol{x} \right) =\boldsymbol{s}_{k}^{T}\delta \boldsymbol{x}+{{\delta \boldsymbol{x}^T\boldsymbol{S}_k\delta \boldsymbol{x}}/{2}} ΔVk(xk+δx)=skTδx+δxTSkδx/2可得
{ s k = Q k , x + K k T Q k , u u d k + Q k , u x T d k + K k T Q k , u S k = Q k , x x + K k T Q k , u u K k + Q k , x u T K k + K k T Q k , u x \begin{cases} \boldsymbol{s}_k=\boldsymbol{Q}_{k,\boldsymbol{x}}+\boldsymbol{K}_{k}^{T}\boldsymbol{Q}_{k,\boldsymbol{uu}}\boldsymbol{d}_k+\boldsymbol{Q}_{k,\boldsymbol{ux}}^{T}\boldsymbol{d}_k+\boldsymbol{K}_{k}^{T}\boldsymbol{Q}_{k,\boldsymbol{u}}\\ \boldsymbol{S}_k=\boldsymbol{Q}_{k,\boldsymbol{xx}}+\boldsymbol{K}_{k}^{T}\boldsymbol{Q}_{k,\boldsymbol{uu}}\boldsymbol{K}_k+\boldsymbol{Q}_{k,\boldsymbol{xu}}^{T}\boldsymbol{K}_k+\boldsymbol{K}_{k}^{T}\boldsymbol{Q}_{k,\boldsymbol{ux}}\\\end{cases} {sk=Qk,x+KkTQk,uudk+Qk,uxTdk+KkTQk,uSk=Qk,xx+KkTQk,uuKk+Qk,xuTKk+KkTQk,ux
至此,DDP与iLQR算法的核心原理推导完成
4 算法流程与图示


🔥 更多精彩专栏:
更多推荐



所有评论(0)