DeepLoco: Dynamic Locomotion Skills Using Hierarchical Deep Reinforcement Learning

DeepLoco:使用分层深度强化学习的动态移动技能

论文详解文档


目录

  1. 基本信息
  2. 核心问题:这篇论文要解决什么问题?
  3. 基础知识铺垫
  4. [DeepLoco 方法的核心思想](#4-deeploco 方法的核心思想)
  5. 技术细节详解
  6. 实验结果
  7. 总结与启发

1. 基本信息

项目内容
论文标题DeepLoco: Dynamic Locomotion Skills Using Hierarchical Deep Reinforcement Learning
中文译名DeepLoco:使用分层深度强化学习的动态移动技能
发表会议ACM Transactions on Graphics (TOG) 2017 (SIGGRAPH)
作者单位英属哥伦比亚大学、新加坡国立大学
主要作者Xue Bin Peng, Glen Berseth, KangKang Yin, Michiel van de Panne

2. 核心问题:这篇论文要解决什么问题?

2.1 背景故事

想象一下你想让一个 3D 虚拟角色(比如游戏里的人物)在复杂的环境中行走:

  • 需要沿着一条弯弯曲曲的小路走
  • 需要绕过障碍物
  • 需要一边走路一边踢足球
  • 需要在有移动障碍物的环境中穿行

问题:如何让角色学会这些复杂的移动技能?

2.2 现有方法的局限性

方法 A:有限状态机 (FSM) + 反馈控制

传统方法:人工设计状态机
- 状态 1:抬腿
- 状态 2:向前迈步
- 状态 3:放下腿
- ...

局限性:
- 需要大量人工设计
- 不够灵活,遇到新情况就失效
- 动作看起来比较僵硬

方法 B:纯强化学习(端到端)

让 AI 自己从零开始学

局限性:
- 3D 双足行走本身就很难学
- 直接学复杂任务(如绕障碍 + 踢球)几乎不可能
- 学习速度慢,容易失败

2.3 DeepLoco 的解决方案

核心思想:分层控制

┌─────────────────────────────────────┐
│      高层控制器 (HLC)                │
│      High-Level Controller           │
│      频率:2Hz(每 0.5 秒决策一次)       │
│      任务:规划步法、导航             │
└──────────────┬──────────────────────┘
               │ 输出:步法计划
               ▼
┌─────────────────────────────────────┐
│      低层控制器 (LLC)                │
│      Low-Level Controller            │
│      频率:30Hz(每 0.033 秒执行一次)  │
│      任务:保持平衡、执行动作         │
└──────────────┬──────────────────────┘
               │ 输出:关节角度
               ▼
         ┌─────────────┐
         │   角色模型   │
         └─────────────┘

为什么分层?

  • 高层:像人的"大脑",负责想"我要往哪走"
  • 低层:像人的"小脑",负责想"怎么保持平衡迈腿"

2.4 这篇论文的贡献

  1. 环境感知的 3D 双足行走:角色可以看着地形图来决定怎么走
  2. 多种行走风格:可以学习正常走、高抬腿走、弯腿走等多种风格
  3. 强大的鲁棒性:可以承受一定的外力推挤、上下坡
  4. 复杂任务能力:学会踢足球、绕障碍等复杂技能

3. 基础知识铺垫

3.1 强化学习 (Reinforcement Learning) 基础

强化学习就像训练小狗:

状态 (State) → 动作 (Action) → 奖励 (Reward)

比如训练小狗捡球:
- 状态:球在哪里,小狗在哪里
- 动作:跑、跳、咬
- 奖励:捡到球 +1 分,摔倒 -1 分

目标:学会最大化奖励的动作

3.2 策略梯度 (Policy Gradient)

策略 π:状态 → 动作的映射规则

策略梯度方法:
- 让角色尝试各种动作
- 如果某个动作带来好结果,就增加这种动作的概率
- 如果带来坏结果,就减少这种动作的概率

3.3 Actor-Critic 方法

Actor (演员):负责做动作
Critic (评论家):负责评价动作好不好

工作流程:
1. Actor 做一个动作
2. Critic 评价这个动作值多少分
3. 如果评价好,强化这个动作;否则弱化

3.4 CACLA 算法

论文用的是 CACLA 算法的改进版本:

CACLA (Continuous Actor-Critic Learning Automaton)

核心思想:
- 只有当动作带来"比预期更好"的结果时,才学习
- 用"时间差分"来评估好坏

公式:
δ = r + γV(s') - V(s)

如果 δ > 0:说明动作比预期好,学习它!
如果 δ ≤ 0:说明动作不如预期,不学习

4. DeepLoco 方法的核心思想

4.1 整体架构

┌──────────────────────────────────────────────────────┐
│                    DeepLoco 系统                      │
├──────────────────────────────────────────────────────┤
│                                                      │
│  输入:地形图 + 角色状态 + 任务目标                      │
│          ↓                                           │
│  ┌─────────────────┐                                 │
│  │   高层控制器    │ 2Hz                             │
│  │     (HLC)       │ 输出:下一步踩哪里                  │
│  └────────┬────────┘                                 │
│           ↓                                          │
│  ┌─────────────────┐                                 │
│  │   低层控制器    │ 30Hz                            │
│  │     (LLC)       │ 输出:关节角度                    │
│  └────────┬────────┘                                 │
│           ↓                                          │
│  ┌─────────────────┐                                 │
│  │   物理模拟      │ 3000Hz                          │
│  └─────────────────┘                                 │
│                                                      │
└──────────────────────────────────────────────────────┘

4.2 为什么这样设计?

时间尺度分离

控制器频率时间尺度负责什么
HLC2Hz0.5 秒规划步法(像下棋,一步一想)
LLC30Hz0.033 秒执行动作(像反射,快速响应)
物理3000Hz0.00033 秒物理计算(保证稳定性)

好处

1. 高层可以专注"大局":往哪走、绕什么路
2. 低层可以专注"细节":怎么迈步、怎么平衡
3. 同一个低层控制器可以被多个高层任务复用
4. 学习更高效:高低层分开学,比一起学容易

5. 技术细节详解

5.1 低层控制器 (LLC) 详解

LLC 的职责

协调关节运动,模仿参考动作的风格,同时满足步法目标并保持平衡

LLC 的输入(状态空间,110 维)

┌────────────────────────────────────────┐
│          LLC 输入状态 s_L               │
├────────────────────────────────────────┤
│ • 身体各部位位置(相对于骨盆)            │
│ • 身体各部位旋转(四元数)               │
│ • 身体各部位线速度                      │
│ • 身体各部位角速度                      │
│ • 双脚接触地面标志(1=接触,0=悬空)     │
│ • 相位变量 φ ∈ [0,1](表示步态周期)    │
└────────────────────────────────────────┘

总维度:110 维

相位变量是什么?

相位变量 φ 用来跟踪"现在走到哪一步了"

一个完整的步态周期 = 1 秒
- φ = 0.0:左脚刚落地
- φ = 0.25:左脚支撑中期
- φ = 0.5:右脚刚落地
- φ = 0.75:右脚支撑中期
- φ = 1.0:回到左脚落地

作用:让控制器知道"现在应该做什么"

LLC 的目标(步法计划)

LLC 目标 g_L = (p̂₀, p̂₁, θ̂_root)

p̂₀:下一步的目标位置(2D)
p̂₁:下下一步的目标位置(2D)
θ̂_root:身体的目标朝向

为什么是两个步子?
- 研究证明"两步就够了"(Zaytsev et al. 2015)
- 只看一步:太短视
- 看三步以上:计算太复杂,收益不大

LLC 的输出(动作空间,22 维)

LLC 动作 a_L = 每个关节的 PD 目标角度

角色模型:
- 每条腿:3 个关节(髋、膝、踝)
- 髋关节:3 自由度(球窝关节)
- 膝关节:1 自由度
- 踝关节:3 自由度
- 腰部:3 自由度

总关节自由度:22 个

输出:每个关节的目标角度(轴角表示,4 维)

5.2 参考动作 (Reference Motion)

什么是参考动作?

参考动作是"样本动作",告诉 LLC"应该是什么风格"

可以是:
1. 手工 keyframe 动画(一个简单的走路循环)
2. 动作捕捉数据(真人走路的录像)

DeepLoco 用了:
- 1 个手工制作的平面走路循环
- 10 个动作捕捉片段(约 7 秒的走路和转身数据)

如何使用参考动作?

LLC 不需要精确跟踪参考动作,只需要"模仿风格"

比如参考动作是"军人走路":
- LLC 学会"抬头挺胸、步伐有力"的风格
- 但可以根据需要调整步幅、方向

这样做的好处:
- 灵活:可以适应不同的步法目标
- 鲁棒:参考动作不完美也没关系

动作选择机制

当有多个参考动作时(比如左转、右转、直行):

1. 提取每个动作的特征:
   ψ(q̂ⱼ) = (支撑脚位置,摆动脚位置,身体朝向)

2. 根据当前目标和状态,选择最匹配的动作:
   K(s, g_L) = argmin ||ψ(s, g_L) - ψ(q̂ⱼ)||

3. 选中的动作用来指导这一步的奖励函数

5.3 LLC 奖励函数

奖励函数告诉 LLC"什么是好的行为":

r_L = w_pose·r_pose + w_vel·r_vel + w_root·r_root
    + w_com·r_com + w_end·r_end + w_heading·r_heading

权重:(0.5, 0.05, 0.1, 0.1, 0.2, 0.1)

各项奖励含义

奖励项含义作用
r_pose姿势奖励关节角度接近参考动作
r_vel速度奖励关节速度接近参考动作
r_root骨盆高度奖励保持合适的身体高度
r_com质心速度奖励保持合适的移动速度
r_end落脚点奖励脚落在目标位置
r_heading朝向奖励身体朝向正确方向

姿势奖励公式

r_pose = exp(-Σᵢ wᵢ·d(q̂ᵢ(t), qᵢ)²)

d(·,·):计算两个四元数的距离
wᵢ:每个关节的权重

含义:
- 实际姿势 qᵢ 越接近参考姿势 q̂ᵢ,奖励越高
- exp 函数确保奖励在 [0,1] 范围内
- 距离为 0 时,奖励 = 1(完美)
- 距离越大,奖励越接近 0

5.4 双线性相位变换 (Bilinear Phase Transform)

问题

只用一个标量相位 φ 有什么问题?

实验发现:
- 网络不能很好地区分不同的相位
- 导致"拖脚"现象(脚没有抬够高)

为什么?
- 单个数值 φ 对神经网络来说不够明显
- 网络不容易学会"不同相位做不同事"

解决方案:双线性相位变换

1. 把相位 φ 分成 4 个区间:
   Φ₀ = 1 当 0 ≤ φ < 0.25
   Φ₁ = 1 当 0.25 ≤ φ < 0.5
   Φ₂ = 1 当 0.5 ≤ φ < 0.75
   Φ₃ = 1 当 0.75 ≤ φ < 1

2. 计算外积:
   [s_L]           [s_L]       [s_L]       [s_L]       [s_L]
   [g_L] × Φ = [Φ₀·g_L], [Φ₁·g_L], [Φ₂·g_L], [Φ₃·g_L]

效果

变换后的特征:
- 只有当前相位对应的特征块是"激活"的
- 其他特征块都是 0

好处:
- 强制网络在不同相位使用不同的"子网络"
- 相当于给网络植入了"不同阶段做不同事"的先验
- 显著改善步态质量,减少拖脚现象

5.5 LLC 网络结构

LLC 神经网络:

输入层:s_L + g_L (状态 + 目标)
         ↓
第 1 层:双线性相位变换 → 特征维度扩展
         ↓
第 2 层:全连接层,512 单元,ReLU 激活
         ↓
第 3 层:全连接层,256 单元,ReLU 激活
         ↓
输出层:线性层 → 动作均值 μ(s_L, g_L)

参数量:约 50 万

5.6 风格修改 (Style Modification)

通过在奖励函数中添加风格项,可以让 LLC 学会不同的行走风格:

风格奖励通用公式

r_pose = exp(-Σᵢ wᵢ·d(q̂ᵢ(t), qᵢ)² - w_style·c_style)

c_style:风格项
w_style:风格权重(控制"像参考动作"vs"满足风格"的平衡)

支持的风格

风格风格项 c_style效果
前倾行走d(q̂_waist, q_waist)²身体向前倾斜
侧倾行走d(q̂_waist, q_waist)²身体向侧面倾斜
直腿行走d(q_I, q_knee)²膝盖不弯曲
高抬腿(ĥ_knee - h_knee)²抬腿更高
原地行走使用原地点参考动作在原地踏步

风格插值

如果有两个风格的 LLC:π_La 和 π_Lb

可以线性插值得到新风格:
π_Lc(s, g) = (1-u)·π_La(s, g) + u·π_Lb(s, g)

u ∈ [0, 1]:插值系数
- u = 0:纯风格 a
- u = 0.5:a 和 b 的中间风格
- u = 1:纯风格 b

效果:可以在不同风格之间平滑过渡

5.7 高层控制器 (HLC) 详解

HLC 的职责

提供中间目标给 LLC,以实现高层任务目标(如导航、避障、踢球)

HLC 的输入(状态空间,1129 维)

┌────────────────────────────────────────┐
│          HLC 输入状态 s_H                │
├────────────────────────────────────────┤
│ 身体特征 C (类似 LLC 状态,但没有相位和接触标志) │
│ 地形特征 T (32×32 高度图)                   │
│ 任务目标 g_H                              │
└────────────────────────────────────────┘

地形图:
- 分辨率:32×32
- 覆盖范围:约 11m×11m
- 向前延伸 10m,向后延伸 1m
- 高度值相对于角色当前位置

地形图示例

角色看到的"高度图"就像这样(俯视):

    ← 11m →
  ┌─────────┐ ↑
  │ ░░░▓▓░░░│ │
  │ ░░▓▓▓▓░░│ 11m
  │ ░░░▓▓░░░│ │
  │ ░░░░▒░░░│ ↓
  └─────────┘
  
图例:
░ = 平地
▓ = 障碍物(高)
▒ = 路径(目标方向)

HLC 的输出

HLC 动作 a_H = LLC 目标 g_L = (p̂₀, p̂₁, θ̂_root)

即:HLC 决定"下一步踩哪里",LLC 负责"怎么走到那里"

5.8 HLC 网络结构

HLC 卷积神经网络:

输入:
- 地形图 T:32×32
- 身体特征 C
- 任务目标 g_H
         ↓
卷积层 1:16 个 5×5 滤波器
         ↓
卷积层 2:32 个 4×4 滤波器
         ↓
卷积层 3:32 个 3×3 滤波器
         ↓
全连接层:128 单元
         ↓
拼接:[地形特征,C, g_H]
         ↓
全连接层 1:512 单元,ReLU
         ↓
全连接层 2:256 单元,ReLU
         ↓
输出层:线性层 → 动作 a_H

参数量:约 250 万

5.9 HLC 任务

任务 1:路径跟随 (Path Following)

目标:沿着岩石地形上的狭窄路径行走

环境:
- 路径宽度:1-2 米
- 地形用 Perlin 噪声生成
- 目标点随机出现在路径上

输入:
- 地形图(可以看到路径)
- 到目标的方向和距离

奖励:
r_H = exp(-min(0, u_tar·v_com - v̂_com)²)

含义:鼓励角色以至少 1m/s 的速度向目标移动

任务 2:足球运球 (Soccer Dribbling)

目标:把足球带到目标位置

挑战:
- 需要先走到球旁边
- 然后用脚控制球向目标移动
- 到达目标后要"停球"

输入(15 维):
- 目标方向/距离
- 球的方向/距离/高度/速度/角速度
- (没有地形图,因为是平地)

奖励:
r_H = 0.17·r_cv + 0.17·r_cp + 0.33·r_bv + 0.33·r_bp

各项含义:
- r_cv:角色走向球
- r_cp:角色靠近球
- r_bv:球向目标移动
- r_bp:球靠近目标

任务 3:柱子障碍 (Pillar Obstacles)

目标:穿过密集的柱子障碍物到达目标

环境:
- 障碍物:0.75m×0.75m 底座,高 2-8 米
- 随机放置
- 有很多可能的路径

奖励:同路径跟随

任务 4:方块障碍 (Block Obstacles)

目标:绕过大方块障碍物到达目标

环境:
- 障碍物:0.5m-7m 的方块
- 需要找到可行的路径

奖励:同路径跟随

任务 5:动态障碍 (Dynamic Obstacles)

目标:在移动障碍物中穿行到达目标

环境:
- 障碍物以 0.2-1.3 m/s 的速度来回移动
- 角色最大速度约 1 m/s
- 环境动态变化

输入:
- 速度图(而不是高度图)
- 每个点记录障碍物的 2D 速度

奖励:同路径跟随

5.10 训练策略

分层训练流程

Step 1:训练 LLC
- 固定步法目标(随机生成)
- 学习走路和保持平衡
- 训练约 600 万次迭代(2 天,16 核 CPU)

Step 2:训练 HLC
- 冻结 LLC 权重(不再更新)
- 学习给 LLC 下达正确的步法指令
- 训练约 100 万次迭代(7 天,CPU)

为什么分开训练?
- LLC 先学会"怎么走"
- HLC 再学会"往哪走"
- 同一个 LLC 可以被多个 HLC 复用

训练超参数

参数LLCHLC
批次大小 m3232
经验回放大小50k50k
学习率(Critic)0.010.01
学习率(Actor)0.0010.001
折扣因子 γ0.950.95
探索率 ε1→0.21→0.5
探索衰减1M 迭代200k 迭代

经验回放 (Experience Replay)

记录角色经历过的每一步:
τ = (s, g, a, r, s', λ)

s:开始状态
g:目标
a:动作
r:奖励
s':结束状态
λ:是否加了探索噪声

训练时:
- 从回放内存中随机采样 32 个经验
- 用这些经验更新网络
- 好处:打破数据相关性,提高样本效率

5.11 鲁棒性分析

抗干扰能力

LLC 风格向前推向侧推上坡下坡
正常行走200N210N16% (9.1°)11% (6.3°)
高抬腿140N190N9% (5.1°)5% (2.9°)
直腿150N180N12% (6.8°)6% (3.4°)
双腿直90N130N9% (5.1°)5% (2.9°)
前倾180N290N10% (5.7°)16% (9.1°)
侧倾160N220N7% (4.0°)16% (9.1°)
测试方法:
- 角色走路时,在躯干中点施加 0.25 秒的推力
- 逐渐增加推力直到角色摔倒

观察:
- 正常行走最鲁棒
- 直腿行走较不稳定(符合直觉)
- 前倾/侧倾对侧推有更好的抵抗力

为什么有鲁棒性?

原因:训练时的探索噪声

训练时:
- 给动作加高斯噪声(约关节范围的 10%)
- 相当于不断"推搡"角色
- 角色必须学会从扰动中恢复

结果:
- 自然学会平衡策略
- 不需要专门训练抗干扰

5.12 迁移学习

分层结构的好处:组件可以 interchangeably 使用

场景 1:同一个 LLC,不同的 HLC
- 正常行走 LLC 可以用于:路径跟随、运球、避障等

场景 2:同一个 HLC,不同的 LLC
- 路径跟随 HLC 可以配合:正常行走、高抬腿、前倾等

场景 3:迁移 + 微调
- 用正常行走训练的 HLC
- 直接用于高抬腿 LLC(性能下降)
- 微调 200k 次迭代(性能恢复)
- 比从零训练(1M 次)快得多

6. 实验结果

6.1 LLC 学习曲线

比较三种设置:
1. 10 个动作捕捉片段
2. 1 个手工制作片段
3. 没有参考动作

结果:
- 10 个 mocap 片段:学习最快,最终性能最好
- 1 个 hand-authored 片段:可以学会走路,但转弯较差
- 没有参考动作:完全学不会走路

结论:参考动作对引导学习非常重要

6.2 HLC 学习曲线

任务归一化累积奖励 (NCR)
路径跟随0.55
足球运球0.77
柱子障碍0.56
方块障碍0.70
动态障碍0.18
观察:
- 静态环境任务(路径、柱子、方块)学得较好
- 动态障碍物最难,因为 LLC 没有学过"停止"

NCR 解释:
- NCR = 1:完美表现
- 但有些任务理论上达不到 1(如运球需要时间)
- 0.5-0.7 已经表示相当不错的性能

6.3 分层 vs 端到端

对比实验:
- 分层:HLC + LLC(分开训练)
- 端到端:单个网络直接输出关节命令

结果:
- 端到端方法:两种任务都完全失败
- 分层方法:成功学会所有任务

为什么分层赢了?
- 端到端需要同时学会"怎么走"和"往哪走"
- 任务太复杂,探索空间太大
- 分层把问题分解成两个较简单的子问题

6.4 风格插值演示

让角色在"正常行走"和"高抬腿"之间插值:

u = 0.0 → 正常行走
u = 0.25 → 稍微抬腿
u = 0.5 → 中等抬腿
u = 0.75 → 较高抬腿
u = 1.0 → 高抬腿

效果:可以平滑过渡,没有明显跳跃

6.5 迁移学习结果

场景:用正常行走 LLC 训练的 HLC,直接用于其他风格 LLC

| 任务 + LLC | 不微调 | 微调 | 重新训练 |
|------------|--------|------|----------|
| 运球 + 高抬腿 | 0.19 | 0.56 | 0.51 |
| 运球 + 直腿 | 0.51 | 0.64 | 0.45 |
| 路径 + 高抬腿 | 0.10 | 0.39 | - |
| 路径 + 前倾 | 0.43 | 0.44 | - |

结论:
- 直接迁移会有性能损失(特别是敏感任务如运球)
- 微调可以快速恢复性能(200k vs 1M 次)
- 简单任务(路径)迁移效果更好

7. 总结与启发

7.1 核心创新点

1. 分层深度强化学习框架
   - 高层规划(HLC)+ 低层执行(LLC)
   - 不同时间尺度,各司其职

2. 环境感知能力
   - 输入:32×32 地形高度图
   - 可以"看到"地形并做出决策

3. 风格多样化
   - 通过奖励函数修改实现不同风格
   - 风格之间可以平滑插值

4. 迁移学习能力
   - 组件可以 interchangeably 使用
   - 微调可以快速适应新组合

7.2 与后续工作的关系

DeepLoco (2017) → 后续工作:

├→ DeepMimic (2018): 更精确的动作跟踪
├→ AMP (2021): 对抗性动作先验,更灵活的风格学习
├→ ASE (2022): 大规模可重用技能嵌入
└→ 本文作者团队的后续工作
   - PDP (2023): 用扩散模型做物理角色控制
   - DiffuseLoco (2023): 离线数据集的扩散控制

7.3 局限性

论文自己提到的局限

1. 相位变量仍需手动设计
   - 未来可以用 RNN/LSTM 内部记忆

2. HLC-LLC 接口是手工指定的
   - 两步位置 + 身体朝向
   - 未来可以学习自动表示

3. 分开训练,不是端到端
   - 联合训练困难(LLC 动态变化影响 HLC 学习)

4. 采样效率不高
   - LLC:600 万次迭代
   - HLC:100 万次迭代
   - 未来可以用学习到的动态模型改进

从现代视角看局限

1. 训练时间长
   - LLC:2 天(16 核)
   - HLC:7 天(CPU)
   - 现代方法可能更快

2. 角色模型简单
   - 只有 8 个连杆(腿 + 躯干)
   - 没有手臂(运球任务除外)

3. 任务相对简单
   - 主要是导航类任务
   - 没有更复杂的交互(如抓取、操作)

7.4 对后续研究的启发

1. 分层是处理复杂任务的有效策略
   - 把大问题分解成小问题
   - 不同层次可以独立训练

2. 参考动作是引导学习的好方法
   - 不需要精确跟踪
   - "风格模仿"比"动作复制"更灵活

3. 环境感知很重要
   - 地形图输入让角色可以"看路"
   - 为后续工作(如 DiffuseLoco)奠定基础

4. 迁移学习可以大大提高效率
   - 组件可以复用
   - 微调比重新训练快得多

7.5 关键技术总结

┌────────────────────────────────────────┐
│          DeepLoco 技术栈               │
├────────────────────────────────────────┤
│ • 分层强化学习(HLC + LLC)            │
│ • Actor-Critic + CACLA 更新            │
│ • 经验回放(Experience Replay)         │
│ • 双线性相位变换                       │
│ • CNN 处理地形图                       │
│ • 参考动作引导学习                     │
│ • 风格插值                             │
│ • 迁移学习 + 微调                      │
└────────────────────────────────────────┘

8. 公式汇总

8.1 策略表示

随机策略:
a = μ(s, g) + λN, N ∼ G(0, Σ)

λ ~ Ber(ε):探索概率
训练时 λ = 1(加噪声)
推理时 λ = 0(确定性)

8.2 累积奖励

J(π) = E[r₀ + γr₁ + ... + γ^T r_T | π]

γ = 0.95:折扣因子

8.3 CACLA 更新

价值函数更新:
yᵢ = rᵢ + γV(sᵢ', gᵢ)
θ_v ← θ_v + α_v · Oθ_v V(sᵢ, gᵢ) · (yᵢ - V(sᵢ, gᵢ))

策略更新(仅当 δ > 0):
δⱼ = rⱼ + γV(sⱼ', gⱼ) - V(sⱼ, gⱼ)
θ_μ ← θ_μ + α_μ · Oθ_μ μ(sⱼ, gⱼ) · Σ⁻¹ · (aⱼ - μ(sⱼ, gⱼ))

8.4 奖励函数

LLC 奖励:
r_L = 0.5·r_pose + 0.05·r_vel + 0.1·r_root + 0.1·r_com + 0.2·r_end + 0.1·r_heading

HLC 奖励(运球):
r_H = 0.17·r_cv + 0.17·r_cp + 0.33·r_bv + 0.33·r_bp

9. 重要图示说明

图 1:系统概述

DeepLoco 系统分为两层:
- HLC(2Hz):看地形、做决策、规划步法
- LLC(30Hz):看状态、执行动作、控制关节
- 物理模拟(3000Hz):计算碰撞、受力

图 2:LLC 状态特征

角色状态包括:
- 各部位位置(红箭头)
- 各部位速度(绿箭头)
- 地形高度图(右侧)

图 3:步法计划

LLC 目标 g_L = (p̂₀, p̂₁, θ̂_root)
- p̂₀:下一步位置
- p̂₁:下下一步位置
- θ̂_root:身体朝向

图 4:LLC 网络结构

输入 → 双线性相位变换 → FC(512) → FC(256) → 输出

图 5:HLC 网络结构

地形图 → Conv → Conv → Conv → FC(128)
                                ↓
身体特征 ────────────────────→ 拼接 → FC(512) → FC(256) → 输出
任务目标 ────────────────────↗

文档完成时间:2026 年 4 月 3 日