Feature-Based Locomotion Controllers

论文信息: ACM SIGGRAPH 2010, Martin de Lasa, Igor Mordatch, Aaron Hertzmann, University of Toronto

Link: 项目主页


一、核心问题

1.1 研究背景

基于物理的角色动画中,创建有效、灵活且真实的运动控制器(locomotion controllers)一直是一个开放性问题。

传统方法的困境

  • 大多数方法使用关节空间(joint-space)表示
  • 控制参数化在个体关节动作层面
  • 关节动作之间高度非线性和相互依赖
  • 难以表达协调的或有风格的动作
  • 修改控制器以适应新角色、新风格需要大量重新调整

1.2 核心问题

如何设计一种控制器表示方法,使其具有

  1. 直观性 - 控制参数对应直观的高层属性
  2. 灵活性 - 易于修改风格、适应新角色
  3. 鲁棒性 - 对身体参数变化不敏感
  4. 可复用性 - 控制器可以在不同角色间迁移

1.3 现有方法及其局限性

方法类型代表工作局限性
关节空间方法PD 伺服 + 状态机动作僵硬;难以调整;需要大量手动调参
基于优化的方法轨迹优化每个新角色/控制器都需要昂贵的优化过程
运动捕捉驱动Mocap 跟踪局限于与记录数据相似的动作;难以适应扰动
零空间投影机器人操作空间控制难以处理单侧约束;复杂且受限
**二次规划 **(QP)Abe et al. 2007使用加权组合,目标之间会"打架";难以调参

1.4 本文方法

论文提出了一种基于特征(Feature-Based)的控制器设计方法:

核心思想

  • 控制用高层特征表示,如质心 (COM)、角动量 (AM)、末端执行器位置
  • 每个特征用一个目标函数控制
  • 多个目标通过优先级优化算法组合

关键创新

  1. 特征表示:用少量直观特征表达复杂运动
  2. 优先级优化:严格优先级顺序,避免目标冲突
  3. 角动量控制:新的公式,不需要显式指定压力中心 (COP)
  4. 无需动作捕捉:所有控制器都是手工设计的,不需要 mocap 或离线优化

二、核心贡献

  1. 基于特征的控制框架

    • 用高层物理特征(COM、AM、末端执行器)表达控制
    • 直观、易理解、易修改
  2. 优先级优化算法

    • 扩展了 Kanoun et al. 2009 和 de Lasa & Hertzmann 2009 的工作
    • 同时处理加权目标、严格优先级和单侧约束
    • 比加权组合更鲁棒、更易设计
  3. 三种 locomotion 控制器

    • 平衡控制器 (Balancing)
    • 站立跳跃控制器 (Standing Jump)
    • 行走控制器 (Walking)
  4. 演示多种优势

    • 自然属性自动涌现(手臂摆动、脚跟抬起、髋肩反向旋转)
    • 对身体参数变化鲁棒
    • 控制器可以迁移到完全不同拓扑的角色
    • 运行时可修改风格

三、大致方法

3.1 方法概述

┌─────────────────────────────────────────────────────────────────┐
│                  Feature-Based Control Pipeline                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  1. 定义特征 (Features)                                         │
│     - 质心 (COM)                                                │
│     - 角动量 (AM)                                               │
│     - 末端执行器 (End-effectors)                                │
│                                                                 │
│  2. 为每个特征定义目标函数 (Objectives)                          │
│     - Setpoint 目标                                             │
│     - Target 目标                                               │
│     - Angular Momentum 目标                                     │
│     - Minimum Torque 目标                                       │
│                                                                 │
│  3. 优先级优化 (Prioritized Optimization)                       │
│     ┌─────────────────────────────────────────────────────┐    │
│     │ Priority 1: E_contact (保持脚接触地面)              │    │
│     │ Priority 2: E_COM∥ (保持 COM 在支撑面上方)           │    │
│     │             E_COM⊥ (控制 COM 高度)                   │    │
│     │ Priority 3: E_AM (最小化角动量变化)                 │    │
│     │             E_pose (关节回到休息姿势)                │    │
│     │ Priority 4: ...                                      │    │
│     └─────────────────────────────────────────────────────┘    │
│                                                                 │
│  4. 求解优化问题 → 得到关节力矩 τ 和关节加速度 ¨q                  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

3.2 特征与目标函数

未知变量向量

在每一帧,控制器求解: $$x = \begin{bmatrix} \tau^T & \ddot{q}^T & \lambda^T \end{bmatrix}^T$$

  • \(\tau\): 关节力矩
  • \(\ddot{q}\): 关节加速度
  • \(\lambda\): 摩擦力锥基底权重

四种目标函数

(1) Setpoint 目标 - 保持特征在某个值

$$E(x) = ||\ddot{y}_d - \ddot{y}||^2$$

其中:

  • \(y = f(q)\) 是特征(如 COM 位置)
  • \(\ddot{y}_d = k_p(y_r - y) - k_v\dot{y}\) 是期望加速度
  • \(y_r\) 是目标值

用途:保持 COM 在脚上方、保持头部稳定等

(2) Target 目标 - 移动到远处目标

直接应用 Setpoint 目标会产生大的冲力。论文提出通过求解边界值问题来计算期望加速度:

给定:

  • 当前状态:\((y_0, \dot{y}_0)\)
  • 目标状态:\((y_T, \dot{y}_T)\)
  • 时间:\(T\)

求解常数 \(a, b\) 使得: $$\ddot{y}_d(t) = \left(1-\frac{t}{T}\right)a + \frac{t}{T}b$$

通过积分得到线性系统: $$\begin{bmatrix} T^2/3 & T^2/6 \ T/2 & T/2 \end{bmatrix} \begin{bmatrix} a \ b \end{bmatrix} = \begin{bmatrix} y_T - y_0 - \dot{y}_0 T \ \dot{y}_T + \dot{y}_0 \end{bmatrix}$$

用途:跳跃时 COM 高度控制、行走时脚在落脚点间移动

(3) Angular Momentum 目标 - 控制角动量

$$E_{AM}(x) = ||\dot{L}_d - \dot{L}||^2$$

$$\dot{L}_d = k_p(L_r - L)$$

  • \(L_r\): 参考角动量(平衡/行走时设为 0)
  • \(L = P J \dot{q}\): 关于 COM 的角动量

创新点

  • 不需要指定压力中心 (COP)
  • 不依赖接触力知识
  • 适用于平衡、跳跃、行走

(4) Minimum Torque 目标 - 最小化关节力矩

$$E_{\tau}(x) = ||\tau||^2 = ||\begin{bmatrix} S & 0 \ 0 & I \end{bmatrix} x||^2$$

  • \(S\): 选择矩阵(对角为 1 的关节是被动的)

用途:行走时让手臂自然摆动(最小化肩/肘力矩)

3.3 优先级优化

问题:加权组合的缺陷

传统方法使用加权组合: $$E(x) = \sum_i \alpha_i E_i(x)$$

问题

  • 不同目标会"打架"
  • 调参困难
  • 数值敏感

解决方案:优先级优化

给定有序目标列表 \(E_1, E_2, ..., E_N\),递归定义为:

$$h_i = \min_x E_i(x)$$ $$\text{subject to } E_k(x) = h_k, \forall k < i$$ $$C(x) = 0, Dx + f \geq 0$$

含义

  • 第一步:\(\min E_1(x)\),受动力学约束
  • 第二步:\(\min E_2(x)\),受\(E_1(x) = h_1\)约束
  • 依此类推...

高效求解算法

关键观察:二次最优解位于线性子空间上

方法 1:线性约束法 (Kanoun et al. 2009)

  • 将 \(E_k(x) = h_k\) 转换为线性约束 \(A_k(x - x^*_k) = 0\)
  • 用 N 个 QP 递归求解
  • 缺点:约束数量增加导致数值不稳定

方法 2:重参数化法 (本文采用)

对于 \(E_1(x) = ||A_1 x - b_1||^2\),最优解空间参数化为: $$x(w) = C_1 w + d_1$$

  • \(C_1 = \text{null}(A_1)\):零空间基底(通过 SVD 计算)
  • \(d_1\): 满足约束的任意最小解(通过 QP 求解)

然后第二个目标重参数化为: $$E_2(w) = ||A_2 C_1 w + A_2 d_1 - b_2||^2$$

求解第二个 QP: $$d_2 = \arg\min_w E_2(w)$$ $$\text{subject to } D C_1 w + D d_1 + f \geq 0$$

最终解:\(x^* = C_1 d_2 + d_1\)

完整算法

Algorithm 1: Constrained Quadratic Prioritized Solver

输入:N 个目标 (A_i, b_i),约束 (C, D, f)
输出:最优解 x*

1: C̄ ← I, d̄ ← 0
2: for i = 1 to N do
3:   Ā_i ← A_i C̄
4:   b̄_i ← b_i - A_i d̄
5:   d_i ← argmin_w ||Ā_i w - b̄_i||²
6:        subject to D' C̄ w + D' d̄ + f' ≥ 0
7:   if 问题不可行 then
8:     return d̄
9:   end
10:  d̄ ← d̄ + C̄ d_i
11:  if Ā_i 满秩 then
12:    return d̄
13:  end
14:  C̄ ← C̄ null(Ā_i)
15: end
16: return d̄

四、训练(控制器设计)

4.1 平衡控制器

目标优先级

优先级目标作用
1\(E_{contact}\)保持脚接触地面
2\(E_{COM|}\)保持 COM 在支撑面上方
\(E_{COM\perp}\)控制 COM 高度
3\(E_{AM}\)最小化角动量变化
\(E_{pose}\)关节伺服到休息姿势
\(E_{ankle}\)踝关节相对 COM 控制(跳跃时用)

设计细节

优先级 1:脚接触

  • Setpoint 目标
  • 目标值:脚底点投影到地面

优先级 2:线性动量调节

  • \(E_{COM|}\): COM 水平分量 → BOS 质心
  • \(E_{COM\perp}\): COM 垂直分量 → 80% 最大 COM 高度

优先级 3:剩余冗余

  • \(E_{AM}\): 阻尼不需要的旋转
  • \(E_{pose}\): 中性姿势(膝盖微弯)

4.2 跳跃控制器

状态机

STAND → COMPRESS → THRUST → ASCENT → DESCENT → IMPACT → STAND

各阶段动作

状态COM 控制接触目标踝关节目标
STAND站立高度启用禁用
COMPRESS降低(蹲下)启用禁用
THRUST快速升高启用禁用
ASCENT禁用禁用启用(固定相对 COM)
DESCENT禁用禁用启用(匹配地面斜率)
IMPACT重新启用重新启用禁用

跳跃变体

(1) 扭转跳跃

  • 在 THRUST 阶段指定非零垂直角动量
  • \(L_r \neq 0\) 产生旋转

(2) 空中踢腿/劈叉

  • 在飞行阶段改变 \(y_{ankle}^r\)
  • 围绕用户指定轴旋转踝偏移

(3) 向前跳跃

  • THRUST 阶段在行进方向命令小的 COM 位移
  • 飞行阶段修改踝轨迹准备落地

4.3 行走控制器

状态依赖目标

脚控制状态机

每只脚:SWING → PLANT → SUPPORT → HEELOFF → SWING...

脚控制目标

  • 接触状态 (PLANT, SUPPORT, HEELOFF): \(E_{contact}\)

    • 脚的前/后/四个角保持接触
  • 摆动状态 (SWING): \(E_{swing}\) (Target 目标)

    • 抬脚到步高\(h\),然后向前移动
    • 脚跟和脚趾分别控制

摆动脚目标位置: $$y_{swing|}^r = y_{stance} - 2\alpha l_{hip} d_{\perp} + l_{step} d_{|}$$

  • \(l_{step}\): 步长
  • \(l_{hip}\): 髋部移动
  • \(d_{|}\): 行进方向
  • \(d_{\perp}\): 垂直方向

COM 控制

COM 沿正弦路径前进: $$y_{COM|}^r(\phi) = \phi p_1 + (1-\phi)p_0 + \alpha l_{hip}\sin(\pi\phi)d_{\perp}$$

  • \(\phi \in [0,1]\): 相位变量
  • \(p_0, p_1\): 初始和目标位置

同步机制

  • COM 轨迹持续时间 = 上一摆动相持续时间
  • 简单的反馈机制鼓励稳定极限环

状态独立目标

优先级目标任务
1\(E_{contact}\)保持支撑脚接触
2\(E_{COM|}\)COM 平行地面移动
\(E_{trunk|}\)控制颈部相对 COM 位置
3\(E_{swing}\)控制摆动脚
\(E_{AM}\)阻尼角动量
\(E_{pose}\)关节伺服到休息姿势
\(E_{arms}\)最小化手臂力矩
\(E_{head}\)稳定头部方向

行走参数(可运行时调整):

参数符号范围
摆动持续时间\(T\)0.3 - 0.7 s
步长\(l_{step}\)0 - 0.7 m
步高\(h\)0 - 0.1 m
脚间距\(l_{foot}\)0 - 0.03 m
摆动延迟\(\Delta T\)0 - 0.3 s
髋部移动\(l_{hip}\)0 - 0.3 m
COM 偏移\(l_{trunk}\)±0.3 m
头部方向\(q_{head}\)±180°

4.4 动力学约束

等式约束

运动方程: $$M(q)\ddot{q} + h(q, \dot{q}) = \tau + J_c^T f_c$$

  • \(M\): 关节空间惯量矩阵
  • \(h\): Coriolis/离心力和重力
  • \(J_c\): 接触力雅可比
  • \(f_c = V\lambda\): 摩擦力锥基底表示的接触力

整理得到: $$C(x) = \begin{bmatrix} I & -M & J_c^T V \end{bmatrix} x - h = 0$$

不等式约束

地面接触

  • 接触力必须严格排斥
  • 尊重摩擦约束
  • 使用非穿透约束(比零加速度约束更稳定)

$$\lambda \geq 0$$ $$a_c = V^T J_c \ddot{q} + V^T \dot{J}_c \dot{q} + \dot{V}^T J_c \dot{q} \geq 0$$

关节限制

  • 当关节到达限制时添加额外约束
  • 防止不自然姿势

力矩限制: $$-\tau_{max} \leq \tau \leq \tau_{max}$$


五、实验与结论

5.1 实现细节

  • 模拟器: Featherstone 算法 + 半隐式积分
  • 地面接触: 非弹性脉冲模型,摩擦系数μ=1
  • 性能: Dual Core 3GHz Xeon, 4GB RAM, 50-100% 实时
  • 角色: 35 DOF, 北美男性 50 百分位

5.2 结果展示

平衡与跳跃

  • 从平衡控制器到跳跃控制器只需简单修改
  • 仅改变 3 个参数(蹲下深度、推力时间、参考角动量)
  • 控制器对骨骼属性变化鲁棒
  • 着陆一致性好

行走风格

风格示例

  • 快走、慢走
  • "悲伤"行走:手放口袋、头前倾、身体前倾、膝盖弯曲

风格修改的便捷性

  • 直接调整参数(表 2)
  • 特征解耦:如躯干倾斜角不直接影响速度
  • 可以运行时修改

身体形状变化

实验

  1. 肢体放大 2 倍:质量、惯量相应缩放 → 控制器仍然工作
  2. 不同拓扑角色:婴儿、鸵鸟、恐龙 → 控制器无需修改

关键:特征独立于角色拓扑(除了休息姿势)

5.3 优先级优化 vs 加权优化

方面优先级优化加权优化
鲁棒性高(外部扰动下更稳定)低(目标会"打架")
设计难度易(分层设计)难(需要精细调参)
数值稳定性需要双精度单精度即可
计算速度慢(需要 QP + SVD)
实现复杂度

实验观察

  • 用加权优化无法生成跳跃动作(数值敏感、不可行)
  • 行走控制器用加权优化时,手臂会"乱挥"
  • 优先级优化下,跟踪误差被限制在高优先级目标

六、局限性

  1. 某些动作难以生成

    • 需要大幅矢状面惯性变化的动作(如侧手翻、后空翻)
    • 当前目标/优先级组合不足以表达
  2. 步行脚放置策略有限

    • 运行时修改髋移、摆动时间、步长需要协调
    • 必须确保 COM 足够靠近支撑脚
    • 控制器对扰动的鲁棒性有限(因为轨迹在世界坐标定义)
  3. 计算成本

    • 优先级优化比加权优化慢
    • 每个优先级需要求解 QP + SVD
    • 需要双精度算术保证数值稳定
  4. 实现复杂度

    • 比加权优化更复杂
    • 需要处理零空间计算、SVD 分解
  5. 约束切换敏感

    • 接触点数量快速变化时可能产生噪声力矩
    • 雅可比矩阵可能秩亏(机器精度级别)

七、启发

7.1 方法学启发

  1. 特征空间表示的优势

    • 提供控制设计的抽象层
    • 解耦不同控制目标
    • 使推理运动更直观
  2. 优先级优化的设计哲学

    • 分层设计:先保证基础(平衡),再添加细节(风格)
    • 避免目标冲突
    • 类似人类运动控制的"最小干预原理"
  3. 角动量控制的新公式

    • 不需要 COP 轨迹
    • 适用于多种运动模式
    • 简化了实现

7.2 工程实践启发

  1. 无需动作捕捉或优化

    • 所有控制器手工设计
    • 降低了数据依赖
    • 更易于理解和修改
  2. 参数直观性

    • 参数对应物理量(如 COM 高度、步长)
    • 调参过程更直观
    • 风格可以在运行时修改
  3. 角色迁移能力

    • 特征独立于拓扑
    • 同一控制器可用于不同角色
    • 自动计算雅可比和目标项

7.3 与后续工作的联系

  • 本文是 Mordatch et al. 2010 "Robust Physics-Based Locomotion" 的基础
  • 后续的 AMP、ASE 等工作采用数据驱动方法,但控制层次化思想一脉相承
  • 优先级优化思想在机器人领域广泛应用

八、遗留问题

8.1 开放性问题

  1. 更复杂的动作

    • 如何生成侧手翻、后空翻等需要大幅惯性变化的动作?
    • 需要什么样的额外特征/目标?
  2. 更鲁棒的脚放置

    • 如何设计对扰动更鲁棒的脚放置策略?
    • 是否需要在线规划?
  3. 自动优先级学习

    • 优先级顺序能否从数据中学习?
    • 能否自动发现合适的特征?
  4. 与数据驱动方法结合

    • 如何将特征空间方法与 mocap 数据结合?
    • 能否学习特征目标函数?
  5. 实时应用

    • 如何加速优先级优化以满足实时要求?
    • 能否用近似方法?

8.2 未来方向

论文提到后续工作:

  • Mordatch et al. 2010: 提出规划策略解决脚放置问题
  • 扩展到更多运动类型(投掷、操作物体)
  • 结合学习和优化

九、关键公式总结

公式含义
\(E_{setpoint} =
\(\ddot{y}_d = k_p(y_r - y) - k_v\dot{y}\)PD 控制律
\(E_{AM} =
\(h_i = \min_x E_i(x)\) s.t. \(E_k(x)=h_k\)优先级优化
\(x(w) = C_1 w + d_1\)重参数化

十、代码与资源

  • 项目主页: http://www.dgp.toronto.edu/~mdelasa/feature
  • 视频: 项目主页提供演示视频(平衡、跳跃、行走、不同风格、不同角色)
  • 代码: 未公开

笔记说明:本文是基于物理的角色控制领域的经典工作,提出了基于特征的控制框架。理解本文有助于学习后续的 Physics-Based Character Control 方法,特别是理解控制层次化、优先级优化等核心概念。与 ASE、AMP 等数据驱动方法相比,本文代表了手工设计控制器的巅峰。