绝影 Lite3 运动控制教程:从底层原理到 AI 策略
前言
四足机器人运动控制经历了从"模型驱动"到"学习驱动"的范式转变。本文以云深处绝影 Lite3 为载体,系统梳理运动控制的底层原理、SDK 接口和 AI 策略部署方法,帮助开发者从零建立完整的知识框架。
一、运动控制的分层架构
四足机器人的运动控制可以抽象为四层结构,每一层解决不同的问题:
┌─────────────────────────────────────────────┐
│ 任务层(Task) │
│ "去厨房"、"跟随主人" │
├─────────────────────────────────────────────┤
│ 策略层(Policy) │
│ 速度指令 → 步态选择 → 步态相位 │
│ MPC/WBC(模型型) 或 RL Policy(学习型) │
├─────────────────────────────────────────────┤
│ 执行层(Execution) │
│ 12 关节力矩/位置/速度指令 │
│ 关节 PD 控制器(~1kHz) │
├─────────────────────────────────────────────┤
│ 硬件层(Hardware) │
│ 电机、减速器、IMU、关节编码器、力传感器 │
└─────────────────────────────────────────────┘
关键认知:开发者通常工作在策略层和执行层之间。Lite3 的 Motion SDK 开放了执行层接口,RL SDK 开放了策略层接口。
二、传统控制:MPC + WBC
2.1 为什么需要分层
四足机器人有 12 个自由度(每条腿 3 个关节),同时有 4 个脚与地面接触,接触状态随步态切换而变化。直接求解 12 个关节的力矩是一个高维、非凸、带切换约束的优化问题,在线求解极其困难。
分层思路:把问题拆成两个规模更小、凸性更好的子问题。
2.2 MPC:高层优化器
MPC 使用简化模型(通常是单刚体模型,把整个机器人看作一个质点+刚体),在有限时域内预测未来运动并求解最优的地面反作用力。
单刚体动力学方程:
$$m\ddot{\mathbf{r}} = \sum_{i=1}^{4}\mathbf{f}_i + m\mathbf{g}$$
$$\mathbf{I}\dot{\boldsymbol{\omega}} = \sum_{i=1}^{4}(\mathbf{r}_i - \mathbf{r}) \times \mathbf{f}_i$$
其中 $\mathbf{f}_i$ 是第 $i$ 条腿的地面反作用力,$\mathbf{r}_i$ 是接触点位置。
MPC 的工作流程:
- 接收期望速度/姿态指令
- 读取当前状态(IMU + 关节编码器)
- 在未来 100~300ms 内滚动优化,求解 12 维力向量 $\mathbf{f}_1, \ldots, \mathbf{f}_4$
- 约束条件:摩擦锥、接触力非负、关节力矩上限
- 只执行第一个时间步的解,下一周期重新优化
频率:30~100 Hz
2.3 WBC:底层执行器
WBC 拿到 MPC 给出的地面反作用力后,用完整多体动力学模型求解 12 个关节的具体力矩。
核心方程(浮基多体动力学):
$$\mathbf{M}(\mathbf{q})\ddot{\mathbf{q}} + \mathbf{C}(\mathbf{q}, \dot{\mathbf{q}}) + \mathbf{g}(\mathbf{q}) = \mathbf{S}^T\boldsymbol{\tau} + \mathbf{J}_c^T\mathbf{f}_c$$
WBC 通常用任务优先级二次规划求解:
| 优先级 | 任务 | 说明 |
|---|---|---|
| P0 | 接触力约束 | 支撑腿不打滑、不穿透地面 |
| P1 | 躯干姿态/加速度 | 不摔倒 |
| P2 | 摆腿轨迹跟踪 | 足端沿期望轨迹运动 |
| P3 | 接触力跟踪 | 实现 MPC 给出的期望力 |
| P4 | 关节正则化 | 避免奇异位形 |
频率:500~1000 Hz
2.4 完整闭环
期望速度(0.3 m/s 前进)
↓
状态估计(IMU + 关节编码器,EKF 融合)
↓
步态发生器(确定哪条腿支撑、哪条腿摆动)
↓
MPC(~50 Hz)→ 求解 4×3=12 维地面反作用力
↓
WBC(~1 kHz)→ 求解 12 关节力矩 τ
↓
关节 PD 控制 → 电机执行
↓
传感器反馈 → 回到状态估计
三、学习型控制:RL 策略
3.1 基本思想
RL 策略不显式求解优化问题,而是训练一个神经网络 $\pi_\theta$,直接映射状态到动作:
$$\mathbf{a}t = \pi\theta(\mathbf{s}_t)$$
其中状态 $\mathbf{s}_t$ 通常包含:本体感知(关节角度/速度、IMU、脚接触状态)+ 历史观测;动作 $\mathbf{a}_t$ 通常是关节位置偏移或力矩。
3.2 训练框架
Sim-to-Real + Teacher-Student 是当前主流范式:
┌──────────────────────────────────────────────┐
│ 仿真环境(Isaac Gym / Isaac Lab) │
│ ├── 大规模并行(~4096 个环境同时跑) │
│ ├── 域随机化(摩擦、质量、延迟、噪声) │
│ └── PPO 算法训练 Teacher Policy │
└──────────────────────────────────────────────┘
↓ 蒸馏
┌──────────────────────────────────────────────┐
│ Student Policy(仅用本体感知,不依赖特权信息) │
│ ↓ 部署到真机 │
└──────────────────────────────────────────────┘
关键技巧:
- 域随机化:在仿真中随机化物理参数,让策略学会鲁棒性
- 特权信息:训练时给 Teacher 看地形高度图、摩擦系数等真机拿不到的信息,再蒸馏给 Student
- 奖励整形:精心设计 reward function(跟踪速度、低能耗、平滑动作、不摔倒)
3.3 与传统控制的对比
| 维度 | MPC/WBC | RL 策略 |
|---|---|---|
| 控制方式 | 在线求解优化(QP) | 神经网络前向推理 |
| 可解释性 | 高(每步可检查约束) | 低(黑盒) |
| 硬约束保证 | 摩擦锥、力矩上限严格满足 | 只能放进 reward 尽量满足 |
| 复杂地形适应 | 需要手工建模 | 自动学习 |
| 高动态动作 | 需要精细调参 | 训练数据足够即可 |
| 开发门槛 | 动力学 + 优化功底 | 仿真 + RL 调参经验 |
| 频率 | MPC ~50Hz, WBC ~1kHz | 推理 ~50~200Hz |
四、Lite3 的 SDK 接口
4.1 三层接口总览
| 接口 | 开放层级 | 用途 |
|---|---|---|
| 自智巡平台 HTTP 接口 | 任务层 | 路径规划、建图、导航 |
| Motion SDK(UDP) | 策略层 + 执行层 | 步态切换、轴指令、关节读写 |
| RL SDK | 策略层 | 部署自定义 RL 策略、进入 AI 状态 |
4.2 Motion SDK 核心流程
低速前进的完整命令流:
- 心跳保活:
0x21040001,≥2 Hz,全程不断 - 起立:
0x21010202,等待basic_state == 6(力控站立) - 切移动模式:
0x21010D06 - 切低速步态:
0x21010300 - 持续发前进轴指令:
0x21010130,正值且 > 6553(死区),≥20 Hz - 停车:轴指令归零或停发 >250ms
状态机流转:
上电趴下(1) → 力控站立(6) → 移动模式 → 低速步态 → 持续轴指令前进
↓
AI状态(16) ← 0x21010528
(RL 策略接管)
4.3 AI 状态切换
进入 AI 状态后,常规步态/动作指令失效,只能用 AI 专属指令:
| 指令 | 指令码 | 说明 |
|---|---|---|
| 进入 AI | 0x21010528 | 从力控站立进入 |
| 退出 AI | 0x2101052B | 回到力控站立 |
| AI 基础步态 | 0x2101052A | 常规行走 |
| AI 跳跃步态 | 0x21010529 | 用于跳跃/空翻 |
| AI 站立步态 | 0x2101052C | 用于倒立等位姿调整 |
| AI 极速步态 | 0x2101052E | 高速奔跑 |
注意:轴指令(0x21010130/31/35)在 AI 状态下仍然有效,作为高层速度命令喂给策略网络。
五、动手实践路线
路线 A:理解传统控制(MPC/WBC)
-
理论基础
- 《Robotics, Vision and Control》第 7 章(浮基动力学)
- MIT 6.832 Underactuated Robotics(MPC 章节)
- Carlo Mastalli 的 Crocoddyl 教程
-
开源项目
- anymal_b 的 OCS2 框架:https://github.com/leggedrobotics/ocs2
- MIT Mini Cheetah 源码:GitHub - mit-biomimetics/Cheetah-Software · GitHub
- rl-mpc-locomotion:https://github.com/qiayuanl/rl_mpc_locomotion
-
在 Lite3 上实践
- 用 Motion SDK 读取关节状态和 IMU
- 尝试自己实现一个简单的 WBC(先做单腿阻抗控制)
- 接入开源 MPC 求解器(如 OSQP)
路线 B:训练自己的 RL 策略
-
理论基础
- Sutton & Barto《Reinforcement Learning: An Introduction》
- PPO 算法原论文
- Isaac Lab 官方文档
-
开源项目
- Isaac Lab:https://github.com/isaac-sim/IsaacLab
- Unitree RL Gym:GitHub - unitreerobotics/unitree_rl_gym · GitHub
- Go2 RL Locomotion:GitHub - leggedrobotics/legged_gym: Isaac Gym Environments for Legged Robots · GitHub
-
在 Lite3 上实践
- 用 RL SDK 读取真机关节状态
- 在 Isaac Lab 中搭建 Lite3 URDF 仿真环境
- 用 PPO 训练基础行走策略
- 通过 RL SDK 部署到真机,进入 AI 状态验证
路线 C:混合架构(前沿)
- RL 调 MPC 参数:用策略网络输出 MPC 的权重矩阵
- 模仿学习 + RL 微调:先用行为克隆学 MPC 专家数据,再用 RL 在复杂地形上微调
- 感知-运动闭环:融合深度相机做 perceptive locomotion
六、总结
Lite3 的运动控制架构是当前四足机器人技术发展的一个缩影:
- 底层:MPC/WBC 提供可解释、硬约束保证的安全兜底
- 上层:RL 策略提供地形自适应和高动态动作能力
- 接口:轴指令作为统一的高层命令,屏蔽底层实现差异
- 趋势:从"二选一"走向"分层融合",大脑(任务规划)+ 小脑(运动控制)协同
对于开发者而言,建议两条路线并行:用 RL 快速上手做出能动的策略,同时深入理解 MPC/WBC 为什么能提供安全保证。两者结合,才能真正掌握四足机器人运动控制的全貌。
附录:关键指令速查表
| 功能 | 指令码 | 类型 | 说明 |
|---|---|---|---|
| 心跳 | 0x21040001 | 0 | ≥2 Hz 持续 |
| 起立/趴下 | 0x21010202 | 0 | 切换 |
| 移动模式 | 0x21010D06 | 0 | 非 AI 状态 |
| 原地模式 | 0x21010D05 | 0 | 非 AI 状态 |
| 低速步态 | 0x21010300 | 0 | 非 AI 状态 |
| 中速步态 | 0x21010307 | 0 | 非 AI 状态 |
| 高速步态 | 0x21010303 | 0 | 非 AI 状态 |
| 前后轴指令 | 0x21010130 | 0 | 移动/AI 状态,>6553 前进 |
| 左右轴指令 | 0x21010131 | 0 | 移动/AI 状态 |
| 偏航轴指令 | 0x21010135 | 0 | 移动/AI 状态 |
| 进入 AI | 0x21010528 | 0 | 需力控站立 |
| 退出 AI | 0x2101052B | 0 | 回力控站立 |
| 软急停 | 0x21020C0E | 0 | 任意时刻 |
| 速度指令 | 0x0140 | 1 | 自主模式,double 值 m/s |
需要我继续展开哪一部分?比如:
- MPC 单刚体方程的详细推导
- WBC 任务优先级 QP 的数学形式
- Isaac Lab 训练四足策略的完整代码示例
- Motion SDK 的 UDP 数据包打包示例(C++/Python)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)