4. 约束建模

轨迹规划的本质,是在一个由物理规律、任务要求和安全边界共同限定的可行域内,寻找一条既满足性能指标又不越界的运动曲线。约束建模就是把这个“可行域”翻译成优化器能够理解的语言。若约束写得过松,规划结果可能物理不可行;若写得过紧,问题可能无解或求解效率骤降。因此,约束建模既是数学表达问题,也是工程折中问题。

核心思想:任何一条轨迹都可以抽象为决策变量向量 x,约束就是一组关于 x 的等式或不等式关系。等式约束定义“必须精确满足”的硬关系,不等式约束定义“允许在一定范围内波动”的软边界,而边界约束、动力学约束、避障约束和时间约束则分别从变量范围、物理可行性、几何安全性和时序节奏四个维度对 x 进行限制。

一、约束的分类与统一数学形式

在连续时间最优控制中,轨迹通常表示为状态 x(t) 和控制 u(t) 的函数。约束可以统一写成如下形式:

min  J(x(t), u(t), t)
s.t. ẋ(t) = f(x(t), u(t), t)          // 动力学等式约束
     g(x(t), u(t), t) ≤ 0              // 不等式约束
     h(x(t), u(t), t) = 0              // 等式约束
     x_min ≤ x(t) ≤ x_max              // 状态边界约束
     u_min ≤ u(t) ≤ u_max              // 控制边界约束
     t ∈ [t0, tf]                      // 时间约束

在离散化后,x(t) 和 u(t) 变成有限维向量,约束也随之转化为代数形式。下面这张图展示了六类约束在轨迹规划问题中的位置与相互关系。

轨迹规划约束体系:六类约束的数学表达与作用域 决策变量 x(t), u(t) 等式约束 h(x,u,t) = 0 精确满足,不可偏离 不等式约束 g(x,u,t) ≤ 0 允许范围内波动 边界约束 x_min ≤ x ≤ x_max 变量上下限 动力学约束 ẋ = f(x,u,t) 物理规律不可违背 避障约束 dist(p, O) ≥ d_safe 几何安全距离 时间约束 t0 ≤ t ≤ tf 时序节奏与截止时间 六类约束共同定义可行域:等式与动力学决定“能不能走”,不等式与边界决定“能走多远”,避障与时间决定“怎么走才安全且准时”

二、六类约束的数学表达与工程含义

约束类型 典型数学形式 工程含义 常见误区
等式约束 h(x,u,t)=0 闭环关系、配点条件、归一化约束 过度使用导致自由度耗尽
不等式约束 g(x,u,t)≤0 速度上限、加速度上限、力矩饱和 忽略松弛变量导致无解
边界约束 x_min≤x≤x_max 关节限位、位置范围、控制量幅值 与不等式约束重复建模
动力学约束 ẋ=f(x,u,t) 车辆运动学、机械臂动力学 模型精度不足导致轨迹不可跟踪
避障约束 dist(p,O)≥d_safe 与障碍物保持安全距离 用点代替刚体,低估实际占用空间
时间约束 t0≤t≤tf 任务截止时间、时间同步 固定时间步长导致精度与效率矛盾

三、从连续到离散:约束的落地流程

实际求解时,连续约束需要离散化。以直接配点法为例,流程如下:

  1. 选择离散节点:将时间区间 [t0, tf] 划分为 N 段,得到节点 t0, t1, ..., tN。
  2. 变量参数化:在每个节点上定义状态 x_k 和控制 u_k,形成决策向量。
  3. 动力学离散:用梯形法或 Hermite-Simpson 法将 ẋ=f(x,u,t) 转化为节点间的代数等式。
  4. 路径约束采样:在节点或配点上施加不等式、边界和避障约束。
  5. 时间约束处理:将 tf 作为优化变量或固定值,并约束节点间距。
# 以梯形法离散动力学约束为例
for k in range(N):
    x_next = x[k] + 0.5 * dt * (f(x[k], u[k]) + f(x[k+1], u[k+1]))
    add_equality_constraint(x[k+1] - x_next == 0)

# 避障约束:对每个障碍物 O_j 和每个节点 k
for k in range(N+1):
    for j in range(num_obstacles):
        add_inequality_constraint(dist(x[k], O_j) - d_safe >= 0)
工程技巧:避障约束常用符号距离函数(SDF)表达,dist(p,O) 可替换为 sdf(p,O)。对于凸多边形障碍物,SDF 可解析计算;对于复杂障碍物,可用支撑函数或采样近似。若优化器对非光滑敏感,可将 max(0, d_safe - dist) 作为惩罚项加入目标函数,形成软约束。

四、案例:移动机器人穿越窄通道

设机器人状态为 [x, y, θ, v, ω],控制为 [a, α]。窄通道两侧墙壁为两条平行线段,障碍物为圆形。约束建模如下:

  • 动力学约束:ẋ = v cosθ, ẏ = v sinθ, θ̇ = ω, v̇ = a, ω̇ = α。
  • 边界约束:v ∈ [0, 1.5] m/s, ω ∈ [-1.0, 1.0] rad/s, a ∈ [-2, 2] m/s²。
  • 避障约束:机器人外接圆半径 r_robot=0.35 m,安全距离 d_safe=0.15 m,则 dist((x,y), O_j) ≥ 0.5 m。
  • 时间约束:总时间 tf ≤ 12 s,且每段 dt ∈ [0.05, 0.5] s。
  • 等式约束:起点和终点状态固定,x(0)=x_start, x(tf)=x_goal。

若忽略机器人外接圆半径,仅用中心点做避障,规划出的轨迹在仿真中会与墙壁发生擦碰。若把 d_safe 设得过大,通道内可行域消失,优化器返回不可行。因此,避障约束的尺度必须与机器人几何尺寸和通道宽度匹配。

常见误区:把边界约束和不等式约束混为一谈。边界约束通常直接作用于决策变量的上下限,求解器可高效处理;而不等式约束可能涉及多个变量的非线性组合,计算代价更高。能写成边界约束的,不要写成一般不等式约束。

五、约束建模的复盘要点

约束建模完成后,建议从以下四个角度复盘:

  1. 必要性:每条约束是否对应真实的物理或任务限制?删除后轨迹是否仍然可用?
  2. 一致性:约束之间是否存在冲突?例如时间约束过紧与速度边界过小可能同时导致无解。
  3. 可微性:优化器是否需要梯度?若需要,避障约束中的 dist 是否光滑?
  4. 松弛策略:是否为关键约束准备了软约束版本?当硬约束导致不可行时,能否降级求解?

约束建模不是一次性工作,而是随着场景复杂度、模型精度和求解器能力不断迭代的过程。把六类约束的数学表达写清楚、写准确,是后续实时优化能够稳定运行的前提。