3. 轨迹表示与参数化

在轨迹优化中,连续时间的最优控制问题最终要转化为有限维非线性规划问题。这个转化的关键一步,就是选择一种轨迹表示方法,把无限维的曲线压缩成有限个决策变量。表示方法不仅决定了轨迹的平滑性、可行性与几何直观性,还直接决定了优化问题的变量规模、约束数量、雅可比矩阵稀疏结构,进而影响求解速度与实时性。本节围绕五类主流表示方法展开,并分析参数化对问题规模与求解效率的影响。

3.1 核心原理:从无限维到有限维

轨迹本质上是时间到状态(或位置、姿态)的映射 x(t)。若直接以离散时间点上的状态作为决策变量,则变量数等于采样点数乘以状态维数,规模随精度线性膨胀。参数化方法则用一组基函数 φ_i(t) 与系数 c_i 的线性组合逼近轨迹:

x(t) ≈ Σ c_i · φ_i(t),  i = 1..N

决策变量:系数 c_i(N 个)
轨迹光滑性:由基函数 φ_i 的连续性决定
约束施加:可在采样点、控制点或积分点上评估

因此,参数化的本质是用基函数的光滑性换取变量维度的降低。基函数越光滑、支撑越局部,轨迹越容易满足动力学约束,同时雅可比矩阵越稀疏,求解器越容易利用结构加速。

3.2 五类表示方法的结构与特性

多项式表示是最基础的形式,如五次多项式常用于单段轨迹,可同时满足位置、速度、加速度边界条件。其优点是导数解析、计算极快;缺点是全局支撑,一段多项式无法灵活描述复杂避障路径,高阶多项式还容易出现龙格现象。

贝塞尔曲线由伯恩斯坦基函数定义,具有凸包性质:曲线始终位于控制点凸包内,这为避障约束提供了天然的保守边界。但贝塞尔曲线的控制点对曲线的影响是全局的,局部修改会牵动整条曲线,且高阶时数值条件较差。

B样条是贝塞尔曲线的推广,采用局部支撑基函数,具有凸包性、变差缩减性和局部修改性。控制点只影响相邻若干段曲线,非常适合多段轨迹优化。其导数可由控制点差分直接得到,便于施加速度、加速度约束。

样条插值(如三次样条、C²连续样条)要求曲线严格通过给定路径点,适合已知精确航路点的场景。但插值条件会引入等式约束,增加问题耦合度,且路径点密集时变量数仍然较大。

离散点序列直接以采样点作为决策变量,表达最灵活,可配合差分或积分格式描述动力学。缺点是变量规模大、光滑性依赖约束显式保证,且相邻点耦合强,稀疏结构不如B样条清晰。

五类轨迹表示方法:结构、光滑性与变量规模对比 多项式 全局支撑 · 导数解析 变量少 · 难避障 贝塞尔曲线 凸包性质 · 全局影响 避障友好 · 高阶病态 B样条 局部支撑 · 稀疏雅可比 多段灵活 · 工程首选 样条插值 严格过点 · C²连续 等式约束多 · 耦合强 离散点序列 最灵活 · 变量最多 光滑靠约束 · 规模大 参数化选择 → 问题规模 → 求解效率 的传导链 基函数阶次 光滑性 / 支撑域 控制点数量 决策变量维度 雅可比稀疏度 求解器加速空间 约束评估次数 单次迭代耗时 实时性 闭环频率 B样条在“局部支撑 + 稀疏结构 + 凸包约束”之间取得最佳平衡,是实时轨迹优化的主流选择

3.3 参数化对优化问题规模与求解效率的影响

参数化方式直接改变非线性规划问题的三个关键指标:决策变量数、约束数、雅可比矩阵稀疏度。以一段 5 秒、10 个路径点的二维避障轨迹为例,不同表示方法的规模差异如下表所示。

表示方法 典型决策变量数 光滑性来源 雅可比稀疏度 适用场景
五次多项式 6~12 解析保证 稠密 单段、边界条件明确
贝塞尔曲线 20~40 基函数保证 较稠密 凸包避障、平滑路径
B样条 30~60 基函数保证 带状稀疏 多段、实时MPC
样条插值 40~80 插值条件保证 中等稀疏 精确航路点跟踪
离散点序列 100~500+ 差分约束保证 三对角/带状 高保真动力学、离线优化

从表中可见,B样条在变量规模与稀疏结构之间取得了很好的平衡。其带状雅可比允许求解器使用稀疏线性代数,单次迭代的计算量随控制点数近似线性增长,而不是立方增长。这正是B样条在实时轨迹优化中被广泛采用的原因。

3.4 案例:无人机穿越走廊的轨迹参数化

考虑一架四旋翼在狭窄走廊中飞行,需要在 3 秒内从起点到达终点,同时满足速度上限 3 m/s、加速度上限 5 m/s²,并避开两侧墙壁。若采用离散点序列,以 0.05 秒采样,则状态变量约 60 个点 × 6 维 = 360 个,加上动力学等式约束,问题规模迅速膨胀,单次求解可能超过 50 ms,难以满足 100 Hz 闭环。

改用三次B样条,设置 12 个控制点,决策变量为 12 × 3 = 36 个。速度与加速度约束通过控制点差分直接表达,避障约束利用B样条的凸包性质转化为控制点凸包与墙壁的不相交约束。问题规模缩小一个数量级,雅可比呈带状,单次求解可压缩到 5~10 ms,满足实时性要求。

# 伪代码:B样条轨迹参数化核心结构
knots   = uniform_knots(n_ctrl=12, degree=3)
ctrl_pts = decision_variables(12, 3)   # 36 维

def trajectory(t):
    return bspline(t, knots, ctrl_pts, degree=3)

def velocity(t):
    return bspline_derivative(t, knots, ctrl_pts, degree=3, order=1)

def acceleration(t):
    return bspline_derivative(t, knots, ctrl_pts, degree=3, order=2)

# 约束:凸包避障 + 速度/加速度上限
constraints = [
    convex_hull_clearance(ctrl_pts, walls),
    norm(velocity(t)) <= v_max,
    norm(acceleration(t)) <= a_max
]

3.5 常见误区与复盘

误区一:控制点越多越好。增加控制点虽然提升轨迹表达能力,但会增大问题规模、削弱稀疏性,甚至引入不必要的振荡。应根据任务精度与动力学带宽选择最小充分数量。

误区二:忽略基函数阶次与约束阶数的匹配。若需要加速度连续,至少使用三次B样条;若需要加加速度连续,则需四次或更高。阶次不足会导致约束无法解析表达,只能靠采样近似,降低可靠性。

误区三:把插值样条与逼近样条混用。插值要求曲线严格过点,会引入强等式耦合;逼近(如B样条)只要求曲线靠近控制点,约束更松、稀疏性更好。实时优化中通常优先选择逼近型表示。

复盘建议:在选定轨迹表示后,先统计决策变量数、约束数和雅可比非零元数量,再估算单次迭代耗时。若变量数超过 200 或雅可比稠密度超过 30%,应优先考虑换用局部支撑基函数或降低采样密度,而不是直接升级硬件。

综上,轨迹表示与参数化是轨迹优化问题的“第一性选择”。多项式适合简单边界条件,贝塞尔适合凸包避障,B样条适合多段实时优化,样条插值适合精确过点,离散点序列适合高保真离线场景。理解它们在变量规模、稀疏结构与光滑性上的差异,才能在实时性与最优性之间做出正确权衡。