当前位置: 首页 > java >正文

增广拉格朗日时空联合规划ALTRO-iLQR (一)

ALTRO 算法

本文档旨在介绍 ALTRO 算法的背景知识,并帮助读者更好地理解源代码。我们会刻意将算法推导和代码结构设计背后的动机交织在一起。

概览

轨迹优化是一种强大的机器人控制框架,其核心价值在于高度的通用性:只要系统动力学满足马尔可夫性质,就可以应用此方法。所谓马尔可夫动力学,即

x ˙ = f ( x , u ) \dot{x} = f(x,u) x˙=f(x,u)

其中 x ˙ ∈ R n \dot{x}\in\mathbb{R}^n x˙Rn 是状态 x ∈ R n x\in\mathbb{R}^n xRn 的时间导数, u ∈ R m u\in\mathbb{R}^m uRm 是控制输入。

轨迹优化要解决的连续最优控制问题可表示为

m i n i m i z e x ( t ) , u ( t ) ℓ T ( x T ) + ∫ 0 T ℓ ( x ( t ) , u ( t ) ) d t , subject to x ˙ ( t ) = f ( x ( t ) , u ( t ) ) , g i ( x ( t ) , u ( t ) ) ≤ 0 h ( x ( t ) , u ( t ) ) = 0 \begin{aligned} \underset{x(t),\,u(t)}{\mathrm{minimize}}\quad & \ell_T\bigl(x_T\bigr) \;+\;\int_{0}^{T}\ell\bigl(x(t),u(t)\bigr)\,dt,\\ \text{subject to}\quad & \dot{x}(t) = f\bigl(x(t),u(t)\bigr),\\ & g_{i}\bigl(x(t),u(t)\bigr) \leq 0\\ & h\bigl(x(t),u(t)\bigr) = 0 \end{aligned} x(t),u(t)minimizesubject toT(xT)+0T(x(t),u(t))dt,x˙(t)=f(x(t),u(t)),gi(x(t),u(t))0h(x(t),u(t))=0

其中:

  • ℓ T ( x T ) \ell_T(x_T) T(xT) 是终端代价;
  • ℓ ( x , u ) \ell(x,u) (x,u) 是运行代价;
  • g i ( ⋅ ) ≤ 0 g_i(\cdot)\le 0 gi()0 表示广义锥约束;
  • h ( ⋅ ) = 0 h(\cdot)=0 h()=0 表示等式约束。

为了数值实现,最常见的做法是时间离散化:将区间 [ 0 , T ] [0,T] [0,T] 等分为 N N N 段,每段时长 h = T / N h=T/N h=T/N,得到 N + 1 N+1 N+1 个“结点”(knot points)。令 x k ≈ x ( k h ) , u k ≈ u ( k h ) x_k\approx x(kh),u_k\approx u(kh) xkx(kh),uku(kh),则动力学差分方程写成

x k + 1 = f ( x k , u k , Δ t ) . x_{k+1} = f(x_k,\,u_k,\;\Delta t). xk+1=f(xk,uk,Δt).

相应的离散最优控制问题即

m i n i m i z e x 0 : N , u 0 : N − 1 ℓ N ( x N ) + ∑ k = 0 N − 1 ℓ k ( x k , u k , d t ) , subject to x k + 1 = f ( x k , u k ) , k = 0 , … , N − 1 , g k ( x k , u k ) ≤ 0 , k = 0 , … , N , h k ( x k , u k ) = 0 , k = 0 , … , N . \begin{aligned} \underset{x_{0:N},\,u_{0:N-1}}{\mathrm{minimize}}\quad & \ell_N(x_N)\;+\;\sum_{k=0}^{N-1}\ell_k\bigl(x_k,u_k,dt\bigr),\\ \text{subject to}\quad & x_{k+1} = f(x_k,u_k),\quad k=0,\dots,N-1,\\ & g_{k}(x_k,u_k)\le 0,\quad k=0,\dots,N,\\ & h_k(x_k,u_k)=0,\quad k=0,\dots,N. \end{aligned} x0:N,u0:N1minimizesubject toN(xN)+k=0N1k(xk,uk,dt),xk+1=f(xk,uk),k=0,,N1,gk(xk,uk)0,k=0,,N,hk(xk,uk)=0,k=0,,N.

求解此类离散问题的方法大致可分两类:

  1. 直接方法(Direct Methods)
    将所有 x k , u k x_k,u_k xk,uk 作为决策变量,借助通用 NLP 求解器(如 SNOPT、IPOPT)。常用隐式积分,提高数值稳定性,但依赖大型闭源库,计算较慢。

  2. 间接方法(Indirect Methods)
    利用问题的马尔可夫结构,显式在前向仿真中满足动力学,代表有 DDP 和 iLQR。每次迭代将非线性目标与约束在线性/二次近似后,求解一系列 LQR 子问题,速度快、内存少,适合嵌入式场景。历史上对非线性约束处理较弱,但近年已有多款高质量开源实现(如 OCS2、Crocoddyl)。

本库实现了增广拉格朗日 iLQR(Augmented Lagrangian iLQR,亦称 AL‑iLQR),即原始 ALTRO 算法的核心(参见 原始论文 和 Julia 实现)。下文先介绍增广拉格朗日方法,再给出 AL‑iLQR 的推导。


符号约定

  • ∇ x f ( ⋅ ) ∈ R n \nabla_x f(\cdot)\in\mathbb{R}^n xf()Rn:函数 f f f 对状态 x ∈ R n x\in\mathbb{R}^n xRn 的偏导(列向量)。

  • ∇ x x 2 f ( ⋅ ) ∈ R n × n \nabla^2_{xx}f(\cdot)\in\mathbb{R}^{n\times n} xx2f()Rn×n:若 f ( x ) ∈ R f(x)\in\mathbb{R} f(x)R,则为 Hessian 矩阵。

  • f ⁣ : R n → R m f\colon\mathbb{R}^n\to\mathbb{R}^m f:RnRm 时,二阶导是三阶张量。为简化处理,我们只取“Jacobian–transpose–vector”形式:

    ∇ x x 2 f ( ⋅ , b ) ∈ R n × n , b ∈ R m . \nabla^2_{xx}f(\cdot,\,b)\in\mathbb{R}^{n\times n},\quad b\in\mathbb{R}^m. xx2f(,b)Rn×n,bRm.


增广拉格朗日方法

考虑带锥约束的优化问题

m i n i m i z e x f ( x ) , subject to g i ( x ) ≤ 0 , i = 0 , … , n K − 1. \begin{aligned} \underset{x}{\mathrm{minimize}}\quad & f(x),\\ \text{subject to}\quad & g_i(x)\leq 0,\quad i=0,\dots,n_K-1. \end{aligned} xminimizesubject tof(x),gi(x)0,i=0,,nK1.

增广拉格朗日法将约束通过拉格朗日乘子和二次罚项“移入”到目标中,构造增广拉格朗日:

L ρ ( x , λ ) = f ( x ) + ∑ i = 0 n K − 1 [ λ i T g i ( x ) + 1 2 ρ ( ∥ Π K i ∗ ( λ i − ρ g i ( x ) ) ∥ 2 2 − ∥ λ i ∥ 2 2 ) ] , \mathcal{L}_\rho(x,\lambda) = f(x)+ \sum_{i=0}^{n_K-1} \left[ \lambda_i^Tg_i(x) + \frac{1}{2\rho}\Bigl(\|\Pi_{K_i^*}(\lambda_i-\rho\,g_i(x))\|_2^2 -\|\lambda_i\|_2^2\Bigr) \right], Lρ(x,λ)=f(x)+i=0nK1[λiTgi(x)+2ρ1(ΠKi(λiρgi(x))22λi22)],

  • λ i \lambda_i λi 是第 i i i 个约束的拉格朗日乘子;
  • ρ > 0 \rho>0 ρ>0 是罚因子;
  • Π K i ∗ \Pi_{K_i^*} ΠKi 表示投影到对偶锥 K i ∗ K_i^* Ki

该计算在 augmented_lagrangian::ALCost::Evaluateconstraints::ConstraintValues::AugLag 中实现。当前支持的锥有:

  • ZeroCone(零锥,对应等式约束)
  • NegativeOrthant(负正交锥,对应不等式约束)

若仅有等式约束,上式可化简为

L ρ = f ( x ) − λ T g ( x ) + ρ 2 g ( x ) T g ( x ) . \mathcal{L}_\rho = f(x) - \lambda^Tg(x) + \frac{\rho}{2}\,g(x)^Tg(x). Lρ=f(x)λTg(x)+2ρg(x)Tg(x).


对偶变量更新

在每次内层无约束优化(最小化 L ρ \mathcal{L}_\rho Lρ)后,对偶变量按

λ i ← Π K i ∗ ( λ i − ρ g i ( x ) ) \lambda_i \leftarrow \Pi_{K_i^*}\bigl(\lambda_i - \rho\,g_i(x)\bigr) λiΠKi(λiρgi(x))

更新。该逻辑在 constraints::ConstraintValues::UpdateDuals
augmented_lagrangian::AugmentedLagrangianiLQR::UpdateDuals 中实现。


罚因子更新

理论上,当 ρ \rho ρ 以几何级数增长时可实现超线性收敛。实践中通常按常数因子 ϕ ∈ [ 2 , 10 ] \phi\in[2,10] ϕ[2,10] 更新:

ρ ← ϕ ρ . \rho \leftarrow \phi\,\rho. ρϕρ.


增广拉格朗日 iLQR

有了增广拉格朗日背景,下面推导 AL‑iLQR。DDP 和 iLQR 的区别仅在于是否包含动力学二阶项(即 Gauss–Newton 近似)。

反向过程(Backward Pass)

我们将离散问题改写为增广拉格朗日形式的无约束优化:

m i n i m i z e x 0 : N , u 0 : N − 1 L N ( x N ) + ∑ k = 0 N − 1 L k ( x k , u k ) , subject to x k + 1 = f ( x k , u k ) . \begin{aligned} \underset{x_{0:N},\,u_{0:N-1}}{\mathrm{minimize}}\quad & \mathcal{L}_N(x_N) + \sum_{k=0}^{N-1}\mathcal{L}_k(x_k,u_k),\\ \text{subject to}\quad & x_{k+1}=f(x_k,u_k). \end{aligned} x0:N,u0:N1minimizesubject toLN(xN)+k=0N1Lk(xk,uk),xk+1=f(xk,uk).

定义在时刻 k k k 的状态函数

V k ( x ) = min ⁡ u k : N − 1 { L N + ∑ j = k N − 1 L j ( x j , u j ) } , x j + 1 = f ( x j , u j ) . V_k(x) = \min_{u_{k:N-1}} \Bigl\{\mathcal{L}_N+\sum_{j=k}^{N-1}\mathcal{L}_j(x_j,u_j)\Bigr\},\quad x_{j+1}=f(x_j,u_j). Vk(x)=uk:N1min{LN+j=kN1Lj(xj,uj)},xj+1=f(xj,uj).

根据贝尔曼最优性原理, k k k时刻状态价值函数 V k ( x ) V_k(x) Vk(x)等于状态 x x x下取得最优的 u u u使得动作价值函数 Q k ( x , u ) Q_k(x,u) Qk(x,u)最小的值。
动作价值函数等于目前状态 x x x和输入 u u u下获取到函数 L k \mathcal{L}_k Lk的值,加上下一个状态下状态价值函数 V k + 1 V_{k+1} Vk+1的值。

V k ( x ) = min ⁡ u Q k ( x , u ) , Q k ( x , u ) = L k ( x , u ) + V k + 1 ( f k ( x , u ) ) . V_k(x)=\min_uQ_k(x,u),\quad Q_k(x,u)=\mathcal{L}_k(x,u)+V_{k+1}\bigl(f_k(x,u)\bigr). Vk(x)=uminQk(x,u),Qk(x,u)=Lk(x,u)+Vk+1(fk(x,u)).

在当前位置做二次近似:

V k ( x ) ≈ V k ( x ˉ k ) + p k T δ x k + 1 2 δ x k T P k δ x k , δ x k = x − x ˉ k . V_k(x)\approx V_k(\bar x_k) +p_k^T\delta x_k +\frac12\,\delta x_k^T P_k \,\delta x_k,\quad \delta x_k=x-\bar x_k. Vk(x)Vk(xˉk)+pkTδxk+21δxkTPkδxk,δxk=xxˉk.

终端条件:

P N = ∇ x x 2 L N ( x ˉ N ) , p N = ∇ x L N ( x ˉ N ) , \begin{aligned} P_N &= \nabla^2_{xx}\mathcal{L}_N(\bar x_N),\\ p_N &= \nabla_x\mathcal{L}_N(\bar x_N), \end{aligned} PNpN=xx2LN(xˉN),=xLN(xˉN),

ilqr::KnotPointFunctions::CalcTerminalCostToGo 中实现。

然后对 Q k Q_k Qk 做二阶展开:

Q k ( x , u ) ≈ Q k ( x ˉ k , u ˉ k ) + [ δ x k δ u k ] T [ Q x x Q x u Q u x Q u u ] [ δ x k δ u k ] + [ Q x Q u ] T [ δ x k δ u k ] , \begin{aligned} Q_k(x,u)\approx\;&Q_k(\bar x_k,\bar u_k)\\ &+\begin{bmatrix}\delta x_k\\\delta u_k\end{bmatrix}^T \begin{bmatrix}Q_{xx}&Q_{xu}\\Q_{ux}&Q_{uu}\end{bmatrix} \begin{bmatrix}\delta x_k\\\delta u_k\end{bmatrix} +\begin{bmatrix}Q_x\\Q_u\end{bmatrix}^T \begin{bmatrix}\delta x_k\\\delta u_k\end{bmatrix}, \end{aligned} Qk(x,u)Qk(xˉk,uˉk)+[δxkδuk]T[QxxQuxQxuQuu][δxkδuk]+[QxQu]T[δxkδuk],

其中

Q x x = ∇ x x 2 L k + ∇ x f T P k + 1 ∇ x f + ∇ x x 2 f ( ⋅ , p k + 1 ) , Q x u = ∇ x u 2 L k + ∇ x f T P k + 1 ∇ u f + ∇ x u 2 f ( ⋅ , p k + 1 ) , Q u u = ∇ u u 2 L k + ∇ u f T P k + 1 ∇ u f + ∇ u u 2 f ( ⋅ , p k + 1 ) , Q x = ∇ x L k + ∇ x f T p k + 1 , Q u = ∇ u L k + ∇ u f T p k + 1 . \begin{aligned} Q_{xx}&=\nabla^2_{xx}\mathcal{L}_k +\nabla_xf^T\,P_{k+1}\,\nabla_xf +\nabla^2_{xx}f(\cdot,p_{k+1}),\\ Q_{xu}&=\nabla^2_{xu}\mathcal{L}_k +\nabla_xf^T\,P_{k+1}\,\nabla_uf +\nabla^2_{xu}f(\cdot,p_{k+1}),\\ Q_{uu}&=\nabla^2_{uu}\mathcal{L}_k +\nabla_uf^T\,P_{k+1}\,\nabla_uf +\nabla^2_{uu}f(\cdot,p_{k+1}),\\ Q_{x} &=\nabla_x\mathcal{L}_k + \nabla_xf^T\,p_{k+1},\\ Q_{u} &=\nabla_u\mathcal{L}_k + \nabla_uf^T\,p_{k+1}. \end{aligned} QxxQxuQuuQxQu=xx2Lk+xfTPk+1xf+xx2f(,pk+1),=xu2Lk+xfTPk+1uf+xu2f(,pk+1),=uu2Lk+ufTPk+1uf+uu2f(,pk+1),=xLk+xfTpk+1,=uLk+ufTpk+1.

ilqr::KnotPointFunctions::CalcActionValueExpansion 中实现。若去掉张量项,即为 iLQR 的 Gauss–Newton 近似。

∂ Q / ∂ δ u = 0 \partial Q/\partial\delta u=0 Q/δu=0 可得局部最优控制偏差:

δ u k ∗ = − ( Q u u + μ I ) − 1 ( Q u x δ x k + Q u ) = K k δ x k + d k , \delta u_k^* =-(Q_{uu}+\mu I)^{-1}\bigl(Q_{ux}\,\delta x_k + Q_u\bigr) =K_k\,\delta x_k + d_k, δuk=(Quu+μI)1(Quxδxk+Qu)=Kkδxk+dk,

其中 μ > 0 \mu>0 μ>0 是自适应正则化参数。正则化与增减策略在以下函数中实现:

  • ilqr::KnotPointFunctions::RegularizeActionValue
  • ilqr::KnotPointFunctions::CalcGains
  • ilqr::iLQR::IncreaseRegularization
  • ilqr::iLQR::DecreaseRegularization

当 Cholesky 分解失败或前向步无法有效降成本时,会自动调整 μ \mu μ

http://www.xdnf.cn/news/9857.html

相关文章:

  • 2.qml使用c++
  • 【C++基础知识】RAII的一个简单示例讲解
  • MySQL8.4组复制
  • SpeedFolding 论文翻译
  • “谁能进,谁不能进?”——用NAC精准控制网络访问
  • JS中class和构造函数的区别
  • Selenium 测试框架 - Kotlin
  • 制造企业搭建AI智能生产线怎么部署?
  • .NET WinForm图像识别二维码/条形码并读取其中内容
  • 01.认识Kubernetes
  • 广告流量监测和IP地址离线库
  • Nexus仓库数据高可用备份与恢复方案(下)
  • 苹果FINDMY和谷歌FIND HUB增强共享位置功能
  • offset 家族和 client 家族
  • 【第4章 图像与视频】4.1 图像的绘制
  • Next.js 布局(Layout)与模板(Template)深度解析:从原理到实战
  • 在VirtualBox中打造高效开发环境:CentOS虚拟机安装与优化指南
  • SQL正则表达式总结
  • Java面试实战:从Spring到大数据的全栈挑战
  • STM32中,如何理解看门狗
  • WebSocket与实时对话式AI服务的集成
  • MySQL ALTER TABLE 组合操作时导致的错误
  • GPU 图形计算综述 (二):固定管线
  • dto vo类为什么要序列化?
  • 相量法正弦稳态电路的分析(面向题目)
  • 从汇编的角度揭秘C++函数重载,原来这么简单
  • 【最小生成树】Prim 算法、Kruskal 算法
  • 基于vue框架的独居老人上门护理小程序的设计r322q(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 42道CSS高频题整理(附答案背诵版)
  • Java AQS(Abstract Queued Synchronized)深度解析