738 words
4 minutes
MINCO 学习笔记:Minimum Control Effort 轨迹生成
Minimum Control effort trajectory — ZJU FAST Lab,TRO 2022
核心思想
给定一组中间路点和时间分配,用解析映射直接算出满足连续性的最优多项式轨迹。
两层结构
外层:L-BFGS 迭代 优化变量:中间路点 q_i + 虚拟时间 τ_i 每步调用一次内层
内层:解线性方程组(不迭代,一步出结果) 输入:当前 (q_i, T_i) 输出:多项式系数 c关键点: 内层不是优化,是直接解方程。给定 (q, T) 就出 c,一一对应。
轨迹表示
M 段分段多项式,每段 degree-7(MinSnap)或 degree-3(MinJerk):
p(t) = c0 + c1*t + c2*t^2 + ... + c7*t^7
优化变量只有两组: q_1, ..., q_{M-1} 中间路点位置 T_1, ..., T_M 每段时长(系数 c 由这两组变量解析算出,不是优化变量)内层:拉格朗日解系数
目标函数
最小化 snap(4 阶导数)积分:
minimize c^T * Q * c
Q 是由多项式基函数的高阶导数内积构成的常数矩阵只和段时长 T_i 有关,和路点位置无关为什么只有高阶系数? 低阶系数 c0、c1、c2 已被端点边界条件钉死,不是自由度。
等式约束
段间连续性 + 路点位置约束,全是线性的:
A * c = b
A:由多项式端点处的 [1, t, t^2, ...] 取值组成,只依赖 T_ib:由路点 q_i 和边界条件组成引入拉格朗日乘子
L(c, λ) = c^T*Q*c + λ^T*(A*c - b)
令偏导为零(KKT 条件): ∂L/∂c = 0 → 2*Q*c + A^T*λ = 0 ∂L/∂λ = 0 → A*c = b
整理成线性方程组: [2Q A^T] [c] [0] [A 0 ] [λ] = [b]
直接解出 c 和 λ,λ 用完即弃连续性为什么永远满足
每次 q_i 更新后,重新代入方程组解出新的 c,新 c 天然满足所有连续性约束。连续性是解析映射的内嵌不变量,不管路点怎么变都不会断。
外层:L-BFGS 优化总 Loss
总 Loss 组成
Loss = snap 积分(平滑代价) + 障碍物惩罚(ESDF 距离) + 可行性惩罚(速度/加速度超限) + 时间正则(防止时间无限拉长)梯度链式传播
Loss ↓ 对采样点 pos/vel/acc 求梯度采样点梯度 ↓ 多项式基函数(beta0, beta1, beta2)系数梯度 gdC ↓ MINCO 解析 Jacobian(calGrads_PT)路点梯度 gdP + 时间梯度 gdT ↓ 虚拟时间映射导数虚拟时间梯度 grad_τ ↓ L-BFGS 更新新的 q_i 和 τ_i虚拟时间参数化
问题: T_i > 0 是有约束的,L-BFGS 处理不了。
解法: 引入无约束变量 τ_i,通过单调映射保证 T_i 恒正:
T_i = exp(τ_i) ← T_i 恒正,τ_i 无约束
梯度链式换算: ∂Loss/∂τ_i = ∂Loss/∂T_i × exp(τ_i)作用: 时间分配和路点在同一个 Loss 里联合优化(空间-时间联合优化)。障碍物附近自动拉长时间减速,开阔处自动压缩时间加速。