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.3 现有方法及其局限性
| 方法类型 | 代表工作 | 局限性 |
|---|---|---|
| 关节空间方法 | PD 伺服 + 状态机 | 动作僵硬;难以调整;需要大量手动调参 |
| 基于优化的方法 | 轨迹优化 | 每个新角色/控制器都需要昂贵的优化过程 |
| 运动捕捉驱动 | Mocap 跟踪 | 局限于与记录数据相似的动作;难以适应扰动 |
| 零空间投影 | 机器人操作空间控制 | 难以处理单侧约束;复杂且受限 |
| **二次规划 **(QP) | Abe et al. 2007 | 使用加权组合,目标之间会"打架";难以调参 |
1.4 本文方法
论文提出了一种基于特征(Feature-Based)的控制器设计方法:
核心思想:
- 控制用高层特征表示,如质心 (COM)、角动量 (AM)、末端执行器位置
- 每个特征用一个目标函数控制
- 多个目标通过优先级优化算法组合
关键创新:
- 特征表示:用少量直观特征表达复杂运动
- 优先级优化:严格优先级顺序,避免目标冲突
- 角动量控制:新的公式,不需要显式指定压力中心 (COP)
- 无需动作捕捉:所有控制器都是手工设计的,不需要 mocap 或离线优化
二、核心贡献
-
基于特征的控制框架
- 用高层物理特征(COM、AM、末端执行器)表达控制
- 直观、易理解、易修改
-
优先级优化算法
- 扩展了 Kanoun et al. 2009 和 de Lasa & Hertzmann 2009 的工作
- 同时处理加权目标、严格优先级和单侧约束
- 比加权组合更鲁棒、更易设计
-
三种 locomotion 控制器
- 平衡控制器 (Balancing)
- 站立跳跃控制器 (Standing Jump)
- 行走控制器 (Walking)
-
演示多种优势
- 自然属性自动涌现(手臂摆动、脚跟抬起、髋肩反向旋转)
- 对身体参数变化鲁棒
- 控制器可以迁移到完全不同拓扑的角色
- 运行时可修改风格
三、大致方法
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)
- 特征解耦:如躯干倾斜角不直接影响速度
- 可以运行时修改
身体形状变化
实验:
- 肢体放大 2 倍:质量、惯量相应缩放 → 控制器仍然工作
- 不同拓扑角色:婴儿、鸵鸟、恐龙 → 控制器无需修改
关键:特征独立于角色拓扑(除了休息姿势)
5.3 优先级优化 vs 加权优化
| 方面 | 优先级优化 | 加权优化 |
|---|---|---|
| 鲁棒性 | 高(外部扰动下更稳定) | 低(目标会"打架") |
| 设计难度 | 易(分层设计) | 难(需要精细调参) |
| 数值稳定性 | 需要双精度 | 单精度即可 |
| 计算速度 | 慢(需要 QP + SVD) | 快 |
| 实现复杂度 | 高 | 低 |
实验观察:
- 用加权优化无法生成跳跃动作(数值敏感、不可行)
- 行走控制器用加权优化时,手臂会"乱挥"
- 优先级优化下,跟踪误差被限制在高优先级目标
六、局限性
-
某些动作难以生成
- 需要大幅矢状面惯性变化的动作(如侧手翻、后空翻)
- 当前目标/优先级组合不足以表达
-
步行脚放置策略有限
- 运行时修改髋移、摆动时间、步长需要协调
- 必须确保 COM 足够靠近支撑脚
- 控制器对扰动的鲁棒性有限(因为轨迹在世界坐标定义)
-
计算成本
- 优先级优化比加权优化慢
- 每个优先级需要求解 QP + SVD
- 需要双精度算术保证数值稳定
-
实现复杂度
- 比加权优化更复杂
- 需要处理零空间计算、SVD 分解
-
约束切换敏感
- 接触点数量快速变化时可能产生噪声力矩
- 雅可比矩阵可能秩亏(机器精度级别)
七、启发
7.1 方法学启发
-
特征空间表示的优势
- 提供控制设计的抽象层
- 解耦不同控制目标
- 使推理运动更直观
-
优先级优化的设计哲学
- 分层设计:先保证基础(平衡),再添加细节(风格)
- 避免目标冲突
- 类似人类运动控制的"最小干预原理"
-
角动量控制的新公式
- 不需要 COP 轨迹
- 适用于多种运动模式
- 简化了实现
7.2 工程实践启发
-
无需动作捕捉或优化
- 所有控制器手工设计
- 降低了数据依赖
- 更易于理解和修改
-
参数直观性
- 参数对应物理量(如 COM 高度、步长)
- 调参过程更直观
- 风格可以在运行时修改
-
角色迁移能力
- 特征独立于拓扑
- 同一控制器可用于不同角色
- 自动计算雅可比和目标项
7.3 与后续工作的联系
- 本文是 Mordatch et al. 2010 "Robust Physics-Based Locomotion" 的基础
- 后续的 AMP、ASE 等工作采用数据驱动方法,但控制层次化思想一脉相承
- 优先级优化思想在机器人领域广泛应用
八、遗留问题
8.1 开放性问题
-
更复杂的动作
- 如何生成侧手翻、后空翻等需要大幅惯性变化的动作?
- 需要什么样的额外特征/目标?
-
更鲁棒的脚放置
- 如何设计对扰动更鲁棒的脚放置策略?
- 是否需要在线规划?
-
自动优先级学习
- 优先级顺序能否从数据中学习?
- 能否自动发现合适的特征?
-
与数据驱动方法结合
- 如何将特征空间方法与 mocap 数据结合?
- 能否学习特征目标函数?
-
实时应用
- 如何加速优先级优化以满足实时要求?
- 能否用近似方法?
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 等数据驱动方法相比,本文代表了手工设计控制器的巅峰。