具身智能导论
完整课程中文笔记
这一版按课件逐讲整理完整课程内容,覆盖第 1 至第 12 讲。中文优先表述,关键专业术语保留英文原文与原始公式,方便对照课件与英文考题。
如果你想把整门课从头到尾「完整读一遍」,按课件顺序系统掌握每一讲的全部知识点,这一版最合适。
如果你只想快速过复习要点,可切到左上角的 中文纯享版;想最大限度贴近课件英文术语与考试题面,可切到 术语增强版。
课程主线
具身智能愿景 $\to$ 机器人学基础(表示 / 运动 / 规划 / 控制) $\to$ 视觉与抓取(感知到抓住) $\to$ 策略学习(模仿学习与强化学习) $\to$ 运动控制与任务规划(让机器人真正动起来、完成任务)。
各讲速览
| 讲次 | 主题 | 核心内容 |
|---|---|---|
| 第 1 讲 | 课程总览 | 具身智能愿景、机器人定义、感知-行动闭环、VLA、仿真 |
| 第 2 讲 | 机器人学 I | 运动学/动力学、刚体变换、位姿表示、正逆运动学 |
| 第 3 讲 | 机器人学 II | 旋转表示、欧拉角、轴角、四元数、万向锁 |
| 第 4 讲 | 机器人学 III | 运动规划、路径与轨迹、采样规划、控制基础 |
| 第 5 讲 | 视觉与抓取 I | PID 控制、相机模型、6D 位姿估计 |
| 第 6 讲 | 视觉与抓取 II | 抓取表示、力闭合、手眼标定、抓取检测 |
| 第 7 讲 | 策略学习 I | 模仿学习、行为克隆、分布漂移 |
| 第 8 讲 | 策略学习 II | 强化学习基础、MDP、价值函数、策略梯度 |
| 第 9 讲 | 策略学习 III | GAE、PPO、on/off-policy、actor-critic |
| 第 10 讲 | 策略学习 IV | 进阶策略学习方法 |
| 第 11 讲 | 运动控制 Locomotion | ZMP、基于模型与学习的步态控制 |
| 第 12 讲 | 具身任务规划 | 任务级规划与系统集成 |
期中考试信息
- 期中考试占总评 40%
- 允许携带 一张 A4 双面 cheat sheet(手写或打印均可)
- 题目 全部用英文,课堂讲过的术语考试不再额外解释
- 不允许 使用字典或计算器
- 多选题规则严格:选错一个错误项直接记 $0$ 分;每漏选一个正确项扣 $1$ 分;最低为 $0$ 分
课程地图
刚体变换、旋转表示、运动规划与控制,是整门课的数学底座。
从相机成像、6D 位姿估计到抓取表示与手眼标定,解决「看见到抓住」。
模仿学习与强化学习,让机器人学会决策与动作。
运动控制与任务级规划,让机器人在真实世界完成复杂任务。
第 1 讲 · 课程总览
本讲是《具身智能导论(Introduction to Embodied AI)》的开篇,由王鹤(He Wang)老师主讲。内容从"什么是机器人"出发,回顾机器人学(Robotics)的过去、现在与未来,引出具身智能(Embodied AI)的愿景,阐明通用机器人(Generalist Robots)/ 人形机器人(Humanoids)的目标、机器人"大脑"的分层架构(cerebrum 与 cerebellum)、VLA(Vision-Language-Action)模型、仿真(Simulation)在数据与学习中的关键作用,并介绍课程安排与考核方式。
1.1 从 Digital AI 到 Embodied AI
当前的人工智能在数字世界(Digital AI)中已经非常强大,例如视频生成模型(课件举例 Seedance 2.0)等。但课件提出一个核心追问:
- What do you want AI to do more?(我们还希望 AI 多做些什么?)
- What is the best direction of AI?(AI 最好的方向是什么?)
- 课件给出的答案:We need AI to do physical labor works!——我们需要 AI 去完成物理劳动。
这正是具身智能(Embodied AI)的出发点:让智能"长出身体",能够在真实物理世界中感知、行动并与环境交互。课件也以 Galbot 出现在 2026 年央视春晚(Chinese Spring Festival Gala)作为机器人走入现实的例证。
1.2 什么是机器人(What is a Robot?)
课件给出的机器人定义:
- 机器人是一种能够自动执行一系列复杂动作的机器(A machine capable of carrying out a complex series of actions automatically)。
- 机器人可以由外部控制(external control)引导,也可以由内置控制(attached within)引导。
- 机器人可以被构造成人的形态(human form),但并非必须。
课件以 Rethink Robotics 的智能机器人 Baxter 作为示例。
按运动方式(Locomotion)对机器人分类
| 类型 | 说明 / 子类 |
|---|---|
| 固定式机器人 (Stationary Robots) | Cartesian(直角坐标)、Articulated(关节型)、Cylindrical(圆柱坐标)、Spherical(球坐标)、Parallel(并联) |
| 轮式机器人 (Wheeled Robots) | 单轮、两轮、三轮及以上 |
| 足式机器人 (Legged Robots) | Bipedal(双足)、tripedal(三足)、quadrupedal(四足)、hexapod(六足)等 |
| 无人机 (Drones / UAV) | Single rotor(单旋翼)、quadrotor(四旋翼)、Fixed wings(固定翼) |
1.3 什么是机器人学(What is Robotics?)
- 机器人学(Robotics)是工程学的一个分支,涉及机器人的构思(conception)、设计(design)、制造(manufacture)与操作(operation)。
- 机器人学的目标是创造能够以多种方式辅助人类的智能机器(intelligent machines)。
1.4 机器人学的过去、现在与未来
课件用一条时间线串起机器人学的发展脉络:
| 阶段 | 代表 | 特征 |
|---|---|---|
| 过去 & 现存 Past & Existing | 工业机器人 Industrial robots | 专用、预编程、固定场景(如汽车工厂的冲压 Stamping、焊接 Welding、喷涂 Painting、总装 Final Assembly) |
| 现在 & 正在发生 Now & Happening | 自动驾驶汽车 Autonomous Cars | 具备一定感知与决策能力,开始走向开放环境 |
| 未来 & 我们的梦想 Future & Our Dream | 通用机器人——人形机器人 Generalist Robots — Humanoids | 跨任务、跨环境泛化(如 OpenAI + Figure、Tesla Optimus、Galbot G1) |
1.5 传统工业机器人的局限
课件以汽车工厂中的"经典专用机器人(Classical Special-Purpose Robots)"为例剖析其工作模式:
- 工作流程:预先设计并计算轨迹(Predesign and compute the trajectory),使用机械臂时仅重放该轨迹(Only replay trajectory)。
- 局限 1:部署耗时(time-consuming deployment)——每个任务都要重新设计、标定轨迹。
- 局限 2:无法灵活处理多任务(can't flexibly handle multi-tasks)。
1.6 感知—行动闭环(Perception-Action Loop)
感知—行动闭环是具身智能的核心机制,也是课件解释"人类如何学习(How Humans Learn)"的关键:
- 智能体先感知(Perceive),形成假设(forms hypotheses),再采取行动去检验(take action to examine)。
- 大脑通过不断创建并测试关于世界如何运作的假设来理解周围世界(make sense of the world by creating and testing hypotheses)。
感知与行动构成一个不断循环的闭环:
Perception-Action Loop
$\text{Perceive} \to \text{Hypothesize} \to \text{Act} \to \text{Observe} \to \text{Perceive} \cdots$
行动会改变环境,也会产生新的感知输入;新感知又驱动新行动,形成闭环。
1.7 经典 AI vs. 具身 AI(Classical AI vs. Embodied AI)
课件回到 AI 的本源思考:图灵(Alan Turing)1950 年的论文 Computing Machinery and Intelligence 奠定了"无身体(Disembodied)"智能的范式。与之相对,具身(Embodiment)强调智能离不开身体与环境的交互。
| 维度 | 经典 AI(Classical / Disembodied AI) | 具身 AI(Embodied AI) |
|---|---|---|
| 身体 | 无身体,纯符号/数据处理 | 有身体(embodiment),能在物理世界行动 |
| 数据来源 | 互联网静态数据集(Internet AI) | 主动交互产生的数据(感知—行动闭环) |
| 学习方式 | 被动观察、模式识别 | 主动探索、行动检验假设 |
人类智能的进化(Evolution of Human Intelligence)
课件指出人类智能进化的几把"钥匙",它们都与身体和交互密切相关:
- 直立行走(Walk Upright)
- 工具使用(Tool Usage)
- 语言(Language)
- 具身交互(Embodied Interaction)
经典实验:主动猫 vs. 被动猫
结论:感知与运动必须耦合,主动行动对学习至关重要——这是具身视觉(Embodied Vision)/ 视觉—运动协调(Visuomotor Coordination,如手眼协调 Eye-Hand Coordination)的实验依据。
1.8 通用机器人 / 人形机器人愿景(Generalist Robots / Humanoids)
课件把"未来与梦想"明确为通用机器人——人形机器人,代表性项目有 OpenAI + Figure、Tesla Optimus、Galbot G1。通用机器人需要做到两个层面的泛化:
- 任务通才(Task generalists):能完成多种不同任务,而非单一专用任务。
- 环境通才(Environment generalists):能在多种不同环境中工作,而非固定标定场景。
1.9 机器人"大脑"的分层:Cerebrum 与 Cerebellum
课件借用人类如何控制运动(How Human Controls Motion)来类比机器人控制架构:身体(Body)由大脑(Brain)控制,而大脑分为大脑皮层(Cerebrum)与小脑(Cerebellum)两层。
| 层次 | 人脑职责 | 对应"机器人大脑(Robot Brain)" |
|---|---|---|
| 大脑皮层 Cerebrum | 负责高层策略(high-level policies),决定"做什么(what to do)" | 感知(Perception)、规划(planning)、决策(decision making)、语言(language)等;核心模型为 VLA(Vision-Language-Action model) |
| 小脑 Cerebellum | 负责底层运动策略(low-level motor policies),决定"怎么执行(how to execute)",要求快速、精确、可靠(fast, accurate, reliable) | 运动控制(Motion control)、轨迹跟踪(trajectory tracking)、稳定性(stability)、误差反馈(error feedback);进一步包括全身与全手控制(whole-body / whole-hand control),主要通过强化学习(Reinforcement Learning, RL)习得 |
构建通用机器人 = Embodiment(身体)+ Robot Brain(机器人大脑:Cerebrum + Cerebellum)。
1.10 计算机视觉现状与视觉—语言基础模型
- 当前计算机视觉(Computer Vision)擅长的是模式识别(Pattern recognition):分类(classification)、检测(detection)、分割(segmentation)等,作用于图像、视频、文本,数据通常来自互联网(Internet AI)。
- 在此基础上发展出视觉—语言基础模型(Vision-Language Foundation Model, VLM),为机器人大脑(cerebrum)提供强大的预训练能力。
1.11 VLA:Vision-Language-Action 模型
VLA 是通用机器人 cerebrum 的核心,把视觉、语言与动作端到端打通:
- 输入(Inputs):语言(language)、视觉(vision)、其他本体感觉/传感器信号(proprioceptive / sensor signals)。
- 输出(Outputs):机器人动作(robot actions)(部分模型如 RT-2 也可输出语言或动作)。
- 优点(Advantages):端到端(end-to-end),可受益于 VLM 预训练(benefit from VLM pretraining)。
- 局限(Limitations):零样本性能(zero-shot performance)仍落后于 LLM 与 VLM。
| 代表工作 | 说明 |
|---|---|
| RT-2(Google) | 具身大模型,作为 VLA 解决开放指令操作(open-instruction manipulation);输入语言+视觉+传感器,输出语言或动作。 |
| GroceryVLA | 在真实超市货架上的双臂抓取放置(Bimanual Pick-and-Place);训练数据 99% 合成 + 1% 真实遥操作(teleoperation)。 |
| NavFoM | 世界首个跨本体(Cross-Embodiment)、多任务、可用地图(Map-Enabled)的长程自主导航基础模型;可微调为 TrackVLA++(30 分钟长程人体跟踪)、UrbanVLA(将地图融入导航)。 |
1.12 数据瓶颈与大规模合成数据
具身基础模型的预训练可能需要数万亿条轨迹(trillions of trajectories),而目前最大的 VLA 数据集仅约 100 万(1M)条轨迹。
解决之道是大规模合成数据(Large-Scale Synthetic Data),例如长程可变形物体操作的演示合成(Long-Horizon Deformable Manipulation Demo Synthesis)、大规模导航/人体跟踪仿真数据等。
1.13 仿真(Simulation)的重要性
在仿真环境中学习交互(Learning Interaction in Simulation Environments)具有显著优势:
- 免标注(Annotation-free):仿真自带真值,无需人工标注。
- 时间高效(Time efficient):可大规模并行、加速采集。
- 可迁移到真实世界(Transferable to real world):配合照片级真实感渲染(Photorealistic Rendering)缩小差距。
• 对于真实世界已能完成的问题,在仿真中学习的关键是要能泛化到真实(generalize to real)。
• 对于真实世界还远未做到的问题,仿真环境是一个很好的探索(exploration)场所。
1.14 小脑层与强化学习:从动捕到仿真到真实
小脑(cerebellum)层的运动控制主要通过强化学习(RL)习得,典型流程为:从人体动作捕捉(Human MoCap)$\to$ 在仿真中做 RL(RL in the Sim)$\to$ 部署到真实世界(Deployment in the Real)。课件给出的代表工作:
| 工作 | 定位 |
|---|---|
| Any2Track | 专才小脑(Specialist Cerebellum),约 100K 参数,可抗扰动(resistant to disturbance),跟踪任意动作。 |
| Humanoid GPT | 通才小脑(Generalist Cerebellum),约 100M 参数,实时在线模仿人类动作(online mimicking)。 |
| UniDexGrasp++ | 大规模 RL 实现可泛化灵巧操作(Generalizable Dexterous Manipulation),ICCV 2023 最佳论文 Finalist;采用分层 RL(Hierarchical RL)+ 策略蒸馏(policy distillation)形成通才策略。 |
| DexNDM | 通过灵巧神经动力学(Dexterous Neural Dynamics)缓解 Sim2Real 差距;同样使用分层 RL 与策略蒸馏。 |
这些工作共同指向一个核心挑战:Sim2Real——如何把在仿真中学到的策略可靠地迁移到真实机器人。
1.15 通用机器人的跨行业应用
课件展示通用机器人的跨行业应用(Cross-Industry Applications),覆盖:制造(Manufacture)、物流(Logistics)、零售(Retail)、科研(Research)、餐饮(Catering)、办公(Office)、家庭(Home)、养老(Senior Care)。
1.16 课程安排(Course Logistics)
课程目标
- 一门关于具身智能的前沿课程(frontier course on Embodied AI)。
- 从现代具身智能视角,覆盖机器人学基础与基于深度学习的视觉/机器人系统。
- 为开展具身智能研究打下坚实基础。
授课信息
| 项目 | 内容 |
|---|---|
| 授课教师 | He Wang(hewang@pku.edu.cn) |
| 助教(TAs) | Yuxuan Wan、Weiheng Liu |
| 上课时间 | 周一 15:10 – 18:00(Monday 3:10PM – 6:00PM) |
| 上课地点 | 线下:教学三号楼 201 室(Room 201, Teaching Building 3) |
先修要求(Prerequisite)
- 课程:深度学习(Deep Learning)、计算机视觉(Computer Vision)、大学物理力学(University-level Mechanics)。
- 编程:熟练 Python,熟悉 PyTorch。
课程网站与资源
- 公开网站:
https://pku-epic.github.io/Intro2EAI_2026/(含 Syllabus、作业发布)。 - 校内网站:
https://course.pku.edu.cn/(讲义下载、作业提交、成绩、讨论区)。 - 无指定教材;参考课程:深度学习/CV——Goodfellow 等《Deep Learning》(MIT Press, 2016)、Stanford CS 231N;强化学习——Berkeley CS 285;机器人学——UCSD CSE291。
- 最有效的学习与查证方式:直接 Google、查 Wikipedia。
考核方式(Grading Policy)
| 项目 | 占比 |
|---|---|
| 期中考试(1 midterm) | 40% |
| 3 次作业(3 assignments,合计) | 40% |
| 1 次真实世界实验(real-world lab) | 20% |
| 课堂参与(Class participation) | 最多 5% 加分(bonus) |
作业政策(Assignments)
- 每次作业有 两周 完成时间。
- 迟交政策:逾期 0–24 小时扣 10%;24–48 小时扣 20%;超过 2 天计 0 分。
- 微信群(WeChat Group)用于通知与公告。
下一讲预告:Lecture 2 — The Basics of Robotics(机器人学基础)。
本讲重点回顾
1. 愿景:从 Digital AI 走向 Embodied AI,让 AI 从事物理劳动;目标是通用机器人 / 人形机器人,需做到任务通才与环境通才。
2. 机器人定义:能自动执行复杂动作的机器;按运动方式分为固定式、轮式、足式、无人机等。
3. 传统局限:工业机器人"预设轨迹—机械重放",部署耗时、无法灵活多任务,与人类智能本质不同。
4. 核心机制:感知—行动闭环(Perception-Action Loop);主动行动对学习至关重要(Held & Hein 主动/被动猫实验)。
5. 大脑分层:Cerebrum(决定"做什么",对应 VLA,含感知/规划/决策/语言)+ Cerebellum(决定"怎么做",对应运动控制,主要用 RL)。
6. VLA:输入语言+视觉+传感器,输出动作;端到端、受益于 VLM 预训练,但零样本性能落后于 LLM/VLM(RT-2、GroceryVLA、NavFoM)。
7. 数据与仿真:真实数据采集昂贵(需 trillions 轨迹,现有最大约 1M),靠大规模合成数据 + 仿真解决;仿真免标注、时间高效、可迁移;核心挑战是 Sim2Real。
8. 应用与课程:跨行业应对劳动力短缺/养老;考核 = 期中 40% + 作业 40% + 真实实验 20% + 课堂参与最多 5% 加分。
第 2 讲 · 机器人学 I
本讲是「具身智能导论」机器人学(Robotics)部分的开篇,讲师为 He Wang。Robotics 是工程学的一个分支,涉及机器人的构想(conception)、设计(design)、制造(manufacture)与运行(operation)。本讲聚焦运动学(kinematics)基础:刚体变换、坐标系与齐次坐标、连杆/关节模型、正逆运动学,并进一步引入旋转空间 $\mathbb{SO}(3)$ 与刚体变换空间 $\mathbb{SE}(3)$ 及其参数化方法。
2.1 机器人学的基础:Kinematics 与 Dynamics
课件把机器人学基础划分为两大块:
- Kinematics(运动学,本讲主题):又分为刚体(rigid objects)与铰接物体(articulated objects)。
- Dynamics(动力学):本讲不展开,留待后续。
| 对比项 | Kinematics(运动学) | Dynamics(动力学) |
|---|---|---|
| 研究对象 | 描述物体的运动:位置(position)、线/角速度(linear/angular velocity)、线/角加速度(linear/angular acceleration)等 | 从力(force)与力矩(torque)一路建模到运动 |
| 是否考虑力 | 不考虑如何通过力来实现运动 | 显式建模力与力矩如何产生运动 |
2.2 连杆(Link)、关节(Joint)与自由度(DoF)
机器人由刚体几何组成多连杆刚体(multi-link rigid-body)结构:
- Link(连杆):按顺序串联的刚体(the rigid-body connected in sequence)。
- Joint(关节):连杆之间的连接器(the connectors between links)。
- DoF(自由度,degree of freedom):一个机械系统的自由度,是定义其位形(configuration)所需的独立参数个数。
关节限位(Joint Limits)
每个关节有下限与上限:旋转关节(revolute joint)以弧度(radians)计,移动关节(prismatic joint)以米(metres)计。
两种常见关节类型与其它类型
| 关节类型 | 记号 | DoF | 说明 |
|---|---|---|---|
| Revolute / Hinge / Rotational(旋转关节) | R | $1$ | 绕轴旋转 |
| Prismatic / Translational(移动关节) | P | $1$ | 沿轴平移 |
| Helical(螺旋关节) | H | $1$ | 旋转与平移耦合 |
| Spherical / Ball and Socket(球关节) | S | $3$ | 球体嵌入球窝,可三向转动 |
Base Link 与 End-Effector Link
- Base link / root link(基座连杆 / 根连杆):机器人的第 $0$ 个连杆,被视为「固定」参考,空间坐标系(spatial frame)$\mathcal{F}_s$ 附着其上。
- End-effector link(末端执行器连杆):最后一个连杆,例如夹爪(gripper),其上附着坐标系 $\mathcal{F}_e$。
课件以一个简单的 2 DoF 机械臂为例:结构为 base → link1 → link2 → end_effector,其中 link1 由旋转关节驱动(参数 $\theta_1$),link2 由移动关节驱动(参数 $\theta_2$)。
2.3 刚体位姿与刚体变换(Rigid Transformation)
给一个刚体紧绑一个体坐标系(body frame)$\mathcal{F}_b$,使 $\mathcal{F}_b$ 随物体一起运动。讨论刚体位姿(pose)时,本质问题是:
分两步完成:
- 先用旋转 $R_{s\to b}$ 对齐两组坐标轴 $\{\mathbf{x}_i, \mathbf{y}_i, \mathbf{z}_i\}$($i = s$ 或 $b$);
- 再用平移 $\mathbf{t}_{s\to b}$ 把 $\mathcal{F}_s$ 平移,使原点 $o_s$ 与 $o_b$ 对齐。
因此刚体位姿可用一对量 $(R_{s\to b},\ \mathbf{t}_{s\to b})$ 表示。
记号约定(Notation Convention)
- 观察者用坐标系 $\mathcal{F}_s$ 记录空间中任意点的位置。
- 普通字母表示点(如 $p$),粗体字母表示向量(如 $\mathbf{v}$)。
- 写方程时用上标标记「记录所在的坐标系」,如 $p^s$ 表示点 $p$ 在 $\mathcal{F}_s$ 中的坐标。
2.4 用坐标变换关联不同坐标系中的坐标
设第二个观察者用 $\mathcal{F}_b$ 记录坐标。对于刚体上的点 $p$,由于 $\mathcal{F}_b$ 随物体运动,其在 $\mathcal{F}_b$ 中的坐标 $p^b$ 永远不变。
想象一个过程:$\mathcal{F}_b$ 从与 $\mathcal{F}_s$ 重合的初始位置移动到当前位置,这正是 $(R_{s\to b}^s,\ \mathbf{t}_{s\to b}^s)$ 的定义方式。点 $p$ 随 $\mathcal{F}_b$ 一起从初始位置 $p^s = p^b$ 被搬到当前位置:
坐标变换公式
$$p^s = R_{s\to b}^s\, p^b + \mathbf{t}_{s\to b}^s$$
更一般地,$(R_{s\to b}, \mathbf{t}_{s\to b})$ 变换整个空间中任意点:$x'^s = R_{s\to b}^s\, x^s + \mathbf{t}_{s\to b}^s$。
2.5 为什么刚体变换不是线性变换?
线性变换(linear transformation)$T: V \to W$ 须满足:
- $T(\mathbf{v}_1 + \mathbf{v}_2) = T(\mathbf{v}_1) + T(\mathbf{v}_2),\ \forall \mathbf{v}_1, \mathbf{v}_2 \in V$;
- $T(\alpha \mathbf{v}) = \alpha T(\mathbf{v})$。
这类变换可用矩阵描述、用矩阵乘法执行。但刚体变换 $(R_{s\to b}, \mathbf{t}_{s\to b})$ 因含平移项,不满足可加性与齐次性:
对 $p_1^s = R_{s\to b}^s p_1^b + \mathbf{t}_{s\to b}^s$、$p_2^s = R_{s\to b}^s p_2^b + \mathbf{t}_{s\to b}^s$,有:
$$p_1^s + p_2^s \neq R_{s\to b}^s (p_1^b + p_2^b) + \mathbf{t}_{s\to b}^s \quad (\text{当 } \mathbf{t}_{s\to b}^s \neq \mathbf{0})$$
同理 $\alpha p_1^s \neq R_{s\to b}^s(\alpha p_1^b) + \mathbf{t}_{s\to b}^s \quad (\text{当 } \mathbf{t}_{s\to b}^s \neq \mathbf{0})$。
于是引出问题:能否把刚体变换表示为一个线性运算?答案是——用齐次坐标。
2.6 齐次坐标(Homogeneous Coordinates)与变换矩阵
把 3D 点扩展为 4 维齐次坐标:
$$\tilde{x} := \begin{bmatrix} x \\ 1 \end{bmatrix} \in \mathbb{R}^4$$
齐次变换矩阵(homogeneous transformation matrix):
$$T_{s\to b}^s = \begin{bmatrix} R_{s\to b}^s & \mathbf{t}_{s\to b}^s \\ 0 & 1 \end{bmatrix}$$
于是坐标变换写成线性形式:$\tilde{x}^s = T_{s\to b}^s\, \tilde{x}^b$。(之后为简洁省略 $\tilde{\ }$ 记号。)
该坐标变换对任意 $\mathcal{F}_s$ 与 $\mathcal{F}_b$ 都成立,作为通用规则:$x^1 = T_{1\to 2}^1\, x^2$。
齐次坐标变换的两条规则
| 规则 | 公式 | 含义 |
|---|---|---|
| 复合(Composition) | $T_{3\to 1}^3 = T_{3\to 2}^3\, T_{2\to 1}^2$ | 由 $x^1 = T_{1\to 2}^1 x^2$ 推得 $x^2 = T_{2\to 1}^2 x^1$、$x^3 = T_{3\to 2}^3 x^2$,故 $x^3 = T_{3\to 2}^3 T_{2\to 1}^2 x^1$ |
| 更换观察者坐标系(Change of observer's frame) | $T_{2\to 1}^2 = (T_{1\to 2}^1)^{-1}$ | 逆变换即互换两坐标系角色 |
2.7 旋转矩阵(Rotation Matrix)
绕 $z$ 轴旋转角 $\gamma$ 的旋转矩阵:
$$R_z(\gamma) := \begin{bmatrix} \cos\gamma & -\sin\gamma & 0 \\ \sin\gamma & \cos\gamma & 0 \\ 0 & 0 & 1 \end{bmatrix}$$
2.8 实例:2 DoF 机械臂的逐段变换
对 base → link1 → link2 → end_effector 结构(link1 为旋转关节 $\theta_1$,link2 为移动关节 $\theta_2$),逐段齐次变换矩阵如下:
base $\to$ link1(revolute $\theta_1$)
$$T_{0\to 1}^0 = \begin{bmatrix} \cos\theta_1 & -\sin\theta_1 & 0 & -l_2\sin\theta_1 \\ \sin\theta_1 & \cos\theta_1 & 0 & l_2\cos\theta_1 \\ 0 & 0 & 1 & l_1 \\ 0 & 0 & 0 & 1 \end{bmatrix}$$
link1 $\to$ link2(prismatic $\theta_2$)
$$T_{1\to 2}^1 = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & l_3 \\ 0 & 0 & 1 & \theta_2 \\ 0 & 0 & 0 & 1 \end{bmatrix}$$
link2 $\to$ end_effector
$$T_{2\to 3}^2 = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & -l_4 \\ 0 & 0 & 0 & 1 \end{bmatrix}$$
运动学方程(Kinematic Equations)
沿运动链复合得到从 base 到 end-effector 的整体变换:
$$T_{0\to 3}^0 = T_{0\to 1}^0\, T_{1\to 2}^1\, T_{2\to 3}^2 = \begin{bmatrix} \cos\theta_1 & -\sin\theta_1 & 0 & -\sin\theta_1(l_2 + l_3) \\ \sin\theta_1 & \cos\theta_1 & 0 & \cos\theta_1(l_2 + l_3) \\ 0 & 0 & 1 & l_1 - l_4 + \theta_2 \\ 0 & 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} R_{s\to e}^s & \mathbf{t}_{s\to e}^s \\ 0 & 1 \end{bmatrix}$$
2.9 运动学位形:Joint Space 与 Cartesian Space
给每个连杆分配坐标系后,可用相邻坐标系间的相对角度与平移来参数化各关节位姿。末端执行器位姿有两种表示:
| 表示空间 | 含义 |
|---|---|
| Joint space(关节空间) | 每个坐标是关节位姿(绕关节轴的角度)的向量 |
| Cartesian space(笛卡尔空间) | 末端执行器的刚体变换 $(R_{s\to e}, \mathbf{t}_{s\to e})$,其中 $\mathcal{F}_e$ 为末端执行器坐标系 |
2.10 正运动学(Forward Kinematics, FK)
FK 定义
把关节空间坐标 $\theta \in \mathbb{R}^n$ 映射为变换矩阵 $T$:
$$T_{s\to e} = f(\theta)$$
通过沿运动链(kinematic chain)复合各段变换来计算。
2.11 逆运动学(Inverse Kinematics, IK)
给定正运动学 $T_{s\to e}(\theta)$ 与目标位姿 $T_{target} \in \mathbb{SE}(3)$,求满足 $T_{s\to e}(\theta) = T_{target}$ 的解 $\theta$。
Workspace(工作空间):机器人做尽所有可能运动时,末端执行器扫掠出的体积。
IK 的难点(IK Issues)
- $T_{s\to e}(\theta)$ 通常容易求值,但其逆 $T^{-1}$ 通常不易求。
- 对给定 $T_{target}$,$T^{-1}$ 可能有多个解,也可能无解。
- 即便有解,求解过程也可能复杂且计算昂贵。
- 因此存在许多不同的 IK 求解途径。这也解释了为什么常用 6 DoF 或 7 DoF 机械臂(更高自由度利于在工作空间内灵活到达目标位姿)。
2.12 IK 的解析法与数值法
IK 解法的一大分类是解析方法(analytical)与数值方法(numerical):
| 方法 | 思路 | 特点 |
|---|---|---|
| Analytical(解析) | 直接对正运动学方程求逆,得到精确闭式解 | 仅在相对简单的运动链上可行 |
| Numerical(数值) | 用近似与迭代逼近解(如基于 Jacobian 矩阵的技术) | 通常更昂贵(毫秒级),但通用性强得多 |
Pieper's criterion(Pieper 准则)
当满足以下任一条件时,6-DoF 运动结构存在闭式逆解:
1. 连续三个旋转关节的轴线交于一点;
2. 连续三个旋转关节的轴线相互平行。
注意:这只是充分条件而非必要条件(sufficient but not necessary)。
实例 UR5:其第 2、3、4 关节的轴线相互平行,满足 Pieper 准则,故存在 IK 闭式解,可在数微秒($\mu s$)内求出。
数值法的工程实现
- 基于 Jacobian 矩阵的数值 IK 技术(参见 CSE169 课程相关讲义)。
- Nvidia 的 CuRobo 与 CuMotion 包实现了无碰撞(collision-free)IK 求解器。
- 在 GPU 上并行使用多个不同种子(初始 $\theta$)求解。
2.13 关节空间与笛卡尔空间运动的关联
- Q1(对应 FK):若机器人在关节空间移动 $\Delta\theta$,它在笛卡尔空间会移动多少?
- Q2(对应 IK):若想让末端执行器在笛卡尔空间移动 $\Delta x$,应如何改变关节位姿?
2.14 旋转群 $\mathbb{SO}(3)$ 与刚体变换群 $\mathbb{SE}(3)$
$\mathbb{SO}(3)$:旋转空间(Special Orthogonal Group)
$$\mathbb{SO}(n) = \{ R \in \mathbb{R}^{n\times n} : \det(R) = 1,\ R R^T = I \}$$
“Group(群)”:粗略说,对矩阵乘法封闭;“Orthogonal(正交)”:$R R^T = I$;“Special(特殊)”:$\det(R) = 1$。
$\mathbb{SO}(2)$:2D 旋转,$1$ DoF;$\mathbb{SO}(3)$:3D 旋转,$3$ DoF。
$\mathbb{SE}(3)$:刚体变换空间(Special Euclidean Group)
$$\mathbb{SE}(3) = \left\{ T = \begin{bmatrix} R & \mathbf{t} \\ 0 & 1 \end{bmatrix},\ R \in \mathbb{SO}(3),\ \mathbf{t} \in \mathbb{R}^3 \right\}$$
“Euclidean(欧氏)”体现在 $R$ 与 $\mathbf{t}$;“Special”:$\det(R) = 1$。共 $6$ DoF。
我们需要对 $\mathbb{SO}(3)$ 与 $\mathbb{SE}(3)$ 有理论理解,核心是其参数化(parameterization):在 $\mathbb{R}^d$ 与 $\mathbb{SO}(3)$ 之间寻找映射 $f(\theta) = R_\theta$,用实数记录 $R \in \mathbb{SO}(3)$。
2.15 欧拉角(Euler Angle)参数化
欧拉角非常直观。绕各主轴的基本旋转矩阵为:
$$R_x(\alpha) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\alpha & -\sin\alpha \\ 0 & \sin\alpha & \cos\alpha \end{bmatrix},\quad R_y(\beta) = \begin{bmatrix} \cos\beta & 0 & \sin\beta \\ 0 & 1 & 0 \\ -\sin\beta & 0 & \cos\beta \end{bmatrix},\quad R_z(\gamma) = \begin{bmatrix} \cos\gamma & -\sin\gamma & 0 \\ \sin\gamma & \cos\gamma & 0 \\ 0 & 0 & 1 \end{bmatrix}$$
任意旋转:$R = R_z(\alpha)\, R_y(\beta)\, R_x(\gamma)$。
欧拉角的不唯一性(Inspection)
欧拉角对某些旋转不唯一。课件例子:
$$R_z(45^\circ)R_y(90^\circ)R_x(45^\circ) = R_z(90^\circ)R_y(90^\circ)R_x(90^\circ) = \begin{bmatrix} 0 & 0 & 1 \\ 0 & 1 & 0 \\ -1 & 0 & 0 \end{bmatrix}$$
万向锁(Gimbal Lock)
此时改变 $\alpha$ 和 $\gamma$ 产生相同的效果,一个自由度消失了!
2.16 角-轴参数化(Angle-Axis Parameterization)与 Rodrigues 公式
欧拉定理(Euler's Theorem)
任意旋转都等价于绕一个固定轴 $\hat{\omega} \in \mathbb{R}^3$($\|\hat{\omega}\| = 1$)转过一个正角度 $\theta$。其中 $\hat{\omega}$ 是旋转轴的单位向量,$\theta$ 是旋转角,记 $R \in \mathbb{SO}(3) := \text{Rot}(\hat{\omega}, \theta)$。
反对称矩阵(Skew-Symmetric Matrix)
$A$ 反对称 $\Leftrightarrow A = -A^T$。反对称矩阵算子:
$$a = \begin{bmatrix} a_1 \\ a_2 \\ a_3 \end{bmatrix},\quad [a] := \begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{bmatrix}$$
叉积可写为线性变换:$a \times b = [a]\,b$。
由 $\hat{\omega}$ 与 $\theta$ 求 $R$
可证明对任意 $x \in \mathbb{R}^3$:
$$\text{Rot}(\hat{\omega}, \theta)\,x = x + (\sin\theta)\,\hat{\omega} \times x + (1 - \cos\theta)\,\hat{\omega} \times (\hat{\omega} \times x) = \left\{ I + [\hat{\omega}]\sin\theta + [\hat{\omega}]^2(1 - \cos\theta) \right\} x \quad (1)$$
利用 $[\hat{\omega}]^3 = -[\hat{\omega}]$ 及 $\sin, \cos$ 的 Taylor 展开:
$$\text{Rot}(\hat{\omega}, \theta)\,x = \left( I + \theta[\hat{\omega}] + \frac{\theta^2}{2!}[\hat{\omega}]^2 + \frac{\theta^3}{3!}[\hat{\omega}]^3 + \cdots \right) x \quad (2)$$
对照指数函数的 Taylor 展开 $e^x = 1 + x + \frac{1}{2!}x^2 + \frac{1}{3!}x^3 + \cdots$,形式上得到:
$$\text{Rot}(\hat{\omega}, \theta)\,x = e^{[\hat{\omega}]\theta}\,x,\quad \forall x \in \mathbb{R}^3 \quad (3)$$
即 $\text{Rot}(\hat{\omega}, \theta) \equiv e^{[\hat{\omega}]\theta}$,其中矩阵指数定义为 $e^{[\hat{\omega}]\theta} = I + \theta[\hat{\omega}] + \frac{\theta^2}{2!}[\hat{\omega}]^2 + \frac{\theta^3}{3!}[\hat{\omega}]^3 + \cdots$。
Rodrigues 公式(Rodrigues Formula)
由 $[\hat{\omega}]^3 = -[\hat{\omega}]$ 与 $\sin, \cos$ 的 Taylor 展开,将无穷级数求和得到闭式:
$$e^{[\hat{\omega}]\theta} = I + [\hat{\omega}]\sin\theta + [\hat{\omega}]^2(1 - \cos\theta)$$
在角-轴表示中,$\vec{\theta} = \hat{\omega}\theta$ 也称为旋转向量(rotation vector)或指数坐标(exponential coordinate)。
角-轴参数化是否唯一?
不唯一,原因有三:
- $(\hat{\omega}, \theta)$ 与 $(-\hat{\omega}, -\theta)$ 给出相同旋转;
- 当 $R = I$ 时 $\theta = 0$,而 $\hat{\omega}$ 可任意;
- $(\hat{\omega}, \pi)$ 与 $(-\hat{\omega}, \pi)$ 给出相同旋转(此时 $\text{tr}(R) = -1$)。
若限制 $\theta \in (0, \pi)$,则存在唯一参数化:
$$\theta = \arccos\left[ \frac{1}{2}\big(\text{tr}(R) - 1\big) \right],\qquad [\hat{\omega}] = \frac{1}{2\sin\theta}\,(R - R^T)$$
2.17 旋转之间的距离(Distance between Rotations)
如何度量两个旋转 $(R_1, R_2)$ 之间的距离?一个自然的视角是度量把处于 $R_1$ 位姿的物体转到 $R_2$ 位姿所需的(最小)「努力」:
因 $(R_2 R_1^T) R_1 = R_2$,故
$$\text{dist}(R_1, R_2) = \theta(R_2 R_1^T) = \arccos\left[ \frac{1}{2}\big(\text{tr}(R_2 R_1^T) - 1\big) \right]$$
即把相对旋转 $R_2 R_1^T$ 对应的角-轴转角作为距离。
本讲重点回顾
1. 运动学 vs 动力学:运动学只描述运动(位置/速度/加速度),不考虑力;动力学从力与力矩建模到运动。
2. 机器人结构:连杆(link)串联、关节(joint)连接;DoF = 定义位形所需的独立参数数;R/P 关节各 $1$ DoF,球关节 $3$ DoF;base link 固定附 $\mathcal{F}_s$,end-effector 附 $\mathcal{F}_e$。
3. 刚体位姿:用 $(R_{s\to b}, \mathbf{t}_{s\to b})$ 表示(先转后平移);因含平移,刚体变换非线性。
4. 齐次坐标:$\tilde{x} = \begin{bmatrix} x \\ 1 \end{bmatrix}$,$T = \begin{bmatrix} R & \mathbf{t} \\ 0 & 1 \end{bmatrix}$,把刚体变换写为线性形式;复合规则 $T_{3\to 1} = T_{3\to 2}T_{2\to 1}$,换系 $T_{2\to 1} = T_{1\to 2}^{-1}$。
5. FK / IK:FK 沿运动链复合 $T_{s\to e} = f(\theta)$;IK 反求 $\theta$,可能多解/无解;Pieper 准则(三连续转轴交于一点或平行)是闭式 IK 解存在的充分非必要条件,UR5 满足之。
6. $\mathbb{SO}(3)$ / $\mathbb{SE}(3)$:$\mathbb{SO}(3)$ 满足 $\det R = 1, RR^T = I$($3$ DoF);$\mathbb{SE}(3)$ 为刚体变换($6$ DoF)。
7. 旋转参数化:欧拉角直观但不唯一且有万向锁;角-轴 + Rodrigues 公式 $e^{[\hat{\omega}]\theta} = I + [\hat{\omega}]\sin\theta + [\hat{\omega}]^2(1-\cos\theta)$,限制 $\theta \in (0,\pi)$ 可唯一;旋转距离 $\text{dist}(R_1,R_2) = \arccos\frac{1}{2}(\text{tr}(R_2 R_1^T)-1)$。
第 3 讲 · 机器人学 II
本讲围绕一个核心问题展开:如何表示三维空间中的旋转(orientation / rotation)。我们依次学习旋转矩阵(rotation matrix)、特殊正交群 $\mathbb{SO}(3)$、欧拉角(Euler angles)及其万向锁(gimbal lock)问题、轴角表示(axis-angle)与 Rodrigues 公式、四元数(quaternion),并在最后系统对比各种旋转表示的优劣。课程末尾还简要引入运动规划(motion planning)与配置空间(configuration space)。本讲也是 Assignment 1 的理论基础——作业要求实现一个处理旋转的工具箱,并对 Galbot 7 自由度机械臂做正运动学(forward kinematics)。
旋转矩阵($9$ 数)$\to$ 欧拉角($3$ 数,有万向锁)$\to$ 轴角($3$~$4$ 数)$\to$ 四元数($4$ 数,工程首选)。
3.1 旋转是刚体运动:两条基本性质
旋转(rotation)属于刚体位移(rigid body displacement)。一个线性变换 $R$ 要成为旋转,必须满足两条重要性质:
- 保持长度(preserves lengths):对任意向量 $p$,有 $\|Rp\| = \|p\|$。
- 保持叉积(preserves cross products):$Rp \times Rq = R(p\times q)$。
这两条性质共同推出旋转矩阵必须满足的代数条件:
旋转矩阵的定义性质
$$RR^{T} = R^{T}R = I,\qquad \det R = 1$$
第一式说明 $R$ 是正交矩阵(orthogonal matrix),即其逆等于转置 $R^{-1}=R^{T}$;第二式 $\det R = 1$ 排除了反射(镜像),保证 $R$ 是真正的旋转而非翻转手性。
3.2 特殊正交群 $\mathbb{SO}(3)$
所有 $n$ 维旋转矩阵的集合构成一个群(group),称为特殊正交群(Special Orthogonal Group):
$\mathbb{SO}(n)$ 的定义
$$\mathbb{SO}(n) = \{\, R \in \mathbb{R}^{n\times n} : \det(R) = 1,\ RR^{T} = I \,\}$$
名称中每个词都对应一条性质:
| 术语 | 含义 |
|---|---|
| Group(群) | 大致来说,在矩阵乘法下封闭(closed under matrix multiplication)——两个旋转相乘仍是旋转。 |
| Orthogonal(正交) | $RR^{T} = I$。 |
| Special(特殊) | $\det(R) = 1$。 |
不同维度的旋转群自由度不同:
| 群 | 含义 | 自由度(DoF) |
|---|---|---|
| $\mathbb{SO}(2)$ | 2D 旋转 | $1$ |
| $\mathbb{SO}(3)$ | 3D 旋转 | $3$ |
3.3 旋转矩阵作为表示的两个问题
用 $3\times 3$ 旋转矩阵直接表示旋转虽然直观、便于定义概念,但作为存储/计算的表示有两大缺点:
- 效率(efficiency):旋转本身只有 $3$ 个自由度,而旋转矩阵却用 $9$ 个数来表示,存在冗余。这在云—边—端(Cloud–Edge–Terminal)、嵌入式平台(如 NVIDIA Jetson Thor)等资源受限场景下尤为不利。
- 数值稳定性(numerical stability):经过多次连乘后,由于浮点精度限制,矩阵会累积数值误差,逐渐违反正交性,需要不断重新正交化来维持 $RR^{T}=I$。
3.4 欧拉角(Euler Angles)
欧拉角(Euler angles)是 Leonhard Euler 引入的三个角度,用来描述刚体相对于固定坐标系的姿态。其思想是:任意旋转都可以分解为绕三个主轴(principal axes)的依次旋转。
绕各主轴旋转的基本旋转矩阵为:
绕主轴的基本旋转
绕 $x$ 轴旋转 $\alpha$:
$$R_x(\alpha) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\alpha & -\sin\alpha \\ 0 & \sin\alpha & \cos\alpha \end{bmatrix}$$
绕 $y$ 轴旋转 $\beta$:
$$R_y(\beta) = \begin{bmatrix} \cos\beta & 0 & \sin\beta \\ 0 & 1 & 0 \\ -\sin\beta & 0 & \cos\beta \end{bmatrix}$$
绕 $z$ 轴旋转 $\gamma$:
$$R_z(\gamma) = \begin{bmatrix} \cos\gamma & -\sin\gamma & 0 \\ \sin\gamma & \cos\gamma & 0 \\ 0 & 0 & 1 \end{bmatrix}$$
任意旋转可由三个基本旋转复合而成(yaw–pitch–roll 约定):
$$R = R_z(\gamma)\,R_y(\beta)\,R_x(\alpha)$$
3.5 万向锁(Gimbal Lock)
欧拉角最致命的缺陷是万向锁(gimbal lock):在某些姿态下会损失一个自由度。以 $\beta = \pi/2$ 为例:
$\beta=\pi/2$ 时的退化
$$R = R_z(\gamma)\,R_y(\pi/2)\,R_x(\alpha) = \begin{bmatrix} 0 & 0 & 1 \\ \sin(\alpha+\gamma) & \cos(\alpha+\gamma) & 0 \\ -\cos(\alpha+\gamma) & \sin(\alpha+\gamma) & 0 \end{bmatrix}$$
注意结果矩阵只依赖于 $\alpha+\gamma$ 这个和。这意味着改变 $\alpha$ 和改变 $\gamma$ 产生相同的效果——两个自由度坍缩成一个,一个自由度消失了。
1. 不唯一(not unique):无穷多组 $(\alpha,\gamma)$ 给出同一旋转。
2. 不可达(not realizable):在这些奇异点,目标空间(旋转)中的某些变化无法由源空间(欧拉角)的变化实现。
欧拉角小结
- 欧拉角能参数化每一个旋转,且可解释性好。
- 但在某些点处不是唯一表示。
- 存在一些点,目标空间(旋转)中并非每个变化都能由源空间(欧拉角)的变化实现——即奇异性(singularity)。
3.6 轴角表示与欧拉定理(Axis-Angle & Euler's Theorem)
欧拉定理(Euler's Theorem):任意一个旋转都等价于绕某个固定轴(fixed axis)$\hat{\omega}\in\mathbb{R}^3$(单位向量 $\|\hat{\omega}\|=1$)转过一个正角度 $\theta$。
- $\hat{\omega}$:旋转轴(rotation axis)的单位向量。
- $\theta$:旋转角度(angle of rotation)。
- 记 $R \in \mathbb{SO}(3) = \mathrm{Rot}(\hat{\omega}, \theta)$。
Rodrigues 公式
给定轴 $\hat{\omega}$ 和角度 $\theta$,如何得到 $R\in\mathbb{SO}(3)$?将向量 $x$ 绕轴旋转可写为:
Rodrigues 旋转公式(向量形式)
$$\mathrm{Rot}(\hat{\omega},\theta)\,x = x + (\sin\theta)\,\hat{\omega}\times x + (1-\cos\theta)\,\hat{\omega}\times(\hat{\omega}\times x)$$
写成矩阵形式(其中 $[\hat{\omega}]$ 表示 $\hat{\omega}$ 的反对称叉乘矩阵):
$$R = e^{[\omega]\theta} = I + [\omega]\sin\theta + [\omega]^2 (1-\cos\theta)$$
轴角表示是否唯一?
第一个问题:轴角参数化唯一吗?不唯一,存在以下歧义:
- $(\hat{\omega},\theta)$ 与 $(-\hat{\omega},-\theta)$ 表示同一旋转。
- 当 $R = I$ 时,$\theta = 0$,而轴 $\hat{\omega}$ 可以是任意方向。
- $(\hat{\omega},\pi)$ 与 $(-\hat{\omega},\pi)$ 表示同一旋转(此时 $\mathrm{tr}(R) = -1$)。
若把角度限制在 $\theta \in (0,\pi)$,则存在唯一参数化,且可由旋转矩阵反解:
由 $R$ 反求轴角($\theta\in(0,\pi)$)
$$\theta = \arccos\!\left(\tfrac{1}{2}\big[\mathrm{tr}(R) - 1\big]\right),\qquad [\hat{\omega}] = \frac{1}{2\sin\theta}\,\big(R - R^{T}\big)$$
3.7 四元数(Quaternion)
四元数(quaternion)由 Sir William Rowan Hamilton 于 1843 年发现,是复数到更高维的推广,被广泛用于表示三维旋转。
从单位复数说起
先回顾单位模长复数 $a + i\,b$(满足 $a^2 + b^2 = 1$):
- 可写为 $b = \sin\phi$,$a = \cos\phi$,其中 $\phi = \mathrm{atan2}(b, a)$。
- 乘以 $i$ 相当于在平面内逆时针旋转 $90^{\circ}$:$(a+ib)\,i = -b + i\,a$。
四元数把这一思想推广到三维旋转。
四元数作为"广义复数"
四元数的定义
$$q = w + x\mathbf{i} + y\mathbf{j} + z\mathbf{k}$$
其中 $w$ 为实部(real part),$\vec{\nu} = (x,y,z)$ 为虚部(imaginary part)。
三个虚单位满足 Hamilton 关系:
- $\mathbf{i}^2 = \mathbf{j}^2 = \mathbf{k}^2 = \mathbf{i}\mathbf{j}\mathbf{k} = -1$
- 反交换(anti-commutative):$\mathbf{i}\mathbf{j} = \mathbf{k} = -\mathbf{j}\mathbf{i}$,$\mathbf{j}\mathbf{k} = \mathbf{i} = -\mathbf{k}\mathbf{j}$,$\mathbf{k}\mathbf{i} = \mathbf{j} = -\mathbf{i}\mathbf{k}$
一般四元数的性质
用向量形式记 $q = (w, \vec{\nu})$:
四元数运算
乘积(product):对 $q_1 = (w_1, \vec{\nu}_1)$ 和 $q_2 = (w_2, \vec{\nu}_2)$,
$$q_1 q_2 = \big(w_1 w_2 - \vec{\nu}_1^{T}\vec{\nu}_2,\ \ w_1\vec{\nu}_2 + w_2\vec{\nu}_1 + \vec{\nu}_1\times\vec{\nu}_2\big)$$
乘法不可交换(not commutable),因为 $\vec{\nu}_1\times\vec{\nu}_2 \neq \vec{\nu}_2\times\vec{\nu}_1$。
共轭(conjugate):$q^{*} = (w, -\vec{\nu})$
范数(norm):$\|q\|^2 = w^2 + \vec{\nu}^{T}\vec{\nu} = q q^{*} = q^{*} q$
逆(inverse):$q^{-1} = \dfrac{q^{*}}{\|q\|^2}$
3.8 单位四元数表示旋转
一个单位四元数(unit quaternion) $\|q\| = 1$ 可以表示一个旋转:
- 四个数加上一个约束($\|q\|=1$)$\to$ 正好 $3$ 个自由度,与旋转的 DoF 吻合。
- 几何上,单位四元数构成 4D 单位球面的"壳"(the shell of a 4D sphere),即 $\mathbb{S}^3$。
从轴角构造旋转四元数
指数坐标(轴角)$\to$ 四元数
$$q = \big[\cos(\theta/2),\ \sin(\theta/2)\,\hat{\omega}\big]$$
可见四元数与轴角表示非常接近(very close to angle-axis)!
四元数 $\to$ 指数坐标:
$$\theta = 2\arccos(w),\qquad \hat{\omega} = \begin{cases} \dfrac{\vec{\nu}}{\sin(\theta/2)}, & \theta \neq 0 \\[4pt] 0, & \theta = 0 \end{cases}$$
用四元数旋转向量与复合旋转
- 旋转一个向量 $\vec{x}$:先将其增广为 $x = (0, \vec{x})$,再计算 $x' = q\,x\,q^{-1}$。
- 复合旋转(compose rotations):先用 $q_1$ 再用 $q_2$,即 $q_2(q_1 x q_1^{*})q_2^{*}$。
- 由于 $q_2(q_1 x q_1^{*})q_2^{*} = (q_2 q_1)\,x\,(q_1^{*} q_2^{*})$,复合旋转就和四元数相乘一样简单!
- 双重覆盖(double-covering):每个旋转对应两个四元数 $q$ 与 $-q$。
3.9 四元数 vs. 旋转矩阵
| 对比项 | 四元数 | 旋转矩阵 |
|---|---|---|
| 存储(storage) | $4$ 个浮点数 $(x,y,z,w)$ | $9$ 个数($3\times 3$ 矩阵) |
| 每次乘法运算 | $16$ 次乘法 + $12$ 次加法 | $27$ 次乘法 + $18$ 次加法 |
| 数值稳定性 | 归一化后保持单位模长,稳定 | 连续运算累积误差,可能破坏正交性 |
结论:四元数在存储、计算量与数值稳定性上都优于旋转矩阵。
四元数的工程注意事项
- 四元数计算开销低,是物理引擎与机器人内部的常用表示。
- 注意约定(convention)顺序,分量排列有两种习惯,混用会出错:
(w, x, y, z):SAPIEN、transforms3d、Eigen、Blender、MuJoCo、V-Rep(x, y, z, w):ROS、PhysX、PyBullet
3.10 四元数与轴角、旋转矩阵的相互转换
轴角 ↔ 四元数
轴角 $\to$ 四元数:$\;q = \big[\cos(\theta/2),\ \sin(\theta/2)\,\hat{\omega}\big]$
四元数 $\to$ 轴角:$\;\theta = 2\arccos(w)$,且
$$\hat{\omega} = \begin{cases} \dfrac{\vec{\nu}}{\sin(\theta/2)}, & \theta \neq 0 \\[4pt] 0, & \theta = 0 \end{cases}$$
四元数与旋转矩阵之间也有闭式转换公式(课件以图示给出,可调用 transforms3d 等库直接完成)。
3.11 四元数间的距离
如何度量两个四元数 $(q_1, q_2)$ 之间的距离?
- 球面 $\mathbb{S}^3$ 上的距离(即两者夹角):$\langle p, q\rangle = \arccos(p\cdot q)$。
- 对应旋转之间的距离: $$\mathrm{dist}(p, q) = 2\arccos(|p\cdot q|) = 2\min\{\langle p, q\rangle,\ \langle p, -q\rangle\}$$ (取绝对值是为了处理 $q$ 与 $-q$ 表示同一旋转的双重覆盖。)
关键结论:旋转 $(R_1, R_2)$ 之间的距离与对应四元数 $q(R_1)$、$q(R_2)$ 之间的球面距离成线性关系。这一性质是后面均匀采样的理论依据。
3.12 四元数插值与球面线性插值(SLERP)
在两个姿态之间做平滑过渡(如动画、运动规划)时,为何不直接用线性插值?
- 线性插值结果需要重新归一化(need to be normalized)。
- 线性插值不具有恒定的旋转速率(does not have a constant rate of rotation)。
为此使用球面线性插值(Spherical Linear Interpolation, SLERP):
- 用四元数能很好地表示,适用于动画与运动规划。
- 给定两个四元数,沿单位四元数球面上的最短路径(测地线 geodesic,大圆 Great Circle)插值。
- SLERP 天然适用于任意维度,沿球面上的大圆弧运动,给出绕固定轴的均匀角速度(uniform angular velocity)。
1. 当 $q_a$ 与 $q_b$ 夹角接近 $0$ 时,用小角度近似(退化为线性插值)。
2. 当夹角接近 $180^{\circ}$ 时不存在唯一最短测地线,可任选一条。
3. 因 $q$ 与 $-q$ 是同一旋转:若 $q_a$ 与 $q_b$ 夹角 $<\pi/2$ 则直接在两者间 slerp;否则在 $q_a$ 与 $-q_b$ 间 slerp(以走最短路径)。
3.13 在 $\mathbb{SO}(3)$ 上的均匀采样
从 $\mathbb{SO}(3)$ 均匀采样一个旋转,等价于从 $\mathbb{S}^3$ 均匀采样一个单位四元数。
- 为什么等价?因为两个旋转之间的距离与对应四元数的球面距离成线性关系。
- 如何均匀采样 $\mathbb{S}^3$?最简单的方法是从标准正态分布 $\mathcal{N}(0, I_{4\times 4})$ 采样一个 4D 变量,再归一化到单位长度。
- 为什么可行?因为标准正态分布是各向同性的(isotropic),归一化后在球面上均匀分布。
- 需要时再把该单位四元数转换为旋转矩阵即可。
3.14 常用工具与"为什么用四元数"
实用资源(resources):
- Python 中可用
transforms3d库处理旋转转换。 - 需要可微变换(differentiable transformations)时可用
Kornia,但要注意其数值性质。 ceres是一个很有用的 C++ 优化库。
为什么用四元数(Why Quaternions)?
- 实践中非常有用且流行:快速、运算少、不冗余(4D 紧凑参数化,计算高效)。
- 对增量变化数值稳定(numerically stable for incremental changes)。
- 复合旋转优雅(composes rotations nicely)。
- 常见做法:全程用四元数计算,最后再转成矩阵。
3.15 旋转表示总对比
| 表示 | 求逆? | 复合? | 域内局部运动能实现 $\mathbb{SO}(3)$ 任意局部运动? |
|---|---|---|---|
| 旋转矩阵 Rotation Matrix | ✔ | ✔ | N/A |
| 欧拉角 Euler Angle | 复杂 | 复杂 | 否(No,万向锁) |
| 轴角 Angle-axis | ✔ | 复杂 | ? |
| 四元数 Quaternion | ✔ | ✔ | ✔ |
(其中 "?" 表示除单个例外点外无奇异性。)
• 用旋转矩阵来定义概念;
• 用欧拉角来可视化旋转;
• 用轴角表示来可视化旋转并计算导数;
• 用四元数来写高效代码。
关于面向学习(learning)的旋转表示连续性问题,可参考 CVPR'19 论文 On the Continuity of Rotation Representations,以及 He Wang 实验室的 TPAMI 论文 Towards Robust Probabilistic Modeling on SO(3) via Rotation Laplace Distribution。
3.16 运动规划与配置空间(初步)
本讲末尾引入运动规划(motion planning)与配置空间(configuration space,记作 $C$ 空间)的概念,为后续课程铺垫。重点提到机器人碰撞建模:
- 每个连杆(link)的碰撞网格(collision mesh)定义在 URDF 文件中。
- 用正运动学(forward kinematics)从关节配置 $q$ 得到机器人的碰撞网格在空间中的位姿。
- 做碰撞检测(collision check),判断配置 $q$ 是否落入碰撞配置集合 $C_{\text{coll}}$。
- 课件以 cuRobo 中的机器人表示为例。
本讲重点回顾
1. 旋转矩阵性质:$RR^{T} = R^{T}R = I$,$\det R = 1$;属于 $\mathbb{SO}(3)$,$3$ 个 DoF 却用 $9$ 个数(冗余 + 易丢正交性)。
2. 欧拉角:$R = R_z(\gamma)R_y(\beta)R_x(\alpha)$,直观但有万向锁($\beta=\pi/2$ 时 $\alpha$、$\gamma$ 效果相同,丢一个 DoF),表示不唯一、存在奇异点。
3. 轴角 + Rodrigues:欧拉定理——任意旋转 = 绕单位轴 $\hat{\omega}$ 转 $\theta$;$R = e^{[\omega]\theta} = I + [\omega]\sin\theta + [\omega]^2(1-\cos\theta)$。限制 $\theta\in(0,\pi)$ 可得唯一解。
4. 四元数:$q = w + x\mathbf{i} + y\mathbf{j} + z\mathbf{k}$;单位四元数表示旋转($4$ 数 $+1$ 约束 $=3$ DoF);$q = [\cos(\theta/2), \sin(\theta/2)\hat{\omega}]$;旋转向量 $x' = qxq^{-1}$;复合 = 相乘;双重覆盖($q\equiv-q$)。
5. 取舍:定义概念用矩阵,可视化用欧拉角/轴角,求导用轴角,写高效代码用四元数;SLERP 做球面插值;$\mathbb{SO}(3)$ 均匀采样 = $\mathbb{S}^3$ 上正态采样并归一化。
第 4 讲 · 机器人学 III
本讲主题是运动规划(Motion Planning)与控制基础(Control)。从机器人技术栈(robotics stack)的整体视角出发,讲清楚"从一个位姿安全地走到另一个位姿"这件事如何被拆解为:先在配置空间里搜索一条无碰撞路径(path),再把路径做时间参数化变成轨迹(trajectory),最后由控制器(controller)在真实系统上可靠地跟踪执行。
4.1 机器人技术栈中的大图(Big Picture in the Robotics Stack)
课件首先给出一条从"任务目标"到"机器人执行"的流水线。理解这条链路有助于把后续每个概念放到正确的位置上。
| 阶段 | 名称 | 做什么 | 核心问题 |
|---|---|---|---|
| Goal | task / target | 给定任务或目标 | 要去哪里? |
| Motion Planning | collision-free search | 在无碰撞空间中搜索可行路径 | 什么运动是可行的?(what motion is feasible?) |
| Trajectory | path / waypoints | 把路径变成带时间信息的轨迹 | 何时到达、走多快? |
| Control | track & stabilize | 跟踪并稳定该轨迹 | 如何执行它?(how do we execute it?) |
| Robot | execution | 实际执行运动 | — |
Planning 问:什么运动是无碰撞且几何可行的?(what motion is collision-free and geometrically feasible?)
Control 问:如何在真实系统中可靠地跟踪该运动?(how do we track that motion reliably in the real system?)
4.2 运动规划是什么(Motion Planning)
运动规划要回答的问题是:机器人如何从一个位姿(pose)安全地移动到世界中的另一个位姿。规划的产物是一条从起点到目标的无碰撞路径(collision-free path from start to goal),沿途需要绕开障碍物(obstacle)。
起点与目标各自由以下信息描述:
| 项 | 起始状态(start) | 目标状态(goal) |
|---|---|---|
| 关节配置(joint configuration, qpos) | $q_{\text{start}}$ | $q_{\text{goal}}$ |
| 末端执行器位姿(end-effector pose) | $R_{\text{start}}, T_{\text{start}}$ | $R_{\text{goal}}, T_{\text{goal}}$ |
4.3 工作空间 vs 配置空间(Workspace vs Configuration Space)
| 工作空间(Workspace) | 配置空间(Configuration Space,C-space) |
|---|---|
| 真实的 3D 世界(real 3D world) | 每一个点对应机器人的一组关节配置(one point corresponds to one joint configuration) |
| 包含障碍物、机器人、货架、物体等几何实体 | 抽象的高维配置参数空间 |
4.3.1 为什么要在配置空间里做规划?
- 一个可行运动必须同时满足几何约束与关节约束(must respect geometry and constraints)。
- 机器人不是一个质点(the robot is not a point):它的形状(shape)、各关节(joints)以及关节限位(limits)都必须被考虑。直接在工作空间里处理这些很困难。
- 碰撞约束依赖于机器人的完整配置(collision constraints depend on the full robot configuration),而非单点位置。
- 注意:在配置空间中,连接起点与目标的一条直线段也可能发生碰撞(a straight line connecting start to goal may get collision)——所以不能简单地"走直线"。
4.4 问题形式化(Problem Formulation)
运动规划的输入与输出
输入(Input):起始状态 $q_{\text{start}}$、目标状态 $q_{\text{goal}}$,以及无碰撞空间 $C_{\text{free}}$。
输出(Output):一条连接起点到目标的可行路径(feasible path)——注意输出的是路径,而不是动作(not actions!)。
4.5 碰撞检测(Collision Check)
判断某个配置 $q$ 是否落在 $C_{\text{free}}$ 中,靠的就是碰撞检测。它在规划算法内部被反复调用,因此必须又快又准(need to be very fast and maintain accuracy)。矛盾在于:精确的碰撞检测非常慢(accurate collision check is very slow)。
4.5.1 机器人的碰撞建模(Collision Modeling)
- 渲染用的视觉网格 $\neq$ 碰撞用的碰撞网格(visual mesh for rendering $\neq$ collision mesh for collision check)。
- 每个连杆(link)的碰撞网格在
URDF中定义,通常是对精确几何的近似,例如用大量球体(spheres)来逼近。 - 为什么用球体?因为球与球之间的碰撞检测极其简单(collision check between spheres are so easy)。
- 用正向运动学(forward kinematics)从关节配置 $q$ 得到机器人各连杆碰撞网格在世界中的位置。
4.5.2 更进一步的近似:凸形状(Convex Shape)
- 凸–凸碰撞检测(convex–convex collision checking)在 CPU 上通常非常快。
- 对盒子(box)、球(sphere)、胶囊(capsule)等简单形状,单次检测往往只需几微秒(microseconds)。
- 对更一般的凸网格(convex meshes),通常也只需几十到几百微秒。
- 但运动规划中规划器可能要测试成千上万个状态与边(edges);即使单次很快,总计算时间仍可能相当可观。
4.5.3 凸分解(Convex Decomposition)
| 方法 | 特点 |
|---|---|
| Convex Hull(凸包) | 得到单个凸网格,最高效,但不够精确。 |
| Exact Convex Decomposition(精确凸分解) | NP-hard,不实用,会产生大量簇(clusters)。 |
| Approximate Convex Decomposition(ACD,近似凸分解) | 用最少数量的簇对网格三角面做划分,同时保证每个簇的凹度(concavity)低于用户设定的阈值。 |
4.6 基于网格的搜索(Grid-based Search)
- 把整个配置空间 $C$ 离散化(discretize)。
- 计算出无碰撞集合 $C_{\text{free}}$。
- 用搜索算法(如 A*)在网格上找路径。
4.7 采样式算法(Sample-based Algorithm)
为绕开维数灾难,采样式算法不显式构造整个 $C_{\text{free}}$,而是通过随机采样配置并用碰撞检测判断其可行性,逐步在配置空间中"探索"出连通结构。两大代表是 PRM 与 RRT。
4.7.1 概率路图法(Probabilistic Roadmap Method, PRM)
PRM 的基本流程(pipeline):在配置空间中随机采样大量配置点,用碰撞检测拒绝落在障碍中的点(拒绝采样 Rejection Sampling),将保留的无碰撞点之间用可行的局部连接相连,构成一张路图(roadmap,图结构);随后在这张图上做图搜索找到起点到目标的路径。它适合多次查询(multi-query)同一环境。
4.7.2 改进采样策略
| 采样策略 | 思想 |
|---|---|
| Gaussian Sampling(高斯采样) | 偏向在障碍物边界附近采样:先采一个点,再在其附近按高斯分布采第二个点,保留"一个在自由空间、一个在障碍内"的样本,从而在障碍边缘加密采样。 |
| Bridge Sampling(桥采样) | 专门针对狭窄通道:采两个落在障碍中的点,若其中点恰在自由空间,则该中点像一座"桥"跨越狭窄通道,被保留下来。 |
4.7.3 快速探索随机树(Rapidly-exploring Random Trees, RRT)
RRT 从起点开始增量式生长一棵树。基本 pipeline 是反复执行:随机采样一个配置 $q_{\text{rand}}$,找到树上离它最近的节点 $q_{\text{near}}$,然后做扩展操作(Extend Operation)——从 $q_{\text{near}}$ 朝 $q_{\text{rand}}$ 方向前进一小步得到 $q_{\text{new}}$,若该段无碰撞则把 $q_{\text{new}}$ 加入树;不断重复直到树到达目标附近。RRT 适合单次查询(single-query)。
4.7.4 RRT-Connect
RRT-Connect(Kuffner & LaValle, ICRA 2000)从起点和目标各生长一棵树,并用更"贪心"的连接策略让两棵树相向生长、尝试连通。它是单次查询路径规划中非常高效的方法,也是后文 OMPL 中的默认规划器。
4.8 最优性与捷径化后处理(Shortcutting)
各算法的最优性
RRT 与 RRT-Connect:不具备渐近最优性(not asymptotically optimal)。
PRM:具备渐近最优性(asymptotically optimal),但需要海量采样。
共同问题:PRM 和 RRT 产出的路径往往抖动、不自然(jerky, unnatural)。
Shortcutting(捷径化)是一种非常有用的后处理启发式(post-processing heuristic),用来平滑这些不自然的路径:
- 它是一种局部优化技术,但非常快。在时间预算较短时,它给出的路径甚至比 PRM、RRT 更好。
- 缺点:shortcutting 很快就停止取得进展(stalling out);从长远看,渐近最优算法最终会胜出。
- 解决"停滞"的办法:把 shortcutting 与随机重启(random-restarts)结合起来使用。
4.9 工程实例:OMPL 与 MoveIt
OMPL(The Open Motion Planning Library)是 ROS-MoveIt 中默认的规划库,汇集了大量最新的采样式运动规划算法。其规划器分两类:
| 类型 | 说明 | 代表算法 |
|---|---|---|
| Geometric planners(几何规划器) | 只考虑系统的几何与运动学约束;假设任何可行路径都能被转化成一条动力学可行的轨迹。 | RRT(RRTConnect 默认、RRT*…)、PRM(LazyPRM、PRM*、LazyPRM*…) |
| Control-based planners(基于控制的规划器) | 当系统受微分约束(differential constraints)时使用;依赖状态传播(state propagation)而非简单插值来生成运动。 | RRT、Sparse Stable RRT… |
4.10 从路径到轨迹(From Path to Trajectory)
| 路径(Path,几何) | 轨迹(Trajectory,时间) | |
|---|---|---|
| 告诉我们 | 去哪里(where to go) | 何时到达、走多快(when to be there and how fast) |
| 来源 | 运动规划的输出(RRT、PRM 等) | 把路径映射到一个具体的时间剖面(time profile) |
| 表示 | 配置序列 $q(s),\ s \in [0,1]$ | 时间参数化 $s = s(t) \Rightarrow q(t) = q(s(t))$ |
4.10.1 为什么时间参数化很重要
- 硬件现实:几何路径没有速度概念,但真实关节(如 Franka)有严格物理限制:
· 速度限制 $\dot{q}_{\max}$(电机能转多快);
· 加速度限制 $\ddot{q}_{\max}$(受最大电机力矩 $\tau_{\max}$ 约束)。 - 数学工具:用链式法则(chain rule)把几何路径的变化映射到物理关节的速度与加速度: $$\dot{q} = \frac{dq}{ds}\,\dot{s}, \qquad \ddot{q} = \frac{dq}{ds}\,\ddot{s} + \frac{d^2q}{ds^2}\,\dot{s}^2$$
- RL 联系(RL Connection):若一个强化学习策略(RL policy)输出的目标位置要求的加速度超过 $\ddot{q}_{\max}$,仿真器里也许能成功,但真实机器人会失败——这就是仿真到现实的鸿沟(Sim-to-Real gap)。
4.10.2 时间参数化 $s(t)$ 的实例
- 最小加加速度轨迹(Minimum Jerk Trajectory):用五次多项式(5th-order polynomial)保证平滑的起步与停止,最小化"jerk"(加速度的变化率),从而保护齿轮箱(gearbox)免受磨损。
- 梯形速度(Trapezoidal Velocity):经典工业标准。
- 时间最优路径参数化(Time-Optimal Path Parameterization, TOPP):现代标准,在安全前提下把硬件推到其物理极限(如 TOPP-RA 算法 / Pham 2014)。
4.11 控制系统(Control System)
有了轨迹,最后一步是控制。控制系统的作用是:调节系统行为,使其跟踪参考轨迹 $x_{\text{ref}}(t),\ \dot{x}_{\text{ref}}(t)$,并能应对扰动(disturbances)与不确定性(uncertainties)。控制总是与真实机器人系统紧密绑定。
主要组成:
- 传感器(Sensor):测量状态,如关节角度、速度、力矩/力。
- 控制器(Controller):根据误差计算运动指令。
- 环境/系统(Environment/System):包含执行器(Actuator)(执行运动指令)与系统本体(具有质量、摩擦等物理属性)。
4.11.1 开环 vs 闭环(Open-loop vs Closed-loop)
| 开环控制(Open-loop / Feedforward, FF) | 闭环控制(Closed-loop / Feedback, FB) |
|---|---|
| 控制信号只依据参考,不利用反馈 | 控制器利用误差来调整控制信号 |
| 对模型误差与扰动无能为力 | 对模型不确定性鲁棒;抑制扰动与噪声;能准确跟踪参考信号 |
4.11.2 误差响应指标(Error Response)
跟踪误差与稳态误差
跟踪误差(tracking error):$x_e = x_{\text{ref}} - x$,其中 $x_{\text{ref}}$ 为期望状态、$x$ 为当前状态。
稳态误差(steady-state error):$e_{ss} = \lim_{t \to \infty} x_e(t)$,即当 $t \to \infty$ 时期望与实际之间的最终差值。
| 瞬态响应指标 | 含义 |
|---|---|
| 上升时间(Rise time) | 响应首次到达期望值所需的时间。 |
| 调节时间(Settling time) | 振荡稳定在最终稳态值附近某个小范围(通常 $2\%$ 或 $5\%$)内所需的时间。 |
| 超调(Overshoot) | 响应超过期望值的最大幅度。 |
4.12 PD 控制器(PD Controller)
本节先用一个简单 1-DoF 机械系统建立直觉,再用标准二阶系统形式化调参,最后推广到 Franka / 人形机器人等多自由度真实系统。
4.12.1 1-DoF 质量–弹簧–阻尼系统
系统动力学
$$m\ddot{x} + d\dot{x} + kx = u$$
其中 $m, d, k$ 为常数,分别表示系统的质量(mass)、阻尼(damping)与刚度(stiffness);$u$ 为控制器输出的力;参考为目标位置 $x_{\text{ref}}$。传感器测量位置 $x$ 与速度 $\dot{x}$。
4.12.2 比例控制(P Control)
最直觉的做法是让控制信号正比于跟踪误差 $x_e = x_{\text{ref}} - x$:
P 控制律
$$u = K_p\, x_e = K_p (x_{\text{ref}} - x)$$
$K_p$ 是比例增益,作用像一个虚拟弹簧(virtual spring)。代入系统得:$\ddot{x} + d\dot{x} + (k + K_p)x - K_p x_{\text{ref}} = 0$。
- 小 $K_p$(如 $K_p = 0.2$):响应慢、跟踪误差大、振荡小;系统出现欠调(undershoot),仅靠 P 控制不会收敛到 $x_{\text{ref}}$,存在稳态误差。
- 增大到 $K_p = 3$:响应更快、误差更小,但开始出现超调与振荡。
- 继续增大到 $K_p = 15$:响应更快、误差更小,但振荡更剧烈。
4.12.3 PD 控制(Proportional + Derivative)
PD 控制律
$$u = K_p\, x_e + K_d\, \dot{x}_e$$
D(微分)项 $K_d\,\dot{x}_e$ 是速度反馈项,相当于虚拟阻尼(virtual damping)。
- D 项考虑误差的"未来趋势",对误差变化率做出反应:误差增大时施加更强控制,误差减小时控制更温和。
- 主要作用是减小超调(reduce overshoot)。
- 实例:在 $K_p = 15,\ K_d = 0$ 时剧烈振荡(大超调、长调节时间);$K_d = 1.5$ 时振荡减小;$K_d = 3.5$ 时响应快、误差小、振荡少。
4.12.4 $K_p$ 与 $K_d$ 的角色
| 增益 | 角色 | 效果 | 风险 |
|---|---|---|---|
| $K_p$(比例增益) | "动作"(the Action),对当前误差的响应强度 | 提升速度(减小上升时间)、减小稳态误差 | 过高导致大超调、潜在不稳定 |
| $K_d$(微分增益) | "阻尼"(the Damping),对误差变化率反应、预测未来误差 | 像"刹车",减小超调、缩短调节时间 | 对传感器噪声高度敏感,过大会引起高频抖动(jitter) |
4.12.5 手动调参流程(Manual Tuning)
- 1. 初始化:$K_p, K_d$ 都设为零(用小增益,先确认控制器符号正确、关节朝正确方向运动)。
- 2. 建立速度(调 $K_p$):逐步增大 $K_p$ 直到系统对设定点变化响应迅速;暂时接受超调与振荡,作为"基准"速度。
- 3. 加入阻尼(调 $K_d$):缓慢增大 $K_d$ 来"平滑"响应;观察第一个峰,增大 $K_d$ 直到超调最小、振荡迅速衰减。
- 4. 精修:响应过于迟缓$\to$增大 $K_p$;出现振铃/抖动$\to$增大 $K_d$。
4.13 PID 控制(PID Control)
PID 控制律
$$u = K_p\, x_e + K_i \int x_e\, dt + K_d\, \dot{x}_e$$
I(积分)项 $K_i \int x_e\, dt$ 是误差累积项,用于消除稳态偏差。
- I 项考虑误差的"过去/历史",对误差随时间的累积做出反应:当残余误差持续存在时增大控制量,调用"记忆"把卡住的系统推向目标。
- 能消除稳态误差(ensures $x_e \to 0$ as $t \to \infty$)。
4.13.1 为什么现代机器人常偏好 PD 而非纯 PID?
- PD 对跟踪机械系统通常已足够,更易调、在真实硬件上更鲁棒。
- 许多机器人(尤其机械臂与人形)的主要挑战是快速、稳定的运动,而非消除微小稳态误差。
- 在富接触任务(contact-rich tasks)中,积分作用可能导致不希望的力累积。
现代替代方案:用 PD 控制 + 基于模型的补偿、重力补偿(gravity compensation)、前馈力矩(feedforward torque)来减小或消除稳态误差。
4.14 二阶系统 PD 调参(Second-Order System PD Tuning)
手动调参严重依赖经验与试错。可以借助标准二阶系统来系统地选取 PD 增益。
标准二阶系统
$$\ddot{x} + 2\xi\omega_n \dot{x} + \omega_n^2 x = 0$$
系统行为由两个参数决定:
· 自然频率 $\omega_n$(natural frequency):影响响应时间。
· 阻尼比 $\xi$(damping ratio):影响超调与振荡。$\xi > 1$ 过阻尼(over-damped);$\xi < 1$ 欠阻尼(under-damped);$\xi = 1$ 临界阻尼(critically damped)。
4.14.1 通过配项法求 PD 增益
在质量–弹簧–阻尼例子中(取 $m=1, k=0, d=0, x_{\text{ref}}=0$ 简化),闭环系统化为 $\ddot{x} + K_d \dot{x} + K_p x = 0$。与标准二阶形式逐项匹配:
PD 增益与二阶参数的对应
$$K_p = \omega_n^2, \qquad K_d = 2\xi\omega_n$$
- 与直觉一致:响应越快 $\to$ $\omega_n$ 越大 $\to$ P 增益越大;阻尼越多 $\to$ $\xi$ 越大 $\to$ D 增益越大。
- 该方法用于启发式地设计一组良好的初始 PD 参数。
- 由于模型误差、传感器噪声、电机限制等,仍需精调(finetuning)。
4.15 多自由度系统的 PD 调参(Multi-DoF System)
- 经验法则(rule of thumb):把上一节的二阶调参方法逐关节独立应用——把每个关节当作一个独立的二阶系统。
- 人形机器人实例(以 BeyondMimic 为例):逐关节建模,用反射惯量(reflected inertia)作为关节惯量 $I_j$ 的估计,按二阶系统设计每个关节的 PD 增益。
- 典型设计:自然频率 $f = 10\,\text{Hz}$($\omega_n = 2\pi f \approx 20$,促进适度增益下的柔顺性);阻尼比 $\xi = 2$(过阻尼——因为只建模了关节惯量、忽略连杆惯量等,需要额外阻尼避免振荡)。既不能太硬(接触时会损坏电机),也不能太软(降低跟踪性能)。
· 踝关节(ankle)直接与地面接触、承受冲击,需要更高柔顺性;
· 增大 D 增益虽理论上减振,但会放大速度传感器噪声,不能仅靠高阻尼消振;
· 所有 PD 调参都必须尊重硬件力矩限制(饱和 saturation)。
4.15.1 刚体系统动力学与耦合问题
刚体动力学方程
$$M(q)\ddot{q} + C(\dot{q}, q) = \tau$$
其中 $M(q)$ 为惯量矩阵,$C(\dot{q}, q)$ 含科氏力/重力等项,$\tau$ 为关节力矩。
若对每个关节单独设计 PD 律 $\tau = K_p x_e + K_d \dot{x}_e$,闭环系统 $\ddot{q} = M(q)^{-1}(K_p x_e + K_d \dot{x}_e - C(\dot{q},q))$ 存在两个问题:(1) 动力学通过惯量矩阵 $M(q)$ 相互耦合;(2) 需要额外努力抵消偏置项 $C(\dot{q},q)$(如重力)。
4.15.2 反馈线性化(Feedback Linearization)
机械臂相比人形有更准确的建模、更可靠的传感、更受控的环境,因此可用基于模型的方法系统设计 PD 增益。其中之一是反馈线性化:
反馈线性化
对系统 $M(q)\ddot{q} + C(\dot{q}, q) = \tau$,设计控制律:
$$\tau = M(q)\,u + C(\dot{q}, q)$$
则非线性与耦合动力学被抵消,系统线性化为 $\ddot{q} = u$。再令 $u = K_p x_e + K_d \dot{x}_e$,得到解耦的关节动力学,从而可逐关节调 PD 增益。
4.15.3 其他技巧与总结
- 增益调度(Gain scheduling):不同任务用不同 PD 增益。一般肩关节(shoulder)应更硬(负载更高、惯量更大、基座关节小误差会被放大成末端大误差);腕关节(wrist)应更多阻尼以求柔顺、避免振荡。
本讲重点回顾
1. 机器人技术栈:Goal $\to$ Motion Planning(无碰撞搜索,"什么可行")$\to$ Trajectory(时间参数化)$\to$ Control(跟踪稳定,"如何执行")$\to$ Robot。
2. 运动规划:输入 $q_{\text{start}}, q_{\text{goal}}, C_{\text{free}}$,输出无碰撞路径(不是动作);本质是高维约束空间中的搜索,通常在配置空间中进行。
3. 碰撞检测:视觉网格 $\neq$ 碰撞网格;用球/凸形状近似(URDF),凸–凸检测快(微秒级),但调用上万次仍耗时;凸分解有 Convex Hull / Exact / ACD。
4. 搜索方法:网格搜索(A*)受维数灾难限制;采样式方法是主流——PRM(多查询、渐近最优但需海量采样)、RRT / RRT-Connect(单查询、高效但非渐近最优);高斯/桥采样应对狭窄通道;Shortcutting 做平滑后处理。OMPL/MoveIt 默认 RRTConnect。
5. 路径 vs 轨迹:路径 $q(s)$ 只有几何;轨迹靠时间参数化 $q(t)=q(s(t))$ 加入速度/加速度,必须尊重 $\dot{q}_{\max}, \ddot{q}_{\max}$(否则 Sim-to-Real 失败);Minimum Jerk / TOPP。
6. 控制:开环 FF vs 闭环 FB;指标含上升/调节时间、超调、稳态误差。P 有稳态误差且需权衡快/振;PD($u=K_p x_e + K_d \dot{x}_e$)加虚拟阻尼减超调;PID 加积分消稳态误差但在接触任务中危险。二阶系统调参:$K_p=\omega_n^2,\ K_d=2\xi\omega_n$。多自由度逐关节近似 + 仿真到硬件精调;机械臂可用反馈线性化解耦。
第 5 讲 · 视觉与抓取 I
本讲(Vision and Grasping I)承接前几讲的机器人基础,先收尾控制(Control)部分(重点是 PID 中的积分项 I),再进入抓取(Grasping)主线,并把大量篇幅放在抓取的关键支撑技术——6D 位姿估计(6D pose estimation)上:从相机/位姿定义、PoseCNN、ICP 点云配准,到旋转表示(rotation representation)的连续性问题、正交 Procrustes 求解,再到 FoundationPose、实例级(instance-level)与类别级(category-level,NOCS)位姿估计。
控制回顾(PID 的 I 项 / 为何现代机器人偏好 PD)
$\to$ 机器人栈大图(Kinematics / Motion Planning / Control)
$\to$ 抓取定义与开环抓取流水线(两条路径)
$\to$ 6D 位姿估计(PoseCNN、ICP、旋转表示、Procrustes、FoundationPose)
$\to$ 实例级 vs. 类别级(NOCS)位姿估计。
5.1 控制回顾:PID 中的积分项(I term)
完整的 PID 控制律(PID control law)为:
PID 控制律
$$u = K_p\, x_e + K_i \int x_e\, dt + K_d\, \dot{x}_e$$
其中 $x_e$ 为跟踪误差(tracking error),$K_p$、$K_i$、$K_d$ 分别为比例、积分、微分增益。
| 项 | 形式 | 对应"时间" | 作用 |
|---|---|---|---|
| P(比例 Proportional) | $K_p\, x_e$ | 当前(present) | 对当前误差成比例地施加控制 |
| I(积分 Integral) | $K_i \int x_e\, dt$ | 过去(past / history) | 累积历史误差,消除稳态误差 |
| D(微分 Derivative) | $K_d\, \dot{x}_e$ | 未来(future) | 对误差变化率响应,抑制振荡 |
积分项 I 的核心作用
- 误差累积项(error accumulation term):$K_i \int x_e\, dt$ 对随时间累积的跟踪误差作出反应,体现的是系统的"过去行为"或"历史(history)"。
- 当残余误差(residual error)持续存在时,积分项会不断增大控制力度,把系统继续往目标推。
- 当纯 P 控制"卡住"(被稳态误差困住)时,I 项相当于调动"记忆(memory)",把系统推向目标。
- 消除稳态误差(steady-state error):保证 $x_e \to 0$(当 $t \to \infty$)。
5.2 为何现代机器人常偏好 PD 而非纯 PID?
《Modern Robotics》视角下,实际硬件上人们经常用 PD(加补偿)而不是纯 PID:
- 对于跟踪机械系统,PD 往往已足够,更易整定(tune),在真实硬件上通常更鲁棒(robust)。
- 许多机器人(尤其是机械臂 manipulator 与人形 humanoid),主要挑战是快速且稳定的运动(fast and stable motion),而不是消除微小稳态误差。
- 在富接触任务(contact-rich tasks)中,积分作用可能导致不期望的力堆积(force buildup)。
若 Franka 机械臂或人形腿被障碍物(或人)暂时挡住,I 项会累积出一个巨大且不安全的"虚拟力"。一旦障碍移除,机器人会危险地猛冲(lunge forward)以释放这些累积的能量。
5.3 机器人栈大图:从基础到轨迹生成
从机器人学基础到轨迹生成(Trajectory Generation)的整体流水线(pipeline):
- 运动学(Kinematics):在笛卡尔空间(Cartesian space)与关节空间(joint space)之间转换。
- 运动规划(Motion Planning):得到一条几何上有效(geometrically valid)的路径。
- 控制(Control):确保运动跟随规划好的轨迹(planned trajectory)。
5.4 抓取(Grasping):定义与抓取综合
- 抓取(Grasping)是通过在一组接触点(a set of contacts)施加力与力矩(forces and torques),以期望的方式约束(restrain)物体运动的过程。
- 抓取综合(Grasp Synthesis)是一个高维搜索或优化问题,目标是找到夹爪位姿(gripper poses)或关节配置(joint configurations)。
静态/开环抓取流水线(Static / Open-Loop Grasping Pipeline)
开环抓取指:先确定抓取位姿,再去执行,过程中不依赖实时反馈闭环。
5.5 术语:抓取位姿(Grasp Pose)
抓取位姿定义了手(hand)的位置(position)、朝向(orientation)与关节运动(articulation)。
| 类别 | 自由度(DoF) | 说明 |
|---|---|---|
| 4-DoF 抓取 | 3D 位置 + 1D 手朝向 | 手朝向与重力方向对齐,即"自上而下抓取(top-down grasping)" |
| 6-DoF 抓取 | 3D 位置 + 3D 朝向 | 完整 6 自由度抓取 |
此外还有关节运动(Articulation,手指自由度):
- 平行夹爪(Parallel gripper):$1$ 个手指自由度。
- 灵巧手(Dexterous Hand):最多可达 $22$ 个自由度。
5.6 开环抓取的两条路径(Two Paths)
| 路径 | 适用对象 | 流程 |
|---|---|---|
| 路径 I | 已知物体(known objects,有标注抓取 labeled grasps) | 6D 物体位姿估计 $\to$ 由物体位姿推得抓取位姿 $\to$ 运动规划达到抓取位姿 |
| 路径 II | 未知/通用物体(unknown and general objects) | 直接预测抓取位姿(directly predict grasping pose)$\to$ 运动规划达到抓取位姿 |
路径 I(6D 物体位姿估计):物体位姿有助于把标注从 CAD 模型迁移(transfer annotation)到相机空间中的物体上——也就是说,一旦知道了物体位姿,CAD 上预先标好的抓取就能映射到真实物体。代表工作:Deep Object Pose Estimation(CoRL 2018)。
路径 II(抓取位姿预测):对未知物体直接回归抓取位姿,代表工作如 D³RoMA(CoRL 2024)。
5.7 6D 物体位姿(6D Object Pose)的定义
6D 位姿 = 物体到相机空间的 6 维变换
包含 3 自由度平移(3DoF translation) 与 3 自由度旋转(3DoF rotation),即一个刚体变换:
$$\begin{bmatrix} X' \\ Y' \\ Z' \end{bmatrix} = R \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} + T$$
其中 $R \in SO(3)$ 为旋转,$T \in \mathbb{R}^3$ 为平移;它把物体坐标系(object space)中的点变换到相机坐标系(camera space)。
有了物体位姿,便可进行基于物体位姿的抓取(Object Pose based Grasping):把 CAD 模型上预标注的抓取通过 $R, T$ 变换到相机空间执行。
5.8 实例级 6D 位姿估计(Instance-Level)
- 实例级(Instance-level):针对一小组已知实例(a small set of known instances)。
- 每个实例的位姿是相对其CAD 模型定义的(有 ground-truth CAD model)。
- 输入:RGB 或 RGBD。
- 输出:某个物体(或所有已知物体)的 6D 位姿。
- 适用于受控环境(controlled environments)。代表数据集:LINEMOD。
5.9 PoseCNN:实例级位姿估计网络
PoseCNN(Xiang et al., RSS 2018)是一个用于杂乱场景(cluttered scenes)中 6D 物体位姿估计的卷积神经网络,将位姿分解为平移与旋转两部分预测:
- 平移估计(Translation Estimation):估计物体中心在图像中的位置及其深度,从而恢复 3D 平移。
- 旋转估计(Rotation Estimation):对每个物体回归四元数(regress quaternion)来表示旋转。
- 训练上设计了专门的损失函数(Loss Function)处理位姿回归(含对称物体的处理思想)。
课件还提到 RoI Pool 存在的问题(Problems with RoI Pool):感兴趣区域池化在精细位姿任务中会带来量化/对齐误差,影响精度。
5.10 ICP:迭代最近点(Iterative Closest Point)
ICP 是一种点云配准(point cloud registration)方法。它以两个点云为输入,计算把一个点云尽可能对齐到另一个的旋转 $R$ 与平移 $T$。
ICP 目标函数
$$\hat{R}, \hat{T} = \arg\min_{R \in SO(3),\, T \in \mathbb{R}^{1\times 3}} \; \big\| Q - (RP + T) \big\|_F^2$$
其中 $R \in SO(3)$,$T \in \mathbb{R}^3$,$Q, P \in \mathbb{R}^{3 \times n}$ 为两个点云,$\|\cdot\|_F$ 为 Frobenius 范数。
ICP 的迭代步骤
- ① 数据中心化(Make data centered):减去各自均值,$\tilde{P} = P - \bar{P}$,$\tilde{Q} = Q - \bar{Q}$。
- ② 寻找对应关系(correspondences):计算两点云间的 chamfer 距离——对每个 $\tilde{p}_i$ 搜索最近的 $\tilde{q}_j$:$\text{corr}_i = \arg\min_j \|\tilde{p}_i - \tilde{q}_j\|_2^2$。朴素复杂度为 $O(|P|\cdot|Q|)$,可用 KD-tree 加速搜索。
- ③ 求旋转 $\hat{R}$:通过约束正交 Procrustes(constrained orthogonal Procrustes)求解 $\hat{R} = \arg\min_{R \in SO(3)} \|\tilde{Q} - R\tilde{P}\|^2$。
- ④ 由残差得 $\hat{T}$:把 $\hat{R}$ 作用于 $P$ 的均值向量,$\hat{T} = \bar{Q} - \hat{R}\bar{P}$。
- ⑤ 更新 P:用 $\hat{R}, \hat{T}$ 更新点云,回到 ② 迭代。
终止条件(Termination)
- 本次 $\hat{R}, \hat{T}$ 的更新量小于某阈值;
- 损失(loss)的变化小于某阈值;
- 达到最大迭代次数。
| 优点(Advantages) | 缺点(Disadvantages) |
|---|---|
| 简单,无需点云分割或特征提取;初值好时精度与收敛性都不错。 | 查找最近对应点计算量大(可下采样稠密点云或用小样本匹配加速);只考虑点到点距离,未利用点云结构信息;高度依赖初值精度。 |
ICP 变体(Variants)
- Point-to-Plane ICP:考虑源点到目标点所在平面的距离,纳入局部结构。
- Plane-to-Plane ICP:同时考虑源点云局部结构,计算平面到平面的距离。
- Fast and Robust ICP:提升 ICP 的速度与鲁棒性。
5.11 用神经网络估计旋转(Rotation Regression)
先回顾旋转本身:3D 旋转矩阵是满足 $R^T R = I$ 且 $\det R = +1$ 的 $3\times 3$ 矩阵;所有旋转矩阵构成群 $SO(3)$(SO = Special Orthogonal,特殊正交群)。
课件给出两大类用网络估计旋转的方法:
- 方法 1:用神经网络直接回归某种旋转表示(rotation representation)。四元数(Quaternion)是非常流行的回归表示。
- 方法 2:预测物体坐标/对应关系(object coordinate / correspondence),再求解旋转。
5.12 旋转表示(Rotation Representations)及其连续性
3D 旋转只有 $3$ 个自由度,但旋转矩阵有 $9$ 个元素,冗余使网络更难预测。常见表示:
| 表示 | 维度 | 变换/要点 |
|---|---|---|
| 欧拉角(Euler Angle) | 3D | $R = R_x(\alpha)\, R_y(\beta)\, R_z(\gamma)$(约定见 Wikipedia) |
| 轴角(Axis Angle) | 3D | 用 Rodrigues 公式由轴角转旋转矩阵,反对称矩阵 $[K]_\times$ |
| 四元数(Quaternion) | 4D | 旋转回归中最常用 |
奇异性与不连续性(Singularities and Discontinuity)
奇异性(Singularity)指数学对象在某点未定义或行为不良(歧义、不可微等)。多种旋转表示都存在奇异性与不连续:
- 欧拉角——不连续:用角度表示 $SO(3)$ 是不连续的;某方向旋转下,恒等旋转的极限未定义($0$ 还是 $2\pi$)。
- 轴角:限制 $\theta \in (0, \pi)$ 时存在唯一参数化:$\theta = \arccos\!\big[\tfrac{1}{2}(\operatorname{tr}(R)-1)\big]$,$\hat{\omega} = \tfrac{1}{2\sin\theta}(R - R^T)$。但在 $\theta = 0$ 时任意轴都表示恒等旋转;在 $\theta = \pi$ 时某轴与其反向表示同一旋转,从而不连续。
- 四元数——双重覆盖(double coverage):$q$ 与 $-q$ 表示同一旋转 $R$。若用四元数预测 $R$ 并假设一一映射(即约束到上半球),就会引入不连续。
5.13 连续旋转表示:6D 与 9D 表示
6D 表示(6D Representation)
- 构造:直接去掉旋转矩阵的最后一列,保留前两列即为 6D 表示。
- 映射回 $SO(3)$:用 Gram-Schmidt 正交化把网络输出的欧氏向量映射到 $SO(3)$:
① 第 1 列归一化;
② 第 2 列只保留与第 1 列垂直的分量后归一化;
③ 第 3 列由第 1、2 列的叉积(cross product)确定。
9D 表示(9D Representation)
- 9D 表示直接对应整个旋转矩阵($9$ 个元素)。
- 用奇异值分解(SVD)正交化把网络的欧氏输出映射到 $SO(3)$(Levinson et al., NeurIPS 2020)。
对比实验任务:单图旋转回归(Single image rotation regression),数据集 ModelNet10-SO3——连续表示(6D/9D)通常优于欧拉角/四元数等不连续表示。
5.14 旋转拟合(Rotation Fitting):预测对应再求解
方法 2 的思路:网络对物体上每个像素预测它在 CAD 模型上的 3D 坐标(object coordinates),这样建立起 2D-3D 稠密对应;若再有深度(depth),即可得到 3D-3D 稠密对应。随后用代数方法求旋转。
正交 Procrustes 问题(Orthogonal Procrustes Problem)
正交 Procrustes
给定 $M \in \mathbb{R}^{n\times 3}$、$N \in \mathbb{R}^{n\times 3}$,求矩阵近似:
$$\hat{A} = \arg\min_{A \in \mathbb{R}^{3\times 3}} \; \| M - N A^T \|_F^2 \quad \text{s.t. } A^T A = I$$
其中 $\|\cdot\|_F$ 为 Frobenius 范数。
解析解(Analytical Solution):对相关矩阵做 SVD,得 $\hat{A} = U V^T$。
约束正交 Procrustes(Constrained Orthogonal Procrustes)
若只允许 $A$ 为旋转矩阵,即 $A \in SO(3)$(要求 $\det A = +1$),则可令:
限制到 SO(3)
$$\hat{A} = U \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & \det(U V^T) \end{bmatrix} V^T$$
即把对角阵中最后一个元素置为 $\det(UV^T)$,以保证结果落在 $SO(3)$ 上(避免反射)。
联合求解 R 与 T(Jointly Solve R and T)
- 第一步:中心化,$\tilde{M} = M - \bar{M}$,$\tilde{N} = N - \bar{N}$,此时假设 $\tilde{M} \approx \hat{R}\tilde{N}$。
- 第二步:用约束正交 Procrustes 求 $\hat{R}$。
- 第三步:由均值恢复平移,$\hat{T} = \bar{M} - \hat{R}\bar{N}$。
5.15 Render-and-Compare:以 FoundationPose 为例
FoundationPose(Wen et al., CVPR 2024)是一个用于 6D 物体位姿估计与跟踪的统一基础模型(unified foundation model),同时支持基于模型(model-based)与无模型(model-free)两种设定。
位姿初始化(Pose Initialization)
- 给定 RGBD 图像,用 Mask R-CNN 或 CNOS 检测物体。
- 用检测出的 2D 边界框中心处的 3D 点配合中值深度(median depth)初始化平移。
- 从以物体为中心的正二十面体球(icosphere)上采样 $N$ 个视点(相机朝向物体中心)来初始化旋转。
位姿条件输入裁剪(Pose Conditioned Input Crop)
- 取"粗位姿(coarse pose)下的物体渲染图"与"输入图像的裁剪",输出精化后的位姿(refined pose)——这正是 render-and-compare 思想。
- 把物体原点投影到图像空间作为裁剪中心,用放大后的物体直径作为裁剪尺寸,框住物体及邻近上下文。
- 该裁剪策略帮助网络更新平移,使之与观测更好对齐。
合成数据(Synthetic Data)
- 真实世界采数据耗时且昂贵;而合成数据常缺乏 3D 资产的规模与多样性。
- FoundationPose 提出一条用大语言模型(LLM)与扩散模型(diffusion models)的新型合成数据生成流水线。
- 在 YCB-Video 数据集上取得良好结果,并可用于机器人应用。
5.16 类别级 6D 位姿估计与 NOCS
为突破实例级"必须有 CAD、无法泛化"的局限,引入类别级(Category-Level)位姿与尺寸估计:从 RGBD 图像中检测并估计某些类别中此前未见过物体的 6D 位姿与 3D 尺寸,而无需知道 CAD 模型(He Wang et al.,Oral)。
归一化物体坐标空间(Normalized Object Coordinate Space, NOCS)
NOCS 作为一个共享参考系(reference frame),把同一类别的物体规范化到统一空间,分三步:
- Step 1 旋转归一化(rotation normalization):对齐物体朝向。
- Step 2 平移归一化(translation normalization):把物体零中心化(zero-center)。
- Step 3 尺度归一化(scale normalization):统一归一化尺度。
类别级位姿的定义
NOCS = 参考系;类别级位姿 = 从 NOCS 到相机空间的变换(transformation from NOCS to camera space)。
从图像到 NOCS map 再到位姿
- 网络:基于 Mask R-CNN 的检测器,逐像素预测 NOCS 坐标,得到 NOCS map,再转成 NOCS 点云(NOCS pts)。
- 深度分支:对深度图反投影(backproject)得到 depth 点云。
- 位姿拟合:在 NOCS 点云与 depth 点云间,用 Umeyama 算法估计 7D 相似变换(7D similarity transformation)(旋转+平移+尺度),并用 RANSAC 剔除外点(outlier removal)。
- 尺寸:用预测的 NOCS 长宽比(aspect ratio)得到 3 个尺寸,输出 9 DoF amodal 边界框。
数据集与处理对称性
- CAMERA(Context-Aware MixEd ReAlity):混合现实数据生成流水线,约 300K 图像(275K/25K),31 个 IKEA 场景,1085 个 ShapeNet 模型。
- 真实数据集:约 8K 张 RGB-D(4K/0.95K/3.75K),18 个真实场景(6/6/6),42 个唯一实例(3/1/3),6 类物体:bottle、bowl、camera、laptop、mug,并区分对称/非对称(symmetric vs. asymmetric)。
- 对称性处理:采用对称感知损失(symmetry-aware loss),即 min-of-N loss。
- 消融:NOCS 表示相比直接位姿回归(pose regression),在 5°/10° 精度上更优(越高越好)。
类别级位姿的延伸应用
- TransNet:类别级透明物体位姿估计(ECCV 2022 Workshop)。
- 6-PACK:基于锚点关键点的类别级 6D 位姿跟踪(ICRA 2020)。
- CAPTRA:从点云出发的刚体与铰接物体(articulated)类别级位姿跟踪(ICCV 2021 Oral)。
- GAPartNet:跨类别、可泛化与可操作部件(generalizable & actionable parts)的物体感知与操作(CVPR 2023 Highlight);基于 PartNet-Mobility,含 9 类部件、8489 个部件,来自 27 个物体类别的 1166 个物体。
本讲重点回顾
1. 控制:PID 控制律 $u = K_p x_e + K_i \int x_e\, dt + K_d \dot{x}_e$;I 项累积历史误差以消除稳态误差($x_e \to 0$),但在富接触/受阻场景会造成危险的力堆积,故现代机器人常用 PD + 重力/前馈补偿。
2. 机器人栈:Kinematics(空间转换)$\to$ Motion Planning(有效路径)$\to$ Control(跟踪轨迹);给定末端位姿即可形成抓取流水线。
3. 抓取:用接触力/力矩约束物体运动;4-DoF(自上而下)vs. 6-DoF;开环两条路径——已知物体走 6D 位姿,未知物体直接预测抓取。
4. 6D 位姿:物体到相机的 $R \in SO(3)$、$T \in \mathbb{R}^3$ 变换。PoseCNN 回归四元数;ICP 做点云配准(中心化 $\to$ 找对应 $\to$ 约束 Procrustes 求 $R$ $\to$ 残差求 $T$ $\to$ 迭代)。
5. 旋转表示:欧拉角/轴角/四元数都存在奇异性与不连续(四元数双重覆盖 $q \equiv -q$);连续表示用 6D(Gram-Schmidt)或 9D(SVD);3D-3D 对应用正交 Procrustes($\hat{A}=UV^T$,约束到 $SO(3)$ 时改最后对角元为 $\det(UV^T)$)。
6. 进阶:FoundationPose 用 render-and-compare 做统一 6D 估计与跟踪;NOCS 把类别物体归一化(旋转/平移/尺度),位姿即"NOCS $\to$ 相机空间"的变换,用 Umeyama + RANSAC 拟合 7D 相似变换。
第 6 讲 · 视觉与抓取 II
本讲在第 5 讲的基础上,系统地讨论抓取(grasping)这一具身智能的核心交互能力:如何表示一个抓取、如何从感知中检测/生成抓取位姿、如何用力闭合(force closure)等物理判据评价抓取质量,以及如何通过手眼标定(hand-eye calibration)把相机空间里估计出的抓取位姿转换到机器人空间,最终驱动机械臂完成动作。本讲也是 Assignment 2(开环抓取已知物体)的理论支撑。
感知 $\to$ 抓取表示 / 抓取位姿 $\to$ 抓取检测 / 抓取生成 $\to$ 物理判据(force closure)评价 $\to$ 手眼标定(相机空间 $\to$ 机器人空间)$\to$ 运动规划执行。
6.1 Assignment 2 与开环抓取概览
Assignment 2 让机器人对已知物体(known objects)执行开环抓取(open-loop grasping)。需要实现的三个模块串成一条完整流水线:
- 相机外参标定(camera extrinsic calibration):确定相机与机器人之间的几何关系。
- 物体位姿估计(object pose estimation):用 PointNet 估计物体的 6D 位姿。
- 夹爪位姿计算(gripper pose computation):基于估计出的物体位姿计算抓取(夹爪)位姿。
开环抓取:感知一次 $\to$ 一次性规划出抓取位姿 $\to$ 执行,过程中不再用感知反馈纠正。本讲与 Assignment 2 主要聚焦开环抓取;闭环抓取则在执行过程中持续利用视觉/触觉反馈调整,鲁棒性更强但实现更复杂。
6.2 仿真环境:MuJoCo
作业在仿真中进行,使用的物理引擎是 MuJoCo(Multi-Joint dynamics with Contact)。
| 项目 | 说明 |
|---|---|
| 名称含义 | Multi-Joint dynamics with Contact(多关节带接触动力学) |
| 核心用途 | 通用物理引擎,面向关节式结构(articulated structures)(机器人、人体)与环境交互的快速、精确仿真 |
| 历史 | 最初由 Roboti LLC 开发;2021 年被 Google DeepMind 收购;2022 年 5 月开源(GitHub) |
| 目标用户 | 机器人学、生物力学、机器学习(ML)、动画领域的研究者与开发者 |
6.3 开环抓取的两条路径
课件给出两条实现开环抓取的技术路线,区别在于物体是否“已知”、是否有预先标注的抓取:
| 路径 I:已知物体(known objects with labeled grasps) | 路径 II:未知/通用物体(unknown & general objects) | |
|---|---|---|
| 步骤 1 | 6D 物体位姿估计(6D object pose estimation) | 直接预测抓取位姿(directly predict grasping pose) |
| 步骤 2 | 由物体位姿进一步求出抓取位姿 | — |
| 步骤 3 | 运动规划(motion planning)到达抓取位姿 | |
- 路径 I:先估计 6D 物体位姿,再借助物体位姿把 CAD 模型上预先标注(annotation)的抓取迁移到相机空间中的真实物体上。代表工作:Deep Object Pose Estimation for Semantic Robotic Grasping of Household Objects(CoRL 2018)。
- 路径 II:跳过物体身份,直接从观测预测抓取位姿,可处理未见过的一般物体。课件举例 D³RoMA(CoRL 2024)。
6.4 抓取位姿的两种建模形式
“模型如何产出抓取位姿”有两种基本形式(two formulations):
| 形式 | 定义 | 特点 |
|---|---|---|
| 抓取检测(grasp detection) | 从观测中检测出多个抓取位姿 | 输出抓取候选集合,类似目标检测 |
| 条件抓取生成(conditional grasp generation) | 条件:观测;输出:抓取位姿 | 以观测为条件“生成”抓取,常用生成模型 |
6.5 抓取检测(Grasp Detection)
同一个物体/场景往往存在多个合理抓取(抓取分布是多峰的,multi-modal)。因此把抓取问题建模为检测问题是自然的:像目标检测一样,从观测中检出一批候选抓取位姿,而不是只回归出唯一答案。
6.5.1 视觉输入表示
抓取检测网络对视觉输入有两种主流 3D 表示:
| 表示 | 体素网格(Voxel Grids) | 点云(Point Cloud) |
|---|---|---|
| 定义 | 规则 3D 网格上的值,类比把 2D 像素扩展到 3D 的“体素(voxel)”,相当于 3D 空间里的“图像” | 离散三维点集合 |
| 骨干 / 网络 | VGN(Volumetric Grasping Network,CoRL 2020) | 骨干:PointNet / PointNet++;网络:GraspNet-baseline |
| 几何 | 显式几何,但受体素分辨率(volume resolution)限制 | 显式几何、内存开销更小、分辨率更高 |
6.5.2 评价指标(Evaluation Metrics)
- 成功率(Success Rate):成功抓取执行占全部执行的比例。
- 清空率(Percent Cleared):每一轮中被移除物体的百分比。
- 规划时间(Planning Time):从接收输入到返回抓取所用的时间。
6.6 GSNet:野外场景的快速准确抓取检测
GSNet(GS-Net,ICCV 2021,“Graspness Discovery in Clutters for Fast and Accurate Grasp Detection”)把杂乱场景(in the wild / clutter)中的抓取位姿检测拆成两阶段问题:
| 阶段 | 问题 | 内容 |
|---|---|---|
| Where 阶段 | 在哪里抓 | 找到高可抓性(graspability)的位置 |
| How 阶段 | 怎么抓 | 决定抓取参数:平面内旋转(in-plane rotation)、接近深度(approaching depth)、夹爪宽度(gripper width)、抓取分数(grasp score) |
6.6.1 Graspness:一种几何质量度量
GSNet 提出一种基于几何的新质量度量——graspness(可抓性),用来在杂乱场景中区分可抓取区域。对点集 $P$ 与在球面上均匀分布的 $V$ 个接近方向(approach directions):
- 逐点 graspness(point-wise):每个点的可抓性分数。
- 逐视角 graspness(view-wise):给定点 + 视角的可抓性分数。
- graspness 可视为给定点(及视角)下抓取的“成功率”,并通过 force closure(力闭合)与碰撞检测(collision checking)计算这个“成功率”。
Graspness 的两个层次:
- 单物体 graspness(Single Object Graspness):对每个抓取,用力学解析模型(force analytic model)计算抓取质量分数(grasp quality score)。
- 场景级 graspness(Scene-Level Graspness):每个抓取经碰撞检测并被赋予碰撞标签;通过物体的 6D 位姿把物体点投影到场景,场景中每个点与最近的投影物体点关联。
6.6.2 GSNet 架构
| 模块 | 说明 |
|---|---|
| 骨干网络(Backbone) | ResUNet14,基于 MinkowskiEngine;U 形结构 + 残差块。对 $N\times 3$ 的点云提取 $C$ 通道特征,输出 $N\times(3+C)$ 的点集 |
| 稀疏卷积(SparseConv) | 3D 点云体素中大多为空(稀疏信号)。SparseConv 只在卷积核覆盖到活跃输入位点(active input site)时才计算输出,高效处理稀疏数据,无需扫描所有像素/体素 |
| 可抓性最远点采样 | Graspable Furthest Point Sampling:用 MLP 生成逐点可抓性图(graspable landscape,$N\times 1$)与二分类 objectness 分数($N\times 2$);选出 graspness 超阈值的点,再用 FPS 最大化采样点间距,采样得到 $M$ 个种子点($(3+C)$ 维特征) |
| 概率视角选择 | Graspable Probabilistic View Selection:用 Fibonacci 格点(Fibonacci lattices)在单位球上采 $V$ 个视角;MLP 输出 $M\times V$ 的逐视角可抓性图与 $M\times C$ 的残差特征;将各视角 graspness 归一化到 $(0,1)$ 作为概率,用 PVS(probabilistic view selection)选最佳视角 |
| 圆柱分组 | Cylinder-Grouping from Seed Points:对每个 point-view 对,用固定高度、半径的圆柱分组并采样 $K$ 个点;抓取候选大小 $M\times K\times(3+C)$,点坐标按圆柱半径归一化 |
| 抓取生成 | Grasp Generation from Candidates:候选经 MLP + 最大池化层处理;MLP 为不同(平面内旋转)$\times$(接近深度)组合输出分数与宽度。输出尺寸 $M\times(A\times D\times 2)$,其中 $A$ 为平面内旋转角数、$D$ 为夹爪深度数、$2$ 为分数与宽度 |
6.7 条件抓取生成:灵巧手与 DexGraspNet 2.0
对灵巧手(dexterous hand)而言,抓取位姿维度更高、模态更多,适合用条件生成模型。代表工作 DexGraspNet 2.0(CoRL 2024,He Wang 实验室 / 北京大学),基于扩散模型(diffusion model)生成灵巧抓取。
| 阶段 | 问题 | 方法 |
|---|---|---|
| Stage 1 | 在哪里抓(Where to grasp) | 用稀疏卷积提取局部特征,预测 graspness 与 objectness 分数。Objectness:该点是否在物体上;Graspness:该点是否可能是种子点(与邻近 GT 种子点累积) |
| Stage 2 | 怎么抓(How to grasp) | 只用 Stage 1 的局部特征,预测残差位置 $t$、旋转 $R$、手指关节角 $\theta$;为应对多峰抓取分布,对 $t,R$ 用扩散模型,再直接预测 $\theta$ |
- 数据集 DexGraspNet 2.0:包含 $7600$ 个训练场景、$4.26$ 亿(426 million)个抓取。
- 在 DexGraspNet 2.0 基准上达到 SOTA。
- 数据规模缩放(scaling)实验:探究抓取位姿数量与场景数量的影响;位姿/场景越少,性能显著下降。
- 与平行夹爪(gripper)相比,灵巧手具有更强的包覆能力(wrapping ability)。
6.8 抓取术语与抓取位姿表示
抓取位姿(Grasp Pose)定义手的位置(position)与朝向(orientation)。按自由度分两类:
| 类型 | 定义 | 俗称 |
|---|---|---|
| 4-DoF 抓取 | 3D 位置 + 1D 手朝向(与重力方向对齐) | “自顶向下抓取”(top-down grasping) |
| 6-DoF 抓取 | 3D 位置 + 3D 朝向 | — |
6.9 力闭合(Force Closure)与形闭合(Form Closure)
力闭合(force closure)是判断抓取“能不能抓稳”的核心物理判据:
若一个抓取在一组摩擦接触(frictional contacts)处所能施加的力,足以抵消施加在物体上的任意外部力旋量(external wrench),则该抓取处于力闭合状态。
更严格的物理表述:给定作用于物体的一组摩擦接触,若这些接触的力旋量锥(wrench cones)的正张成(positive span)覆盖整个力旋量空间(wrench space),则处于力闭合。
形闭合(form closure):若刚体被一组刚性、静止的支撑(fixtures)完全固定(fully immobilized),则称其处于形闭合。两者的关系与取舍:
- 当所有接触都无摩擦(frictionless)时,力闭合的条件与一阶形闭合(first-order form closure)的条件相同。
- 机器人手规划抓取时,力闭合是一个好的最低要求;形闭合通常过于严格,需要太多接触点。
- 蕴含关系(由强到弱):$$\text{successful grasp} \Leftarrow \text{force closure} \Leftarrow \text{form closure}$$ 即“形闭合 $\Rightarrow$ 力闭合 $\Rightarrow$ 成功抓取”,形闭合最强、最难满足。
6.9.1 一个简化的 2D 例子
课件用 2D 平面抓取直观说明力闭合判定。判据可归纳为三条同时满足:
| 判据 | 无摩擦的 2 接触 | 1 个有摩擦 + 1 个无摩擦接触 |
|---|---|---|
| 存在 $3$ 个可能力向量且其中 $2$ 个线性无关 | $\checkmark$ | $\checkmark$ |
| 各接触施加非零力时可合成零合力 | $\times$ | $\checkmark$ |
| 原点位于可施加力空间的内部(interior) | $\times$ | $\checkmark$ |
6.10 抓取数据集与抓取标注的生成
抓取标签的来源有两类:标注真实数据、用仿真生成合成数据。合成数据带抓取标签的生成流程:
- 用物体几何采样抓取候选(sample grasp candidate with object geometry)。
- 用物理仿真器(physical simulator)评估这些候选。
- 把构成力闭合的抓取标注为正样本(positive)。
| 类别 | 数据集 | 是否带抓取标注 |
|---|---|---|
| 物体集(合成) | ShapeNet、ModelNet | 无抓取标注 |
| 物体集(合成,大规模) | Objaverse-XL(1000 万+ 3D 物体) | 无抓取标注 |
| 抓取集(合成) | ACRONYM(ICRA 2021,基于仿真的大规模抓取数据集) | 有抓取标注 |
| 抓取集(真实) | GraspNet-1Billion(CVPR 2020,通用物体抓取大规模基准) | 有抓取标注 |
6.10.1 GraspNet-1Billion 的抓取标注流水线
- 先从点云中采样抓取点(grasp point)。
- 再采样并评估抓取视角(grasp view)、平面内旋转、夹爪深度。
- 用每个物体的 6D 位姿把抓取投影到场景。
- 进行碰撞检测,避免抓取与背景或其它物体碰撞。
6.11 手眼标定:从相机空间到机器人空间
到目前为止,所有抓取位姿都在相机空间中估计。相机可能看到杯子在 $(x,y,z)$,但不知道要用哪些关节角才能在物理世界中触到那个点。因此必须把位姿变换到机器人空间,这就需要相机与机器人之间的变换关系。
6.11.1 议程
- 相机模型:内参(intrinsics)与外参(extrinsics)。
- 相机标定:PnP 方法。
- 两类手眼标定:eye-in-hand、eye-to-hand。
- 手眼方程:$AX=XB$。
6.12 相机模型:内参与外参
6.12.1 从针孔相机到透镜
- 方案 1:把胶片直接放在物体前——无法得到清晰图像(每个物点的光线散布到整张胶片)。
- 方案 2(针孔相机,pinhole camera):加一个挡板(barrier)挡掉大部分光线,只留一个开口(光圈,aperture),减少模糊。光圈大小会影响成像:太大则模糊,太小则进光不足/衍射。
- 透镜(lens):把光聚焦(focus)到胶片上,兼顾进光量与清晰度。课件用近轴折射模型(Paraxial Refraction Model)描述,其中 $R$ 为曲率半径(Radius of Curvature)。
- 径向畸变(radial distortion):透镜边缘附近的光线偏差最明显,是镜头的主要畸变来源。
6.12.2 内参(Intrinsics)与外参(Extrinsics)
成像过程从世界坐标一路映射到像素坐标,可用齐次坐标(homogeneous coordinates)下的投影变换(projective transformation)表示。整体可写为相机矩阵 $P$:
相机投影模型
世界点 $X_w$ 经外参(旋转 $R$、平移 $t$)变到相机坐标,再经内参 $K$ 投影到像素:
$$x \sim K\,[\,R \mid t\,]\,X_w = P\,X_w$$
其中外参表示相机位姿(camera pose)相对世界参考系(world reference frame)的位置与朝向。
| 内参 Intrinsics | 外参 Extrinsics | |
|---|---|---|
| 描述 | 相机内部成像参数(焦距、主点等),即 $K$ | 相机相对世界坐标系的位姿 $[\,R\mid t\,]$ |
| 与相机位置关系 | 与相机在世界中的位置无关 | 随相机位置/朝向变化(即相机位姿) |
6.13 相机标定与 PnP
标定目标(Goal of Calibration):从一张或多张图像估计相机的内参与外参。
Perspective-n-Point(PnP)算法:在已知若干 3D 点与其 2D 投影对应关系的前提下,求解相机位姿(以及/或内参)。一个关键特例:
已知内参 $K$ 时的 PnP
若内参 $K$ 已知(已标定),则可由相机矩阵 $P$ 解出外参:
$$[\,R \mid t\,] = K^{-1} P$$
此时就得到了相机的位姿。在手眼标定的数据采集中,常用 solvePnP(OpenCV)从标定板图像计算标定板到相机(target-to-camera)的变换。
6.14 两类手眼标定:eye-in-hand 与 eye-to-hand
标定前先明确相机安装在哪里,由此分为两支:
| 类型 | 相机安装 | 要求解的变换 |
|---|---|---|
| Eye-in-hand | 相机装在机器人(末端执行器)上,随手运动 | 相机坐标系 $\to$ 末端执行器(end-effector)坐标系 |
| Eye-to-hand | 相机固定在机器人旁边,不随手运动 | 相机坐标系 $\to$ 机器人基座(robot base)坐标系 |
6.15 手眼方程 $AX = XB$
无论哪一支,求解都归结为经典的手眼方程 $AX = XB$。以 eye-in-hand 为例:
| 符号 | 含义(已知/待求) |
|---|---|
| $A$ | 已知:末端执行器位姿 $1$ 到位姿 $2$ 的变换(end-effector $E_1 \to E_2$) |
| $B$ | 已知:相机位姿 $1$ 到位姿 $2$ 的变换(由相机到标记物 marker 的位姿计算得到) |
| $X$ | 待求:末端执行器 $\to$ 相机的变换(手眼变换) |
$AX=XB$ 的由来
从位姿 $1$ 到位姿 $2$ 有两条等价路径,而手眼变换 $X$ 在两个时刻保持不变(刚性连接):
$$A\,X = X\,B$$
直观地说:先“末端动一步($A$)再做手眼变换”应等于“先做手眼变换再让相机动一步($B$)”。采集 $10$–$30$ 组不同位姿即可联立求解。
6.15.1 经典求解器
$AX=XB$ 已有大量成熟解法与开源实现:
| 已发表方法 | GitHub 代码库 |
|---|---|
| Andreff et al., 1999 | ros-industrial/industrial_calibration |
| Daniilidis, 1998 | ethz-asl/hand_eye_calibration |
| Horaud & Dornaika, 1995 | jhu-lcsr/handeye_calib_camodocal |
| Park & Martin, 1994 | lagadic/vision_visp |
| Tsai & Lenz, 1989 | crigroup/handeye(以及 OpenCV 内置) |
6.16 手眼标定工作流程
6.16.1 Eye-in-Hand 流程
| 步骤 | 要点 |
|---|---|
| Step 1 硬件搭建 | 把相机刚性固连到末端执行器(法兰 flange),运动中相机与手零相对位移;标定板(棋盘格 Checkerboard / ChArUco / AprilTag)固定在工作空间内,全程静止不动 |
| Step 2 数据采集 | 移动机器人到 $10$–$30$ 个能清晰看到标定板的不同位姿;每个位姿:停稳 $\to$ 拍图 $\to$ 记录末端相对基座的位姿(来自控制器)$\to$ 用 solvePnP 检测标定板得 target-to-camera 变换。最佳实践:显著改变朝向(不仅是平移)、覆盖不同高度与倾角、避免奇异构型与过近/过远、确保角点检测良好 |
| Step 3 求解 | 解 $AX=XB$ |
| Step 4 验证 | 重投影误差(reprojection error):用 $X$ 把标定板 3D 点投影回 2D 图像,像素误差通常 $< 1$ 像素即标定成功;TCP “触点”测试:用 $X$ 指挥机器人工具中心点(TCP)去触图像中指定坐标,若准确触到则物理验证通过 |
6.16.2 Eye-to-Hand 流程
| 步骤 | 要点 |
|---|---|
| Step 1 硬件搭建 | 相机固定在外部三脚架/支架上,标定过程中不能移动;标定板牢固装在机器人末端执行器上 |
| Step 2 同步采集 | 移动机械臂使标定板从多角度、多位置对相机可见;务必显著转动腕关节,仅平移会导致标定不完整;每个位置记录机器人位姿 + 高分辨率图像,并估计相机与 marker 的相对位姿 |
| Step 3 求解 | 解 $AX=XB$($X$ 为末端执行器 $\to$ marker) |
| Step 4 验证 | “Hand-to-Pixel” 测试:用 $X$ 把夹爪 3D 位置投影到相机 2D 图像,若虚拟点与真实夹爪完全重合即准确;坐标映射测试:在相机视图点击一点,命令机器人移动到该处 |
6.17 深度感知难题与透明/镜面物体
抓取常依赖深度(depth)/点云,但对透明(transparent)与镜面(specular)物体,深度传感器往往失效,导致点云缺失/错误。课件指出:直接吃原始深度图的 GraspNet-baseline 对透明物体抓取总是失败。
6.17.1 DREDS:用域随机化合成数据
DREDS 用域随机化(Domain Randomization)合成针对透明/镜面物体的数据,随机化维度包括:
- 物体布局(layout):物体实例与摆放方式。
- 物体材质(material):BSDF。
- 背景(background)。
- 光照(illumination)。
- 相机视角(camera viewpoint)。
6.17.2 ASGrasp:材质无关的抓取
ASGrasp(He Wang 等)号称世界首个材质无关(material-agnostic)的抓取方法。其流水线包含:
- 场景重建模块(Scene Reconstruction Module):以 RGB 图与左/右红外(IR)图为输入,借助上下文编码器、特征编码器与相关金字塔(correlation pyramid),重建出第一层深度(可见点云 visible point cloud)与第二层深度(不可见点云 invisible point cloud),并用几何损失(geometry loss)监督,得到完整点云。
- 抓取检测模块(Grasp Detection Module):以 GSNet 在完整点云上检测抓取位姿,并用抓取损失(grasp loss)监督,输出抓取位姿 $G$。
- 真实世界实验取得很高成功率,对透明/镜面等各种材质均适用。
本讲重点回顾
1. 两条开环抓取路径:已知物体走“6D 位姿估计 $\to$ 由位姿求抓取”;未知物体走“直接预测抓取位姿”,最后都接运动规划。
2. 抓取建模两形式:抓取检测(检出多个候选,应对多峰分布)与条件抓取生成(以观测为条件生成,DexGraspNet 2.0 用扩散模型)。
3. 输入表示:体素网格(VGN,受分辨率限制)vs 点云(PointNet/PointNet++、GraspNet-baseline,省内存、高分辨率)。
4. GSNet:Where(graspness 找位置)+ How(in-plane rotation、approach depth、gripper width、score);graspness 用 force closure + 碰撞检测算“成功率”。
5. 抓取位姿:4-DoF(top-down)与 6-DoF。
6. 力闭合/形闭合:力旋量锥正张成覆盖整个力旋量空间即力闭合;无摩擦时力闭合 $=$ 一阶形闭合;$\text{form closure}\Rightarrow\text{force closure}\Rightarrow\text{successful grasp}$,力闭合是抓取的好的最低要求。
7. 评价指标:成功率、清空率、规划时间;合成抓取数据用物理仿真器评估、以 force closure 标正样本。
8. 手眼标定:把相机空间位姿转到机器人空间。相机模型 = 内参 $K$ + 外参 $[R\mid t]$,$x\sim P X_w$;PnP 求位姿(已知 $K$ 时 $[R\mid t]=K^{-1}P$)。两支:eye-in-hand、eye-to-hand,均解 $AX=XB$($X$ 为待求手眼变换),用重投影误差与触点测试验证。
9. 透明/镜面物体:深度失效导致抓取失败;DREDS 用域随机化合成数据,ASGrasp 重建完整点云 + GSNet 实现材质无关抓取。
第 7 讲 · 策略学习 I
本讲从前几讲的「抓取(grasping)」管线过渡到更一般的策略(policy)学习。核心问题是:机器人如何从感知(perception)直接产生动作(action)去完成任务?本讲聚焦模仿学习(imitation learning, IL)这条路线,重点讲清最基础的行为克隆(behavior cloning, BC)、它的根本缺陷分布漂移(distribution shift),以及围绕数据采集(遥操作)与算法(DAgger 系列)的改进。
7.1 从抓取到 policy:为什么需要更一般的策略
前几讲采用的是「感知–规划–控制」模块化的抓取位姿预测(grasping pose prediction)方法。课件总结了它的优缺点:
| 优点(Pro) | 缺点(Con) |
|---|---|
|
借助 3D 模态泛化好,清理物体(clearing object)任务仍是 SOTA; 模型非常轻量; 感知–规划–控制模块化系统:可解释、易调试(但可能需要很多规则来改进)。 |
局限于抓取(grasping),不是通用操作(not general manipulation); 从抓取到操作(manipulation)控制较弱,不理解任务指令; 高度依赖深度传感器,深度不准则失败; 高度依赖相机位姿(camera pose)精度; 开环(open-loop):假设观测完成后场景不再变化。 |
课件给出了几条延伸工作以补足这些缺陷:
- Dexonomy (RSS 2025):把抓取数据扩展到更多抓取类型(来自 PKU EPIC Lab 与 Galbot),缓解「只能 power grasp」的问题。
- DexVLG: Vision-Language-Grasp Model (ICCV 2025 Highlight):学习一个多模态具身大模型,输入视觉信号 + 任务指令(task instruction),输出灵巧抓取位姿(dexterous grasp pose),从而引入对指令的理解。
7.2 Policy 的基本定义
一个策略(policy)是一个端到端映射(end-to-end mapping):
policy 映射
$$\text{state} \;\to\; \text{action}$$
随机策略(stochastic):$a \sim \pi(a \mid s)$
确定性策略(deterministic):$a = \pi(s)$
随机策略给出动作的概率分布,确定性策略直接给出一个动作。后文会看到二者在损失函数上其实是统一的(见 7.9)。
7.3 术语:状态(State)
在具身智能(Embodied AI)中,时间步 $t$ 的状态 $s_t$ 满足:
- 是对环境的完整描述(complete description of the environment);
- 包含预测未来所需的全部信息;
- 通常不可完全获取(usually not fully accessible)。
马尔可夫性(Markovian)
在真实状态下,系统是马尔可夫的:
$$P(s_{t+1} \mid s_t, a_t, s_{t-1}, a_{t-1}, \dots) = P(s_{t+1} \mid s_t, a_t)$$
即无需记忆历史,没有遗留的隐藏变量(no hidden variables left)。
7.4 术语:动力学模型 / 世界模型
$P(s_{t+1} \mid s_t, a_t)$ 称为动力学模型(dynamics model)或转移模型(transition model):
- 描述环境/世界如何演化,即在给定当前状态与动作下预测下一个状态;
- 若满足 $P(s_{t+1} \mid s_t, a_t, s_{t-1}, a_{t-1}, \dots) = P(s_{t+1} \mid s_t, a_t)$,则系统是马尔可夫的。
7.5 马尔可夫决策过程(MDP)
MDP(Markov Decision Process)是不确定性下序贯决策(sequential decision making under uncertainty)的框架。每个时间步:
- 智能体(agent)观测当前状态 $s_t$;
- 依据策略采取动作:$a_t \sim \pi(a_t \mid s_t)$;
- 环境依据动力学模型转移:$s_{t+1} \sim p(s_{t+1} \mid s_t, a_t)$。
马尔可夫性质:下一个状态仅依赖当前状态与动作,与过去历史无关。
7.6 术语:观测(Observation)与「观测 vs. 状态」
观测 $o$ 是智能体真正从传感器(sensors)获得的信息,可能包含:
| 类型 | 含义 | 例子 |
|---|---|---|
| 外感受(Exteroceptive) | 外部环境信息 | 视觉、深度、触觉(tactile)、音频 |
| 本体感受(Proprioceptive) | 机器人内部状态 | 关节角、速度、力矩、电机状态 |
观测通常是部分的、有噪声的、有歧义的(partial, noisy, ambiguous);
同一观测可能对应不同的底层状态,进而导致不同的未来结果;
观测往往非马尔可夫,而状态被定义为马尔可夫: $$P(o_{t+1} \mid o_t, a_t, o_{t-1}, a_{t-1}, \dots) \neq P(o_{t+1} \mid o_t, a_t)$$
因此在实践中,策略大多作用于观测而非真实状态,必须在部分且不确定的信息下行动,即基于观测的策略(observation-based policy):$\pi_\theta(a_t \mid o_t)$。这正是把模仿学习放到「观测」语境下的原因。
7.7 动作空间(Action Spaces)与 policy 的一般定义
动作(action)是策略发给环境以施加影响的命令。在具身智能中,动作通常对应控制命令(control commands),再由某个控制器(controller)转换为底层电机信号(如力矩 torque)。
具身智能中 policy 的一般定义
现实的机器人策略:$a \sim \pi(a \mid o, l)$,其中 $o$ 是观测,$l$ 是指定任务的语言或任务指令(language / task instruction)。
基于状态的策略:$a \sim \pi(a \mid s)$,通常存在于仿真器环境中,或状态 $s$ 是由视觉等算法估计出来的。
课件以 RT-1(Robotics Transformer,Brohan et al. 2022, arXiv:2212.06817)为例:它把语言指令与图像作为输入,是「$\pi(a \mid o, l)$」这类策略的典型实例。
7.8 策略学习的两条路线:IL 与 RL
| 模仿学习(Imitation Learning, IL) | 强化学习(Reinforcement Learning, RL) | |
|---|---|---|
| 前提 | 有专家(expert)可用 | 无专家可用 |
| 学习方式 | 监督学习(supervised);从专家演示或现有策略学习 | 通过交互(interaction)试错学习 |
| 信号 | 专家动作作为标签 | 奖励信号 $r$ 引导 |
| 输入 / 输出 | 输入:观测(或状态);输出:动作 | — |
| 目标 | 直接模仿专家行为 | 优化长期表现:最大化总奖励的期望 |
| 核心思想 | learn to mimic expert behavior directly from data | learn what to do by evaluating the consequences of actions |
本讲(Policy I)专注 IL;RL 留待后续。当监督数据不可得时,才转向 RL(见 7.16 小结)。
7.9 基础算法:行为克隆(Behavior Cloning, BC)
行为克隆(BC)是 IL 最基础的算法:把专家演示 $\{(o_t, a^*_t)\}$ 当作训练数据,用监督学习拟合一个策略(确定性 $a = \pi_\theta(s)$ 或随机 $a_t \sim \pi_\theta(a_t \mid s_t)$)。课件以 NVIDIA 自动驾驶(Bojarski et al. ’16)为经典图示。
BC 的损失
确定性策略 $a = \pi_\theta(s)$,通常采用 MSE 损失:
$$\lVert a - a^* \rVert$$
最小化 MSE 等价于在固定协方差的高斯策略下的最大似然(maximum likelihood)。
高斯策略(Gaussian policy)作为一种随机策略:
$$\pi_\theta(a \mid o) = \mathcal{N}\big(a;\ \mu_\theta(o),\ \Sigma_\theta(o)\big)$$
其中 $\mu_\theta(o)$ 为均值(策略网络输出),$\Sigma_\theta(o)$ 为协方差(可固定或学习)。
7.10 BC 的根本问题:分布漂移(Distribution Shift)
模仿学习总能成功吗?课件给出经典反例:策略一旦偏离,就会遇到训练时没见过的分布外(out-of-distribution, OOD)状态,从而产生不可靠的动作,误差随时间累积。
分布不匹配(Distribution mismatch)与误差累积
训练时(Train time):数据来自专家轨迹 $\mathcal{D} = \{(o_t, a_t)\}_{t=1}^{T}$,即专家访问的状态分布。
测试时(Test time):状态由学习到的策略访问,$o_t \sim p_{\pi_\theta}(o)$。
误差复合(error-compounding):
小错误 $\to$ 新的未见状态 $\to$ 更大的错误 $\to$ OOD 状态 $\to$ 误差随时间不断累积。
7.11 为什么 ’16 的 NVIDIA 工作能成?
课件提到时间线:2016 年 2 月 BC 用于自动驾驶,经过约 3000 英里(On March 2016, after 3000 Miles of Learning)的学习后能工作。其能成功的直觉是:通过大量、覆盖良好的数据(包括对偏离状态的恢复演示),在一定程度上缓解了分布漂移——这正引出后面用更好的数据采集来对抗分布漂移的思路。
7.12 在具身智能中使用 BC:遥操作数据采集
用 BC 训练机器人,关键在于如何采集专家数据。主流手段是遥操作(teleoperation)。课件以 Stanford 的 ALOHA 系统为代表。
7.12.1 ALOHA 式主–从遥操作:系统概览
- 人类操作员控制一个主臂(master arm),它与从臂(slave arm)在运动学上耦合(kinematically coupled)。
- 主臂运行在重力补偿(gravity-compensated)、低阻抗(low-impedance)模式,使手臂感觉轻巧、易于移动。
- 系统通常配有手腕相机(wrist camera)等传感器。
7.12.2 从臂的控制设计
主臂采集:关节角 $q$,有时还有关节速度 $\dot{q}$(通过时间差分计算)。命令实时从主臂传给从臂(位置/速度/位姿控制,取决于设计):
| 方案 | 做法 | 特点 |
|---|---|---|
| Option 1 — 关节空间遥操作(Joint-space) | 把关节目标 $q$(或 $q_{\text{target}}$)从主臂发给从臂;从臂用底层关节控制器(如 PD / 阻抗 impedance)跟踪。 | 直接、简单。 |
| Option 2 — $\Delta$-位姿遥操作(Delta Pose) | 在主臂侧计算 $\Delta\text{pose} = \text{FK}(q_{t+1}) - \text{FK}(q_t)$,发送末端执行器位姿;从臂积分 $\Delta\text{pose}$ 并通过 IK / OSC 跟踪。 | 天然支持增量式的人类接管(human takeover),无需绝对对齐——操作员不必匹配机器人当前位姿。 |
7.12.3 数据记录(Data Recording)
遥操作数据集:$\mathcal{D} = \{(o_t, a_t)\}_{t=1}^{T}$。
| 从臂的观测 $o_t$ | 从臂的动作 $a_t$(取决于控制接口与动作空间) |
|---|---|
|
视觉观测:RGB、深度等; 本体感受: · 关节角 $q_t$ · 关节速度 $\dot{q}_t$(用时间差分计算) · 末端执行器运动(用 FK 计算) · 力矩 $\tau$(若有力传感器) |
关节空间(Joint-space):$q_{\text{target}}$、$\dot{q}_{\text{target}}$ 或力矩 $\tau_{\text{target}}$ 任务空间(Task-space):末端执行器位姿 $x$ $\Delta$-位姿(非常常见):$\Delta x_t$ |
7.12.4 其它形态的遥操作采集
- 轮式人形机器人全身遥操作:用基于 IMU 的动捕(IMU-based MoCap)做身体动捕 + 数据手套(data glove)做手部动捕,进行全身与全手重定向(whole-body / whole-hand retargeting)(来自 Galbot)。
- 全人形机器人上身遥操作(如 Tesla 示例)与全身遥操作(HumanoidGPT, CVPR 2026, Galbot)。
7.13 BC 对机器人总是有效吗?
7.14 缓解分布漂移:DAgger 及其变体
缓解分布漂移有两条思路:用更好的数据(让训练分布去覆盖策略真正访问的分布)或用更好的模型。DAgger 属于前者。
7.14.1 原始 DAgger(Dataset Aggregation)
DAgger(Dataset Aggregation,数据集聚合)的核心思想:让策略自己去跑、产生它会访问的状态,再为这些状态补充专家标签,把新数据并入数据集后重训,从而使训练分布逐步逼近策略实际访问的分布。
7.14.2 Human-Gated DAgger(HG-DAgger)
HG-DAgger 的关键思想:不再离线标注动作,而是让人在执行过程中介入(intervene)。
| 工作流程 | 相较原始 DAgger 的优点 |
|---|---|
|
1. 运行策略 $\pi_\theta(a_t \mid o_t)$; 2. 人类监控执行; 3. 当策略出错时:人类接管控制(遥操作),提供纠正动作 $a_t$; 4. 记录被纠正的数据 $(o_t, a_t)$; 5. 聚合并重训:$\mathcal{D} \leftarrow \mathcal{D} \cup \mathcal{D}_{\text{human}}$。 |
· 避免手工标注动作; · 原始 DAgger 需标注每个状态,HG-DAgger 仅在失败时(必要时)标注; · 更数据高效、更实用。 |
课件示例:用 HG-DAgger 训练 Galbot 的补货(restocking)技能——当机器人漂移到错误状态时人类接管,这些数据被保存用于 DAgger。
7.14.3 DAgger 变体:On-Policy Distillation(在线策略蒸馏)
核心思想:用一个教师策略(teacher policy)替代人类标注。On-policy 循环:
- 运行学生策略 $\pi_\theta(a_t \mid o_t)$,收集学生访问的状态:$o_t \sim d^{\pi_\theta}$;
- 查询教师策略:$a_t^{T} \sim \pi_T(a_t \mid o_t)$;
- 对学生做一步梯度更新(不超过一步,以保持纯 on-policy)。
教师策略的例子:
- 可访问特权信息(privileged information)的特权策略,例如基于状态的策略(state-based),因而更易学习;此时学生是基于观测(视觉)的策略。
- 运动规划器(motion planner):可直接算出最短路径并给出动作标签,例如在 point-goal navigation 任务中。
7.15 从模型角度改进 IL:历史与多模态动作分布
除了改进数据,也可以改进模型。课件给出两个方向:
- 非马尔可夫模型(Non-Markovian Model)/ 利用整段历史:由于观测往往非马尔可夫(见 7.6),仅用当前观测可能不足;使用整段历史(whole history)的模型有助于消歧。但课件也提醒,这有时反而表现更差(aside: why might this work poorly)——例如可能放大对历史中虚假相关性的依赖。
- 为什么会拟合专家失败(why might we fail to fit the expert):其中一个重要原因是专家动作呈多模态(multimodal)分布——同一观测下专家可能有多个合理动作(如绕障碍可向左或向右)。用固定高斯策略会把多个模态平均成一个不合理的中间动作。
- Diffusion Policy:课件预告用扩散模型(diffusion)来建模多模态动作分布,能更好地捕捉这种多峰结构("More on this later!",留待后续讲解)。
7.16 本讲小结:模仿学习
- 模仿学习是「从行为中学习」,但成功与否取决于:专家数据的可得性、质量与覆盖度;以及模型容量。
- 基础 IL 算法 BC 受分布漂移困扰;结合更好的数据采集(DAgger 变体)可得到强且可泛化的策略。
- 能捕捉历史或多模态动作分布的更好模型也可能有帮助。
- 总体而言,只要数据与模型都好,IL 通常能成;但监督数据未必可得 —— 这时就需要强化学习(RL)(下一讲 Lecture 8, Policy II)。
本讲重点回顾
1. policy:$\text{state} \to \text{action}$;随机 $a \sim \pi(a \mid s)$,确定性 $a = \pi(s)$;现实机器人策略 $a \sim \pi(a \mid o, l)$。
2. state vs. observation:状态完整、马尔可夫、常不可得;观测部分/有噪/有歧义,往往非马尔可夫 $P(o_{t+1} \mid o_t, a_t, \dots) \neq P(o_{t+1} \mid o_t, a_t)$。
3. 动力学模型 $P(s_{t+1} \mid s_t, a_t)$;世界模型 = 学习的动力学 + 可能的 $r(s,a)$ 与 $P(o\mid s)$;MDP 是序贯决策框架。
4. BC:监督拟合专家数据,确定性策略用 MSE $\lVert a - a^*\rVert$,等价于固定协方差高斯策略 $\mathcal{N}(a;\mu_\theta,\Sigma_\theta)$ 的最大似然。
5. 分布漂移:测试时 $o_t \sim p_{\pi_\theta}(o)$ 与训练分布不匹配,小错 $\to$ OOD $\to$ 误差复合;机器人高维动作下更严重。
6. 对策:更好数据(DAgger / HG-DAgger / On-Policy Distillation)+ 更好模型(用历史、建模多模态如 Diffusion Policy)。
第 8 讲 · 策略学习 II
本讲在第 7 讲模仿学习(imitation learning / behavior cloning)的基础上,转向强化学习(reinforcement learning, RL)。与行为克隆需要专家示范不同,RL 让智能体(agent)通过与环境交互、获得标量奖励信号来学习策略。本讲建立 RL 的数学框架(Markov chain、MDP、POMDP),定义 reward、return、value function 与 action-value function,并系统推导策略梯度(policy gradient)方法(REINFORCE),再通过 reward-to-go、baseline、Q/V 函数一步步降低方差,最终引出 actor-critic 算法与 GAE。本讲所有算法均为 on-policy。
8.1 强化学习简介:在交互中学习策略
- 核心定义:RL 是通过与环境交互来学习一个策略(policy)的范式。
- 目标(objective):最大化累积奖励(cumulative reward),即长期回报的期望。
- 无需专家示范:不像 behavior cloning 那样依赖专家轨迹,agent 自己通过试错探索。
- 交互闭环:agent 根据观测做出决策(actions)$\to$ 环境产生后果(consequences):新的观测(状态)和奖励 $\to$ agent 据此再决策。
课件用三个例子说明 RL 框架的通用性:
| 场景 | Actions(动作) | Observations(观测) | Rewards(奖励) |
|---|---|---|---|
| 动物 / 人 | 肌肉收缩(muscle contractions) | 视觉、嗅觉等感官 | 食物 |
| 机器人 | 电机电流或力矩(motor current / torque) | 相机图像 | 任务成功度(如奔跑速度) |
| 库存管理 | 采购什么 | 库存水平 | 利润 |
8.2 Markov 链与动力学模型(dynamics model)
- 动力学模型 / 转移模型(dynamics / transition model):$P(s_{t+1} \mid s_t, a_t)$,描述环境/世界如何演化——给定当前状态与动作,预测下一状态。
- Markov 性质(Markovian):若 $P(s_{t+1} \mid s_t, a_t, s_{t-1}, a_{t-1}, \dots) = P(s_{t+1} \mid s_t, a_t)$,则系统是 Markov 的。
8.3 奖励函数 reward function $r(s,a)$
课件定义
奖励函数 $r(s,a) \in \mathbb{R}$ 是一个标量信号(scalar signal),用于评价在某状态下采取某动作的好坏(the quality of an action in a state),并提供来自环境的即时反馈(immediate feedback from the environment)。
关键性质(key properties):
- 局部且短视(local & myopic):只反映即时结果(instant outcome),不直接体现长期后果。
- 可稀疏可稠密(sparse or dense):
- 稠密奖励(dense reward):频繁反馈、塑造行为。例:导航中只要保持在车道内前进就持续得到奖励。
- 稀疏奖励(sparse reward):只在成功/失败时给奖励。例如终端奖励(terminal reward)只在回合结束时给出:
$$r(s_t,a_t)=\begin{cases}1 \text{ 或 } -1, & t=T\\[2pt] 0, & t\neq T\end{cases}$$
8.4 Markov 决策过程(MDP)$(S,A,P,r,\gamma)$
把"状态 + 动作 + 转移 + 奖励"组合起来,就是 RL 的标准数学模型——Markov 决策过程(Markov Decision Process, MDP),由 Andrey Markov 与 Richard Bellman 的工作奠基。
| 符号 | 名称 | 含义 |
|---|---|---|
| $S$ | 状态空间(state space) | 所有可能状态 $s$ 的集合 |
| $A$ | 动作空间(action space) | 所有可能动作 $a$ 的集合 |
| $P$ | 转移概率(transition) | $P(s_{t+1}\mid s_t,a_t)$,即动力学模型 |
| $r$ | 奖励函数(reward) | $r(s,a)\in\mathbb{R}$,标量即时反馈 |
| $\gamma$ | 折扣因子(discount factor) | $\gamma\in[0,1]$,权衡近期与远期奖励(见 8.12) |
8.5 强化学习的目标(the goal of RL)
策略 $\pi_\theta(a\mid s)$ 与环境交互产生轨迹(trajectory) $\tau=(s_1,a_1,s_2,a_2,\dots,s_T,a_T)$。其分布由初始分布、策略与转移共同决定:
$$p_\theta(\tau)=p(s_1)\prod_{t=1}^{T}\pi_\theta(a_t\mid s_t)\,P(s_{t+1}\mid s_t,a_t)$$
RL 的目标是找到使期望累积奖励最大的参数 $\theta$:
$$\theta^\star=\arg\max_\theta\; J(\theta),\qquad J(\theta)=\mathbb{E}_{\tau\sim p_\theta(\tau)}\!\left[\sum_{t=1}^{T} r(s_t,a_t)\right]$$
其中 $T$ 为时间视界(time horizon)/ 回合长度(episode length),即一个回合的总时间步数。
8.6 有限视界与无限视界
- 有限视界(finite horizon):目标可写成对状态-动作边缘分布(state-action marginal) $p_\theta(s_t,a_t)$ 求和:$J(\theta)=\sum_{t=1}^{T}\mathbb{E}_{(s_t,a_t)\sim p_\theta}[r(s_t,a_t)]$。
- 无限视界(infinite horizon):$T\to\infty$ 时,状态-动作分布趋于平稳分布(stationary distribution) $p_\theta(s,a)$。"平稳"意味着转移前后分布相同(same before and after transition)。
8.7 部分可观测 MDP(POMDP)
- 在很多真实任务(尤其是视觉策略)中,agent 看不到完整状态 $s_t$,只能得到观测 $o_t$,二者由 $p(o_t\mid s_t)$ 关联。
- 此时模型变为部分可观测 Markov 决策过程(Partially Observed MDP, POMDP),策略变为 $\pi_\theta(a_t\mid o_t)$。
- MDP vs POMDP:MDP 中策略直接基于状态 $s$;POMDP 中策略只能基于观测 $o$。
8.8 在线/离线与 On-policy / Off-policy
| 范式 | 是否与环境交互 | 是否需要 reward | 是否属于 RL | 数据来源 |
|---|---|---|---|---|
| Online On-Policy RL | 训练时持续交互 | 需要 | 是 | 仅用最新策略采集的经验 |
| Online Off-Policy RL | 训练时持续交互 | 需要 | 是 | 训练全程的数据(存于缓冲区 $D$) |
| Offline RL | 先采集后不再交互 | 需要 | 是 | 任意策略采集、存于 $D$ |
| Behavior Cloning (BC) | 不交互 | 不需要 | 否 | 专家示范 $\pi_{\text{expert}}$ |
- On-Policy RL:用当前/最新策略采集的数据训练。本讲所有算法都是 on-policy。
- Off-Policy RL(下一讲):复用历史数据(buffer $D$),更省样本(more sample efficient)。
- Behavior Cloning:模仿专家示范,无需奖励、不与环境交互,不属于 RL。
- Offline RL:用奖励但不再交互,属于 RL(超出本课范围)。
8.9 直接策略微分与策略梯度定理
要最大化 $J(\theta)=\mathbb{E}_{\tau\sim p_\theta(\tau)}[r(\tau)]$,需对 $\theta$ 求梯度。利用对数导数技巧(log-derivative trick) $\nabla_\theta p_\theta(\tau)=p_\theta(\tau)\nabla_\theta\log p_\theta(\tau)$:
$$\nabla_\theta J(\theta)=\mathbb{E}_{\tau\sim p_\theta(\tau)}\big[\nabla_\theta\log p_\theta(\tau)\,r(\tau)\big]$$
对 $\log p_\theta(\tau)$ 展开,注意 $p(s_1)$ 与 $P(s_{t+1}\mid s_t,a_t)$ 都不依赖 $\theta$,只有策略项依赖 $\theta$:
$$\log p_\theta(\tau)=\log p(s_1)+\sum_{t=1}^{T}\Big[\log\pi_\theta(a_t\mid s_t)+\log P(s_{t+1}\mid s_t,a_t)\Big]$$
$$\Rightarrow\;\nabla_\theta\log p_\theta(\tau)=\sum_{t=1}^{T}\nabla_\theta\log\pi_\theta(a_t\mid s_t)$$
策略梯度定理(Policy Gradient Theorem)
$$\nabla_\theta J(\theta)=\mathbb{E}_{\tau\sim p_\theta(\tau)}\!\left[\left(\sum_{t=1}^{T}\nabla_\theta\log\pi_\theta(a_t\mid s_t)\right)\!\left(\sum_{t=1}^{T} r(s_t,a_t)\right)\right]$$
关键优势:梯度完全不依赖未知的转移模型 $P$,只需要能对策略求对数梯度并能采样。
8.10 Monte Carlo 近似与 REINFORCE 算法
期望无法精确计算,用 Monte Carlo 近似:采样 $N$ 条轨迹,用样本均值替代期望。其理论基础是大数定律(Law of Large Numbers, LLN):
$$\hat\mu_N=\frac{1}{N}\sum_{i=1}^{N}x_i\;\xrightarrow{\,N\to\infty\,}\;\mathbb{E}[x],\qquad x_1,\dots,x_N\sim p(x)\;\text{i.i.d.}$$
样本均值是真实期望的无偏估计(unbiased estimator)。据此得到 REINFORCE 算法的梯度估计:
REINFORCE 算法
$$\nabla_\theta J(\theta)\approx\frac{1}{N}\sum_{i=1}^{N}\left(\sum_{t=1}^{T}\nabla_\theta\log\pi_\theta(a_{i,t}\mid s_{i,t})\right)\!\left(\sum_{t=1}^{T} r(s_{i,t},a_{i,t})\right)$$
三步循环:① 运行策略采集样本轨迹(generate samples);② 用上式估计梯度;③ 梯度上升更新 $\theta\leftarrow\theta+\alpha\nabla_\theta J(\theta)$(improve the policy)。
POMDP 版本:把 $s_t\to o_t$ 即可,策略梯度仍然成立:
$$\nabla_\theta J(\theta)=\mathbb{E}_{\tau\sim p_\theta(\tau)}\!\left[\left(\sum_{t=1}^{T}\nabla_\theta\log\pi_\theta(a_t\mid o_t)\right)\!\left(\sum_{t=1}^{T} r(s_t,a_t)\right)\right]$$
例:高斯策略(Gaussian policies)
当 $\pi_\theta(a_t\mid s_t)=\mathcal{N}\big(f(s_t),\Sigma\big)$(连续动作常用)时,其对数梯度为:
$$\nabla_\theta\log\pi_\theta(a_t\mid s_t)=-\left(\frac{df}{d\theta}\right)^{\!T}\Sigma^{-1}\big(f(s_t)-a_t\big)$$
8.11 策略梯度的方差问题
REINFORCE 在常规样本量下梯度非常嘈杂(noisy):
- 高方差(high variance),但仍然无偏(still unbiased)。
由中心极限定理(Central Limit Theorem, CLT),样本均值的方差随 $N$ 衰减:
$$\mathrm{Var}(\hat\mu_N)=\frac{\sigma^2}{N}\;=\;\mathcal{O}\!\left(\frac{1}{N}\right),\qquad \text{标准误差} \sim\mathcal{O}\!\left(\frac{1}{\sqrt{N}}\right)$$
与行为克隆(最大似然)对比:BC 的梯度 $\nabla_\theta J_{ML}(\theta)=\mathbb{E}_{\tau\sim\pi_{\text{expert}}}[\nabla_\theta\log\pi_\theta(a_{i,t}\mid s_{i,t})]$ 只有当 $\pi_\theta=\pi_{\text{expert}}$ 时才为 $0$;策略梯度则用回报(return)加权对数似然——好的轨迹被"鼓励",差的被"压制"。
8.12 降方差之一:因果性与 reward-to-go
因果性(causality):动作只影响未来的奖励,不影响过去的奖励。因此时刻 $t$ 的动作应只与该时刻之后的奖励相乘,得到 reward-to-go:
$$\nabla_\theta J(\theta)=\mathbb{E}_{\tau\sim p_\theta(\tau)}\!\left[\sum_{t=1}^{T}\nabla_\theta\log\pi_\theta(a_t\mid s_t)\underbrace{\sum_{t'=t}^{T} r(s_{t'},a_{t'})}_{\text{reward-to-go }\hat Q_{t}}\right]$$
证明思路:把总回报拆成"过去奖励 $\sum_{t'=1}^{t-1}r$ + reward-to-go"。需证过去奖励项的期望为零:令 $g_t\triangleq\nabla_\theta\log\pi_\theta(a_t\mid s_t)$、$R_{
8.13 降方差之二:基线(baselines)
从梯度中减去一个基线 $b$ 仍然无偏:
$$\nabla_\theta J(\theta)=\mathbb{E}_{\tau\sim p_\theta(\tau)}\big[\nabla_\theta\log\pi_\theta(\tau)\,(r(\tau)-b)\big]$$
因为 $\mathbb{E}[\nabla_\theta\log p_\theta(\tau)\cdot b]=b\,\nabla_\theta\!\int p_\theta(\tau)d\tau=b\,\nabla_\theta 1=0$。
- 减去基线在期望上无偏(unbiased in expectation)。
- 常用基线为平均回报:$b=\frac{1}{N}\sum_i r(\tau_i)$。它不是最优的,但已经相当好。
- 最优基线(按梯度幅度加权的期望回报)可由方差解析推导得到,但实际中难以精确获得。
- 更进一步可用状态相关基线(state-dependent baseline) $b(s_t)$,同样无偏(见 8.15)。
8.14 自动微分实现(伪代码)
策略梯度可借助自动微分(automatic differentiation)实现——构造一个加权的负对数似然损失,让框架自动反传。与最大似然(监督学习)唯一的区别是乘上了 $q$ 值权重:
最大似然(BC):
# states/actions: (N*T) x D 张量
logits = policy.predictions(states)
neg_ll = softmax_cross_entropy_with_logits(labels=actions, logits=logits)
loss = reduce_mean(neg_ll)
grads = gradients(loss, variables)
策略梯度(多一行 q_values 加权):
# 多给一个 q_values: (N*T) x 1,估计的状态-动作价值
logits = policy.predictions(states)
neg_ll = softmax_cross_entropy_with_logits(labels=actions, logits=logits)
weighted = multiply(neg_ll, q_values) # 关键差异:用回报加权
loss = reduce_mean(weighted)
grads = gradients(loss, variables)
8.15 价值函数 $V^\pi$、动作价值 $Q^\pi$ 与优势函数 $A^\pi$
为进一步降方差,引入价值函数。直觉上,reward-to-go 是对"从 $(s_t,a_t)$ 出发的未来回报"的单样本估计,可以用其期望值替代:
三个核心定义
动作价值函数(Q-function / action-value):从状态 $s_t$ 执行动作 $a_t$ 后,按策略 $\pi$ 继续的期望回报
$$Q^\pi(s_t,a_t)=\mathbb{E}_{\pi}\!\left[\sum_{t'=t}^{T} r(s_{t'},a_{t'})\,\Big|\,s_t,a_t\right]$$
价值函数(value function):从状态 $s_t$ 出发、按策略 $\pi$ 的期望回报(对动作求期望)
$$V^\pi(s_t)=\mathbb{E}_{a_t\sim\pi(\cdot\mid s_t)}\big[Q^\pi(s_t,a_t)\big]$$
优势函数(advantage function):动作 $a_t$ 相对平均水平好多少
$$A^\pi(s_t,a_t)=Q^\pi(s_t,a_t)-V^\pi(s_t)$$
用 $Q^\pi$ 替换 reward-to-go 无偏且减小方差;再以 $V^\pi(s_t)$ 作为状态相关基线(任何只依赖状态的基线都无偏,因 $\int b(s_t)\nabla_\theta\pi_\theta(a_t\mid s_t)\,da_t=b(s_t)\nabla_\theta 1=0$),最终得到用优势函数表示的策略梯度:
$$\boxed{\;\nabla_\theta J(\theta)\approx\frac{1}{N}\sum_{i=1}^{N}\sum_{t=1}^{T}\nabla_\theta\log\pi_\theta(a_{i,t}\mid s_{i,t})\;A^\pi(s_{i,t},a_{i,t})\;}$$
8.16 价值函数拟合与 Bellman 方程
用一个网络拟合 $V^\pi$(policy evaluation)。利用 Bellman 关系,把优势用单步奖励 + 下一状态价值近似(自举 bootstrapping):
$$Q^\pi(s_t,a_t)=r(s_t,a_t)+\mathbb{E}_{s_{t+1}\sim P}\big[V^\pi(s_{t+1})\big]\approx r(s_t,a_t)+V^\pi(s_{t+1})$$
$$\Rightarrow\;A^\pi(s_t,a_t)\approx r(s_t,a_t)+V^\pi(s_{t+1})-V^\pi(s_t)$$
这样只需拟合一个 $V^\pi(s)$ 网络。拟合方式:
- Monte Carlo 评估:用实际 reward-to-go 作为目标拟合 $V^\pi$(同一函数应拟合多个样本)。
- 自举/TD 目标:用 $r(s_t,a_t)+V^\pi(s_{t+1})$ 作为回归目标。
8.17 Actor-Critic 算法
- Actor(演员):策略 $\pi_\theta$,负责选动作。
- Critic(评论家):价值函数 $V^\pi$,用于降低策略梯度的方差。
Batch Actor-Critic(批量,基于轨迹):采一批轨迹 $\tau=\{s_i,a_i\}$ $\to$ 拟合 $V^\pi$ $\to$ 计算 $\hat A$ $\to$ 更新策略。像"散步时记笔记,走完一段再坐下来研究笔记、调整策略"。
TD 误差版本:用 时序差分误差(temporal difference / TD error,又称 Bellman error)计算优势:
$$\delta_t=r(s_t,a_t)+\gamma V^\pi(s_{t+1})-V^\pi(s_t)$$
Online Actor-Critic(在线,基于转移):每走一步就看一眼 TD 误差并立即更新——"边走边学,迈一步、瞥一眼 TD 误差、马上调整步态"。A3C 等用并行化的在线 batch。
网络架构设计:
| 设计 | 优点 | 缺点 |
|---|---|---|
| 两网络(actor / critic 各一) | 简单、稳定 | actor 与 critic 不共享特征 |
| 共享网络(双头) | 共享特征、更高效 | 训练可能不稳定 |
8.18 折扣因子 $\gamma$(discount factor)
从有限视界推广到无限视界,需要折扣因子让无穷和收敛。目标变为最大化折扣累积奖励(discounted return):
$$J(\theta)=\mathbb{E}\!\left[\sum_{t=1}^{\infty}\gamma^{\,t-1} r(s_t,a_t)\right],\qquad \gamma\in[0,1]$$
| 任务类型 | 说明 |
|---|---|
| 回合制 / 有限视界(episodic, finite horizon) | 交互自然地分成一个个回合(有终止) |
| 连续 / 无限视界(continuous, infinite horizon) | agent 持续交互,没有内在的回合边界 |
- $\gamma$ 改变 agent 的时间视界:$\gamma$ 越大,考虑越长远的未来;$\gamma$ 越小,越聚焦即时奖励与转移。
- $\gamma$ 也是一种降方差技巧:"discount = variance reduction"——折扣远期不确定的奖励,降低估计方差。
8.19 N-step 回报与广义优势估计(GAE)
两种优势估计各有取舍:
| 估计方式 | 偏差 | 方差 |
|---|---|---|
| 自举(critic,单步 TD) | 有偏(若 critic 不完美,而它总是不完美) | 低方差 |
| Monte Carlo(实际 reward-to-go) | 无偏 | 高方差(单样本估计) |
N-step 回报:用一个参数 $n$ 平衡偏差/方差——决定"信任真实轨迹多久后再开始自举(bootstrapping)"。
广义优势估计(Generalized Advantage Estimation, GAE):不必只选一个 $n$,而是对所有 $n$-step 优势做指数衰减加权(exponential falloff)组合,权重由 $\lambda$ 控制:
$$A^{\text{GAE}(\gamma,\lambda)}_t=\sum_{k=0}^{\infty}(\gamma\lambda)^{k}\,\delta_{t+k},\qquad \delta_t=r(s_t,a_t)+\gamma V(s_{t+1})-V(s_t)$$
- $\lambda$ 起到与折扣类似的作用(similar effect as discount):discount = variance reduction。
- 倾向于"较早切断"(cutting earlier)以减小方差。
- 现代 on-policy 方法(PPO、TRPO、A3C)几乎都用 GAE。典型取值:$\gamma\approx0.99$、$\lambda\approx0.95$——用 $\gamma$ 保持任务真实视界,再用 $\lambda$ 削减方差。出处:Schulman, Moritz, Levine, Jordan, Abbeel '16。
8.20 经典案例与本讲小结
- TD-Gammon(Tesauro 1992)、AlphaGo(Silver et al. 2016):策略评估的经典案例。
- A3C(Mnih et al. 2016):异步并行在线 actor-critic,$N=4$ 步回报,actor 与 critic 共享单网络;在仅靠原始像素的迷宫(labyrinth)中收集奖励。
- GAE(Schulman et al. 2016):批量 actor-critic,混合 Monte Carlo 与函数近似;用于高维连续控制(关节角/角速度/笛卡尔位置为观测,关节力矩为动作,类似 MuJoCo Humanoid)。
本讲重点回顾
① RL 框架:在交互中学策略、最大化期望累积奖励、无需专家示范。
② MDP $(S,A,P,r,\gamma)$;Markov 性:$P(s_{t+1}\mid s_t,a_t,\dots)=P(s_{t+1}\mid s_t,a_t)$;POMDP 只能观测 $o_t$。
③ reward $r(s,a)\in\mathbb{R}$:评价状态下动作好坏的标量即时反馈,局部短视,可稀疏可稠密,稀疏时需 credit assignment。
④ 策略梯度定理:$\nabla_\theta J=\mathbb{E}[\sum_t\nabla_\theta\log\pi_\theta(a_t\mid s_t)\sum_t r(s_t,a_t)]$,不依赖转移模型。
⑤ REINFORCE = 策略梯度 + Monte Carlo(无偏但高方差,$\mathrm{Var}\sim\mathcal{O}(1/N)$)。
⑥ 降方差三件套:reward-to-go(因果性)$\to$ 用 $Q^\pi$ $\to$ 减 $V^\pi$ 基线 $\Rightarrow$ 优势 $A^\pi=Q^\pi-V^\pi$。
⑦ Actor-Critic:actor = 策略,critic = $V^\pi$;TD 误差 $\delta_t=r+\gamma V(s_{t+1})-V(s_t)$;batch / online;单网络双头或双网络。
⑧ $\gamma$ 与 GAE:折扣调节视界且降方差;GAE 用 $\lambda$ 在偏差/方差间权衡($\gamma\approx0.99,\lambda\approx0.95$)。
⑨ 本讲算法全部是 on-policy;off-policy(重要性采样/buffer)留待下一讲。
第 9 讲 · 策略学习 III
本讲是策略学习(Policy Learning)系列的第三讲,主题为 Policy III。内容承接前两讲的 policy gradient 与 actor-critic 框架,重点解决两个核心问题:(1) 如何在优势估计(advantage estimation)中平衡偏差(bias)与方差(variance)——即 Generalized Advantage Estimation (GAE);(2) policy gradient 本质上是 on-policy 算法,样本利用率低,如何借助 importance sampling 把它"近似"改造为可复用数据的算法,由此引出 TRPO 与 PPO。最后系统梳理 PPO 的目标函数、算法流程与大量工程实现技巧。
advantage function $\to$ GAE(bias-variance 权衡)$\to$ policy gradient 是 on-policy(样本浪费)$\to$ importance sampling 引入 off-policy 数据 $\to$ 一阶近似失效的问题 $\to$ TRPO(硬约束 KL)$\to$ PPO(clipped objective / adaptive KL,软约束)$\to$ PPO 工程技巧。
9.1 优势函数(Advantage Function)回顾
在 actor-critic 框架中,policy gradient 的方差很大程度上来自回报项的尺度。引入优势函数(advantage function)作为基线(baseline)修正,可在不引入偏差的前提下显著降低方差:
优势函数定义
$$A(s,a) = Q(s,a) - V(s)$$
其中 $Q(s,a)$ 是在状态 $s$ 采取动作 $a$ 的动作价值(action value),$V(s)$ 是状态价值(state value)。$A(s,a)$ 衡量动作 $a$ 相对于"平均水平 $V(s)$"的相对优劣:$A>0$ 表示该动作比平均好,应提高其概率;$A<0$ 则应降低其概率。
带优势函数的 policy gradient 写作:
$$\nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta}\big[\nabla_\theta \log \pi_\theta(a\mid s)\, A^{\pi}(s,a)\big]$$
- 用 $A(s,a)$ 替代原始回报 $G_t$ 或 $Q(s,a)$,期望梯度不变(baseline $V(s)$ 与动作无关,期望为零),但方差更小。
- 实际中 $A(s,a)$ 需要估计;不同估计方式会带来不同的 bias-variance 折中,这正是 GAE 要解决的问题。
9.2 优势估计中的偏差-方差权衡
给定值函数估计 $V$,可以用 $n$ 步($n$-step)截断的方式估计优势。定义单步 TD 残差(temporal-difference residual):
$$\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)$$
则不同步长的优势估计为:
$n$ 步截断优势估计
$$\hat A_t^{(1)} = \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)$$
$$\hat A_t^{(2)} = \delta_t + \gamma\,\delta_{t+1} = r_t + \gamma r_{t+1} + \gamma^2 V(s_{t+2}) - V(s_t)$$
$$\hat A_t^{(k)} = \sum_{l=0}^{k-1} \gamma^l \delta_{t+l} = -V(s_t) + \sum_{l=0}^{k-1}\gamma^l r_{t+l} + \gamma^k V(s_{t+k})$$
| 估计方式 | 依赖 | 偏差(bias) | 方差(variance) |
|---|---|---|---|
| 步长小($k$ 小,如 $\hat A^{(1)}$) | 更依赖 $V$ 的估计 | 高($V$ 不准则偏差大) | 低 |
| 步长大($k$ 大,趋近 Monte-Carlo) | 更依赖真实采样回报 | 低 | 高(多步随机累积) |
单一步长无法兼顾,GAE 的思路就是把所有步长的估计加权融合。
9.3 Generalized Advantage Estimation (GAE)
GAE 用权重 $\omega_l = \lambda^{\,l-1}$ 对各阶截断估计加权($\lambda \in [0,1]$ 为衰减系数),将多个 $\hat A_t^{(k)}$ 组合起来。其闭式结果可写为 TD 残差的指数加权和(equals to):
GAE 公式
$$\hat A_t^{\mathrm{GAE}(\gamma,\lambda)} = \sum_{l=0}^{\infty} (\gamma\lambda)^{l}\, \delta_{t+l} = \sum_{l=0}^{\infty}(\gamma\lambda)^l\big(r_{t+l} + \gamma V(s_{t+l+1}) - V(s_{t+l})\big)$$
等价于对各阶截断优势 $\hat A_t^{(k)}$ 以权重 $\propto \lambda^{k-1}$ 做指数加权平均。
| $\lambda$ 取值 | 退化为 | 特性 |
|---|---|---|
| $\lambda = 0$ | $\hat A_t = \delta_t$(单步 TD) | 偏差大、方差小 |
| $\lambda = 1$ | $\hat A_t = \sum_l \gamma^l \delta_{t+l}$(Monte-Carlo 优势) | 偏差小、方差大 |
| $0 < \lambda < 1$ | — | 在两端之间平滑权衡 bias 与 variance |
- $\gamma$ 控制回报的折扣(远期奖励的重要性),$\lambda$ 控制偏差-方差的折中,二者作用不同。
- GAE 在实践中是 PPO 等算法估计优势的默认选择(PPO 算法中通常在此处使用 GAE)。
- 出处:Schulman, John, et al. "High-dimensional continuous control using generalized advantage estimation." arXiv:1506.02438.
9.4 Policy Gradient 是 On-policy 的
标准 policy gradient 的期望是在当前策略 $\pi_\theta$ 自己产生的轨迹分布下取的:
$$\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}\Big[\sum_t \nabla_\theta \log \pi_\theta(a_t\mid s_t)\,A^{\pi_\theta}(s_t,a_t)\Big]$$
9.5 能否去掉 AC 中的 on-policy 假设?
很自然的问题:能不能在 actor-critic(AC)中使用 off-policy 数据?(Off-Policy RL / Can we remove the on-policy assumption in AC?)若能复用历史数据(甚至来自不同策略 $\pi_{\text{old}}$ 的数据),样本效率将大幅提升。
课件分析了在 AC 中直接套用 off-policy 数据会"坏"在哪里,需要分别修正值函数(fixing the value function)与修正策略更新(fixing the policy update)。
谁依赖于当前策略 $\pi$?
这两种"依赖范围"的差别,决定了哪些项可以用 importance sampling 简单修正、哪些项很难修正——这正是 off-policy 改造的难点所在。
9.6 我们想要的算法:Off-policy + Importance Sampling
理想算法(The kind of algorithm we would like to see):既能像 policy gradient 一样直接优化策略,又能复用其它分布产生的数据。实现工具是 importance sampling(重要性采样)。
Importance Sampling 基本恒等式
$$\mathbb{E}_{x\sim p}[f(x)] = \mathbb{E}_{x\sim q}\Big[\frac{p(x)}{q(x)} f(x)\Big]$$
用采样分布 $q$ 的样本估计目标分布 $p$ 下的期望,权重 $\dfrac{p(x)}{q(x)}$ 称为重要性权重(importance weight)。
9.7 用 IS 推导 Off-policy Policy Gradient
设当前要优化的策略为 $\pi_\theta$,数据由旧策略 $\pi_{\theta_{\text{old}}}$ 采集。用 importance sampling 把目标改写到旧分布下:
$$J(\theta) = \mathbb{E}_{a\sim \pi_{\theta_{\text{old}}}}\Big[\frac{\pi_\theta(a\mid s)}{\pi_{\theta_{\text{old}}}(a\mid s)}\,A^{\pi_{\theta_{\text{old}}}}(s,a)\Big]$$
对应的 off-policy policy gradient 形式(Deriving the policy gradient with IS)即在原梯度上乘以概率比(probability ratio)。这就是后续 surrogate objective(代理目标)的雏形。
9.8 重要性采样的一阶近似
完整的 IS 权重是整条轨迹上各步比值的连乘,方差会随时间步指数级爆炸。课件对其做一阶近似(first-order approximation),只保留单步的概率比 $\dfrac{\pi_\theta(a_t\mid s_t)}{\pi_{\theta_{\text{old}}}(a_t\mid s_t)}$,并忽略状态分布因策略改变带来的偏移。
解决方向:限制每次更新中策略的变化幅度——这就是 TRPO / PPO 的出发点。
9.9 Trust Region Policy Optimization (TRPO)
TRPO 的思路:在用 importance sampling 优化平均回报(mean reward)的同时,用约束限制新旧策略的差异,从而让一阶近似始终有效。
TRPO 优化问题
$$\max_\theta\ \mathbb{E}\Big[\frac{\pi_\theta(a\mid s)}{\pi_{\theta_{\text{old}}}(a\mid s)} A^{\pi_{\theta_{\text{old}}}}(s,a)\Big]\quad \text{s.t.}\quad \mathbb{E}\big[D_{\mathrm{KL}}(\pi_{\theta_{\text{old}}}\,\|\,\pi_\theta)\big] \le \delta$$
- 直觉(Intuition):约束 $\pi_\theta$ 在每次更新中"不要变化太多",使用硬约束(hard constraint)控制变化幅度。
- 若 KL 散度足够小,则优化该 surrogate objective 可近似保证策略的单调改进(approximately monotonic policy improvement)。
- 缺点:数学复杂;对大型神经网络策略,直接做带约束优化很困难,需用二阶优化(second-order optimization)近似。
- 出处:Schulman, John, et al. "Trust region policy optimization." ICML, 2015.
TRPO 如何求解(四步)
| 步骤 | 做法 |
|---|---|
| Step 1 | 在 $\theta_{\text{old}}$ 附近对目标与约束做泰勒展开到主导阶(目标取一阶 $g$,KL 约束取二阶,海森矩阵 $H$)。 |
| Step 2 | 利用拉格朗日对偶(Lagrangian duality)求出闭式解,方向 $\propto H^{-1} g$。 |
| Step 3 | 由于泰勒展开的近似误差,KL 约束可能不满足,使用回溯线搜索(backtracking line search):取最小非负整数指数 $j$ 使步长 $\alpha^j$ 下的 $\pi_{\theta_{j}}$ 满足 KL 约束。 |
| Step 4 | 直接求 $H^{-1}g$ 代价很高,改用共轭梯度(conjugate gradient)求解线性方程 $Hx=g$,以 $x$ 近似 $H^{-1}g$。 |
TRPO 算法整体由:策略更新(带回溯线搜索)+ 值函数更新(value update)组成。其中部分技巧将在 PPO 中复用。
9.10 Proximal Policy Optimization (PPO)
沿用 TRPO 的直觉,PPO 用一阶算法(first-order algorithm)约束策略分布的变化,避免 TRPO 的复杂二阶计算。PPO 提供两种方式:
- Clipped surrogate objective(裁剪代理目标)
- Adaptive KL penalty coefficient(自适应 KL 惩罚系数)
出处:Schulman, John, et al. "Proximal policy optimization algorithms." arXiv:1707.06347.
9.10.1 Clipped Surrogate Objective
记概率比(probability ratio)$r_t(\theta) = \dfrac{\pi_\theta(a_t\mid s_t)}{\pi_{\theta_{\text{old}}}(a_t\mid s_t)}$。把它裁剪到区间 $[1-\epsilon,\ 1+\epsilon]$,取裁剪前后的较小值:
PPO Clipped Objective
$$L^{\mathrm{CLIP}}(\theta) = \mathbb{E}_t\Big[\min\big(r_t(\theta)\hat A_t,\ \ \mathrm{clip}(r_t(\theta),\,1-\epsilon,\,1+\epsilon)\,\hat A_t\big)\Big]$$
| 条件 | 行为 |
|---|---|
| Condition 1:$\hat A_t > 0$(动作好) | 提升 $r_t$ 提升回报,但当 $r_t > 1+\epsilon$ 时被裁剪封顶,不再因继续增大概率比而获得收益。 |
| Condition 2:$\hat A_t < 0$(动作差) | 降低 $r_t$ 提升目标,但当 $r_t < 1-\epsilon$ 时被裁剪封底,限制概率比过度减小。 |
$\min$ 与 clip 的组合使得:策略变化越界时,目标对越界方向的梯度归零,从而抑制单步过大的策略更新。
9.10.2 Adaptive KL Penalty Coefficient
TRPO 的硬 KL 约束难以直接施加;PPO 的另一种方案是把 KL 散度作为惩罚项加入目标,并自适应调整惩罚系数 $\beta$ 以达到目标 KL 值 $d_{\mathrm{targ}}$:
Adaptive KL 目标
$$L^{\mathrm{KLPEN}}(\theta) = \mathbb{E}_t\Big[\frac{\pi_\theta(a_t\mid s_t)}{\pi_{\theta_{\text{old}}}(a_t\mid s_t)}\hat A_t - \beta\, D_{\mathrm{KL}}\big(\pi_{\theta_{\text{old}}}\,\|\,\pi_\theta\big)\Big]$$
更新规则:若实测 KL 远大于 $d_{\mathrm{targ}}$ 则增大 $\beta$;若远小于 $d_{\mathrm{targ}}$ 则减小 $\beta$。
- Adaptive KL penalty 与 clipped surrogate objective 有类似效果,可作为后者的替代方案。
9.10.3 PPO 算法流程
- 用旧策略 $\pi_{\theta_{\text{old}}}$ 采集一批轨迹,存入 buffer。
- 用 GAE 计算优势 $\hat A_t$(PPO 算法通常在此处使用 GAE)。
- 对同一批数据迭代 $K$ 个 epoch,每个 epoch 内分 mini-batch 优化 clipped/KL 目标,更新策略。
- 同时进行值函数更新(value update),拟合回报目标。
9.11 PPO 的工程实现技巧
"Implementation matters"——课件强调 PPO 的实际性能高度依赖实现细节(参考 Engstrom et al. 2020, arXiv:2005.12729 等)。
9.11.1 基础实现:梯度与 IS 的联系
未裁剪目标的梯度可以推导为:
$$\nabla_\theta L = \mathbb{E}\Big[\frac{\pi_\theta(a\mid s)}{\pi_{\theta_{\text{old}}}(a\mid s)}\nabla_\theta \log\pi_\theta(a\mid s)\,\hat A\Big]$$
这恰好是 importance sampling + policy gradient 的组合,印证了 PPO 与 off-policy policy gradient 的同源关系。
9.11.2 更新轮数 $K$ 与 mini-batch
| 设置 | 过大 | 过小 |
|---|---|---|
| epoch 数 $K$ | 分布失配(distribution mismatch)变大,新旧策略偏离太远 | 样本利用不足 |
| mini-batch 大小 | 容易陷入局部最优(stuck in local minima) | 梯度噪声大(noisy gradient) |
每个 epoch 把 buffer 划分成若干 mini-batch(类似 batch gradient descent)。实践中 $K$ 不宜过大。
9.11.3 归一化 / 缩放(Normalization / Scaling)
| 技巧 | 做法 | 作用 |
|---|---|---|
| Advantage normalization | 对 mini-batch 内的优势做标准化 $\hat A_t \leftarrow \dfrac{\hat A_t - \mu}{\sigma + \varepsilon}$(仅训练时用) | 当值函数尚未训练好时,帮助 $\hat A_t$ 以 $0$ 为中心,稳定训练 |
| State normalization | $s_t \leftarrow \dfrac{s_t - \mu}{\sigma+\varepsilon}$,需保存状态的 running mean,测试时复用 | 类似 Batch-Norm,帮助训练 |
| Reward scaling | 用回报的 running std 对奖励做缩放 $r_t \leftarrow \dfrac{r_t}{\sigma+\varepsilon}$ | 缩放后的奖励让值函数 $V_\phi(s_t)$ 更易训练 |
9.11.4 初始化与激活函数
- Orthogonal initialization(正交初始化):Step 1 用高斯分布 $\mu=0,\sigma=1$ 初始化 $W$;Step 2 对 $W$ 做 SVD,$W=U D V$,取正交因子作为权重,使 $W$ 为正交矩阵。Engstrom, Ilyas et al. (2020) 发现其优于默认的 Xavier 初始化。
- Andrychowicz et al. (2021) 发现把动作分布初始化在 $0$ 附近(策略输出层权重乘以 $0.01$)是有益的。
- Tanh activation:PPO 原论文用 Tanh 而非 ReLU;由于通常只有 $2$ 到 $3$ 层 MLP,梯度消失影响不显著。
9.11.5 超参数(Hyperparameter)
课件给出了四足机器人运动(quadrupedal robot locomotion)任务中所用的超参数示例,并比较了不同实现与超参数的效果——说明 PPO 需要针对任务仔细调参。
9.12 关于 PPO 的本质洞察
严格说,PPO 是一个"off-policy 但近似 on-policy"的算法:
• 它从 importance sampling 推导而来(理论上是 off-policy);
• 但人们通常把它归为 on-policy 算法,重要原因是 PPO 只使用最近(most recent)采集的数据,新旧策略差异很小,IS 权重接近 $1$。
9.13 优缺点总结(Pros and Cons)
| 优点(Pros) | 缺点(Cons) |
|---|---|
| 更好的样本效率:importance sampling + mini-batch 复用数据 | 相比纯 off-policy RL 算法,样本效率仍较差 |
| 训练更稳定、性能更好:clipped surrogate / adaptive KL 及各种实现技巧 | 需在仿真器中训练,存在与真实世界的 domain gap |
| 数学比 TRPO 更简单(一阶算法) | 有许多任务相关的 trick,需要仔细选择超参数 |
9.14 延伸阅读与 RL 算法分类
- OpenAI Spinning Up RL 教程:系统介绍 RL 基础与 A Taxonomy of RL Algorithms(RL 算法分类谱系,区分 on-policy / off-policy、model-free / model-based 等)。
- 下一讲预告:Lecture 10 · Policy Learning IV。
本讲重点回顾
1. 优势函数:$A(s,a)=Q(s,a)-V(s)$,作为 baseline 降低 policy gradient 方差而不引入偏差。
2. GAE:用 $\lambda$ 加权多个截断优势估计 $\hat A_t^{\mathrm{GAE}}=\sum_l (\gamma\lambda)^l\delta_{t+l}$,$\lambda=0$ 偏差大方差小、$\lambda=1$ 偏差小方差大,平衡 bias 与 variance。
3. On-policy 问题:policy gradient 期望在 $\pi_\theta$ 自身分布下取,更新后旧数据失效,样本效率低。
4. Importance sampling:$\mathbb{E}_p[f]=\mathbb{E}_q[\tfrac{p}{q}f]$,引出 off-policy policy gradient 与概率比 $r_t(\theta)$;轨迹连乘方差大,需一阶近似,近似在新旧策略差异大时失效。
5. TRPO:带 KL 硬约束的 surrogate 优化,KL 足够小可近似保证单调改进;用泰勒展开 + 拉格朗日对偶 + 共轭梯度 + 回溯线搜索求解(二阶、复杂)。
6. PPO:一阶软约束。Clipped objective $L^{\mathrm{CLIP}}=\mathbb{E}[\min(r_t\hat A_t,\ \mathrm{clip}(r_t,1-\epsilon,1+\epsilon)\hat A_t)]$;或 adaptive KL penalty。通常配合 GAE,多 epoch + mini-batch,配套归一化/正交初始化/Tanh 等技巧。
7. 本质:PPO 是 off-policy 推导但因只用最近数据而被视为近似 on-policy。
第 10 讲 · 策略学习 IV
本讲是「策略学习」系列的最后一讲,核心围绕生成式策略(generative policy)展开:从模仿学习中的多模态难题切入,系统讲解扩散模型(diffusion model)与流匹配(flow matching)这一类生成模型,再落到机器人上的 Diffusion Policy,进一步讨论如何对扩散 / 流策略做强化学习(DPPO、FPO)。后半段引入大语言模型(Large Language Model, LLM)及其 RL 后训练(RLHF / GRPO),最后过渡到视觉-语言-动作模型(Vision-Language-Action, VLA),为后续具身大模型铺垫。
本讲对应的作业要求让机器人对已知物体完成开环抓取(open-loop grasping),需实现:
• 相机外参标定(camera extrinsic calibration)
• 用 PointNet 做物体位姿估计(object pose estimation)
• 基于估计位姿计算夹爪位姿(gripper pose computation)
10.1 为什么需要扩散模型?——模仿学习中的多模态行为
在模仿学习(imitation learning)中,给定同一个观测,专家数据里往往存在多模态行为(multimodal behavior):例如绕过障碍物可以「从左边走」也可以「从右边走」,两种动作都是正确的。
- 若直接用均方误差(Mean Squared Error, MSE)损失回归动作,网络会输出所有合法动作的平均。在上面的例子里,「左、右」的平均是「直接撞上障碍物」,导致失败。
- 因此我们需要一个能学习动作分布(而非单点)的模型。
- 扩散模型是当下最流行的生成模型之一,广泛用于图像 / 视频生成,天然适合刻画复杂的多模态分布,因而被引入策略学习。
解决思路:用生成模型建模条件动作分布 $p(a \mid s)$,从中采样而非取平均。
10.2 扩散作为物理过程:直觉
「扩散」一词来自物理:墨水滴入水中逐渐弥散到均匀分布,是一个不可逆的加噪过程。扩散生成模型借用这一图景——前向过程不断往数据上加噪声,把复杂的数据分布「打散」成简单的高斯噪声;反向过程学习一步步去噪,从噪声中「凝聚」出数据样本。
10.3 流匹配(Flow Matching):直觉
流匹配是一种与扩散密切相关、但更简洁的生成框架。其直觉如下:
- 选定一个简单的噪声分布 $z \sim p_{noise}$,通常取单位高斯 $\mathcal{N}(0, I)$。
- 考虑数据 $x$ 在不同噪声水平 $t$ 下被「腐蚀」得到带噪数据 $x_t$($t=0$ 无噪声、对应真实数据;$t=1$ 满噪声、对应纯噪声)。
- 训练一个神经网络 $f_\theta(x_t, t)$ 去去掉一点点噪声。
- 推理时:先采样 $x_1 \sim p_{noise}$,再反复多次应用 $f_\theta$,逐步生成一个无噪样本 $x_0$。
10.4 流匹配:训练
假设有简单的 $p_{noise}$(如高斯)以及来自 $p_{data}$ 的样本。每次训练迭代:
流匹配训练步骤
1. 采样 $z \sim p_{noise}, \quad x \sim p_{data}, \quad t \sim \text{Uniform}(0, 1)$
2. 构造带噪点与目标速度:$x_t = (1 - t)\, x + t\, z, \qquad v = z - x$
3. 训练网络预测速度 $v$,最小化:$L = \lVert f_\theta(x_t, t) - v \rVert_2^2$
10.5 流匹配:采样
训练好 $f_\theta$ 后,沿学到的速度场把噪声「流」回数据:
流匹配采样步骤
选择步数 $T$(常取 $T=50$)。
采样初始噪声 $x \sim p_{noise}$(即 $x_1$)。
对 $t \in [\,1,\; 1-\tfrac{1}{T},\; 1-\tfrac{2}{T},\; \dots,\; 0\,]$:
评估速度 $v_t = f_\theta(x_t, t)$
前进一步 $x = x - v_t / T$
返回 $x$(即去噪后的 $x_0$)。
直观上,采样就是从 $x_1$ 出发,沿 $v_t$ 反方向逐步积分(数值求解 ODE),经 $T$ 步落到数据流形上的 $x_0$。中间状态如 $x_{2/3}, x_{1/3}$ 依次出现。
10.6 条件流匹配与 Classifier-Free Guidance(CFG)
实际任务(图像生成、策略学习)几乎都需要条件生成:给定条件 $y$(如文本提示、机器人观测),生成 $p_{data}(x \mid y)$。条件流匹配(Conditional Flow Matching)把条件 $y$ 也输入网络。随之而来的问题是:能否控制「强调」条件 $y$ 的程度?
Classifier-Free Guidance(CFG)
训练:训练时随机丢弃 $y$(dropout),于是同一个模型既能做条件预测、也能做无条件预测。
对带噪 $x_t$:
无条件速度:$v_\varnothing = f_\theta(x_t, y_\varnothing, t)$,指向 $p(x)$;
条件速度:$v_y = f_\theta(x_t, y, t)$,指向 $p(x \mid y)$;
引导速度:$v_{cfg} = (1 + w)\, v_y - w\, v_\varnothing$,更强地指向 $p(x \mid y)$。
采样时按 $v_{cfg}$ 前进。
- 「Classifier-Free」之名:早期方法需要一个单独的判别模型 $p(y \mid x)$,用其梯度 $\frac{\partial}{\partial x}\log p(y \mid x)$ 来提供引导方向;CFG 则无需额外分类器。
- $w$ 是引导强度(guidance weight):越大越「贴合」条件,但可能损失多样性。
- CFG 在实践中无处不在,对高质量输出非常重要;代价是采样需同时算条件与无条件两个分支,采样成本翻倍。
10.7 最优预测与噪声调度(Noise Schedules)
问:网络的最优预测是什么?对同一个 $x_t$,可能存在许多 $(x, z)$ 对都映射到它,网络只能在它们上取平均。
| 噪声水平 | 最优 $v$ | 难度 |
|---|---|---|
| 满噪声 $t=1$ | $p_{data}$ 的均值 | 容易 |
| 无噪声 $t=0$ | $p_{noise}$ 的均值 | 容易 |
| 中间噪声 | — | 最难、最歧义 |
- 问题:朴素训练对所有噪声水平等权重,但中间噪声最难学,应被重点强调。
- 解决:使用非均匀噪声调度,在中间噪声水平上投入更多采样。
- 常见做法是 logit-normal 采样(让 $t$ 集中在中段)。
- 对高分辨率数据,常把分布向更高噪声偏移,以补偿像素间的相关性。
10.8 推广流匹配:Rectified Flow 与 Generalized Diffusion
流匹配可统一到更一般的框架。下表对比 Rectified Flow(即前述直线流匹配)与广义扩散(Generalized Diffusion):
| 步骤 | Rectified Flow | Generalized Diffusion |
|---|---|---|
| 采样 | $x \sim p_{data},\; z \sim p_{noise}$ | $x \sim p_{data},\; z \sim p_{noise}$ |
| 时间 | $t \sim p_t$ | $t \sim p_t$ |
| 构造 $x_t$ | $x_t = (1-t)\, x + t\, z$ | $x_t = a(t)\, x + b(t)\, z$ |
| 目标 | $v_{gt} = z - x$ | $y_{gt} = c(t)\, x + d(t)\, z$ |
| 预测 | $v_{pred} = f_\theta(x_t, t)$ | $y_{pred} = f_\theta(x_t, t)$ |
| 损失 | $\lVert v_{gt} - v_{pred}\rVert_2^2$ | $\lVert y_{gt} - y_{pred}\rVert_2^2$ |
Rectified Flow 是广义扩散的特例:$a(t) = 1 - t,\; b(t) = t,\; c(t) = -1,\; d(t) = 1$。
不同预测目标(parameterization)
广义扩散通过选取 $c(t), d(t)$ 给出不同的「网络预测什么」的写法:
| 参数化 | 目标 $y_{gt}$ | 系数 |
|---|---|---|
| x-prediction(预测数据) | $y_{gt} = x$ | $c(t) = 1,\; d(t) = 0$ |
| $\varepsilon$-prediction(预测噪声) | $y_{gt} = z$ | $c(t) = 0,\; d(t) = 1$ |
| v-prediction(预测速度) | $y_{gt} = b(t)\, z - a(t)\, x$ | $c(t) = b(t),\; d(t) = -a(t)$ |
10.9 扩散的三种理论视角
课件给出理解扩散模型的几种等价视角,互为补充:
- 潜变量模型(Latent Variable Model):前向过程已知——逐步加高斯噪声;学一个网络近似反向过程;优化变分下界(variational lower bound),与 VAE 相同。
- 学习分数函数(Score Function):对任意分布 $p(x)$($x \in \mathbb{R}^N$),分数函数 $s(x) = \frac{\partial}{\partial x}\log p(x)$($s: \mathbb{R}^N \to \mathbb{R}^N$)是一个指向高概率密度区域的向量场;扩散就是用网络近似 $p_{data}$ 的分数函数。
- 求解随机微分方程(SDE):连续加噪过程可写成 SDE:$d\boldsymbol{x} = f(\boldsymbol{x}, t)\, dt + g(t)\, d\boldsymbol{w}$,刻画数据 $x$、时间 $t$ 与噪声 $w$ 的无穷小关系;扩散学网络去近似求解该 SDE。
扩散 vs. 流匹配:统一总结
二者都把数据 $x$ 与噪声 $z$ 按时间插值,差别在插值系数:
扩散:$x_t = \alpha_t\, x + \sqrt{1 - \alpha_t}\;\varepsilon$
(OT)流匹配:$x_t = t\, x_{noise} + (1 - t)\, x_{data}$(直线插值)
流匹配推理时通常用 ODE(确定性、无随机性),去噪步数更少、推理更快;目标为 $x_{noise} \sim \mathcal{N}(0, I)$,速度场 $v_\theta(x_t, t)$,用 $\mathbb{E}\lVert (x_{noise} - x_{data}) - v_\theta(x_t, t)\rVert^2$ 监督(与扩散类似)。
10.10 Diffusion Policy
Diffusion Policy 把扩散 / 流匹配生成模型用作机器人策略:以观测为条件,生成动作序列($x_0$ 为去噪后的动作,$x_T$ 为初始噪声)。它能从噪声出发逐步去噪得到可执行动作,是当前模仿学习的主流策略表示之一。
Diffusion Policy 为什么有效?
- 常见理解:扩散策略好,是因为它能建模复杂的多模态动作分布。
- 但近期论文 [1,2] 提出不同看法:在机器人场景中,扩散模型通常是记住(memorize)了「特定观测对应的动作」,而非真的在用多模态分布。
- [2] 进一步指出:扩散模型的优势主要来自迭代去噪(iterative denoising)——最后几步去噪能更好地把动作投影到真实动作流形(ground-truth action manifold)上。
[1] Demystifying Diffusion Policies: Action Memorization and Simple Lookup Table Alternatives
[2] Much Ado About Noising: Dispelling the Myths of Generative Robotic Control
10.11 对扩散 / 流策略做 RL:似然不可解的难题
要用策略梯度(如 PPO)微调扩散 / 流策略,会遇到一个根本困难:对数似然不可解(intractable log-likelihood)。
- 高斯策略:对数似然有闭式解,PPO 直接可用。
- 扩散策略:单步去噪的似然是高斯(可解),但我们真正要的是 $\log p_\theta(x_0 = a_t \mid s_t)$,它需要对所有中间去噪状态求边缘(marginalize),因而不可解。
- Probability-Flow ODE 似然:精确似然需要 ODE 积分 + Jacobian 迹估计,使得 PPO 式优化既昂贵、梯度又数值脆弱。
DPPO:Diffusion Policy Policy Optimization
DPPO 的核心思想:把去噪过程本身当作一个 MDP,使每一步去噪转移都具有可解的高斯似然,从而能逐步套用 PPO。
- 外层 MDP(Outer MDP):真实环境从 $s_t$ 演化到 $s_{t+1}$。
- 内层 MDP(Inner MDP):扩散去噪过程逐步生成可执行动作 $a_t$。
- 关键:每一步去噪都有可解的高斯似然,于是 PPO 可以逐步(step-by-step)应用。
- 两层 MDP 形式化:把 $(t, k)$(外层时间 $t$、内层去噪步 $k$)重新索引成单一时间步,定义对应的动作、状态、奖励、转移与策略。
DPPO 要点
每步似然比(per-step ratio):因为每步去噪是高斯,对数概率可解。
优势分配:把优势分配到各去噪步,更早、更嘈杂的去噪步被降权(downweight)。
最终目标:标准的 clipped PPO 目标,只是「策略步」变成了一步去噪而非最终动作。
效果:远优于直接用精确动作似然。
FPO:Flow Matching Policy Gradients
FPO 用流匹配损失构造一个替代似然比(surrogate likelihood ratio),从而绕开精确似然计算。
- 对流 / 扩散策略,精确对数似然不可解;FPO 用流匹配(CFM)替代量取代它。
- 替代比:CFM 损失越低 $\to$ 替代似然越高 $\to$ FPO 比值越大。
- 最终目标的解读:正优势动作通过降低其 CFM 损失被强化;负优势动作通过在替代比下增大其 CFM 损失被抑制。
- 与 PPO 的关系:FPO 用 ELBO 替换 PPO 比值,优化一个基于 ELBO 的替代比——它鼓励更高似然与更紧的 ELBO,但两项之间可能相互权衡(trade off),并带有「ELBO-gap 修正项」。
10.12 大语言模型(LLM)简介
本讲后半段把视角从机器人动作扩展到语言。大语言模型(LLM)是一个基于 Transformer、被训练来预测序列中下一个 token 的模型。训练时模型见到大量序列,并学会在每个位置预测下一个 token。
- LLM 由 Transformer 语言模型演化为大规模 decoder-only 模型。
- 随着数据、参数、算力增长,它们逐渐获得 zero-shot 学习、in-context learning(上下文学习)、指令遵循(instruction-following)等能力。
LLM 的训练演进
| 模型 | 关键贡献 |
|---|---|
| GPT-1 | 提出生成式预训练 + 任务特定微调的范式:预训练一次,适配多种任务。 |
| GPT-2 | 证明更大的语言模型能以 zero-shot 方式完成许多任务。 |
| GPT-3 | 展示了 in-context learning 与更强的规模化(scaling)行为。 |
| InstructGPT | GPT-3 + 指令微调 + 人类反馈,目标是把模型行为对齐人类偏好。 |
核心思想:让模型行为对齐人类偏好(align with human preferences)。
10.13 用 RL 做 LLM 后训练
预训练(pre-training)赋予 LLM知识,而后训练(post-training)告诉它如何使用这些知识。预训练后的 LLM 本质是「文本补全引擎」,并非天然的 agent 或 assistant——但补全任意文本本身就需要大量「世界知识」。
基本形式化
- 可看作一个单步 RL 问题:prompt 为状态,整段生成为动作,奖励在序列末尾给出。
- 等价形式:当引入中间奖励(intermediate rewards)与价值函数基线(value function baselines)时更自然,把生成视为多步决策。
语言模型与策略梯度
- REINFORCE-style 估计量:朴素策略梯度。
- 重要性加权估计量(如 PPO):因样本效率(sample efficiency)更好而被偏好。
- 整体框架可拆为三件事:(1) 巧选基线;(2) 巧选正则项;(3) 巧妙地设定或学习奖励。
基线、GAE 与 GRPO
| 方法 | 要点 |
|---|---|
| 价值函数基线 + GAE | 常与 GAE 配合;可新增一个 head 或复制整个网络作为价值网络;不在 prompt 上训练价值函数,只在后缀(suffix)上训。 |
| GRPO (Group Relative Policy Optimization) | 无需价值函数的基线方法:对同一 prompt 采样一组(group)回答,用组内相对表现做基线。 |
| 参考模型正则(reference model regularization) | 用对参考模型的 KL 惩罚:避免产生「胡言乱语」(必须是合法英文),并避免「钻」不完美奖励模型的空子(reward hacking)。 |
不知道奖励怎么办?——Bradley-Terry 与 RLHF
- 当没有现成奖励时,需要一个概率模型来训练奖励模型(reward model)。
- Bradley-Terry 模型:「更好的轨迹被选中的概率随其奖励指数级增大」。其拟合形式很像逻辑回归(logistic regression)。
- RLHF(人类反馈强化学习):对同一 prompt 收集多条on-policy 回答的偏好(preferences);奖励只在生成的最后一步给出。
- 这套优化常用于 LLM 后训练,通常只跑一次或少数几次迭代(可以是「不完全优化」)。
10.14 视觉-语言-动作模型(VLA,自回归路线)
把语言模型的能力迁移到机器人控制,催生了视觉-语言-动作模型(Vision-Language-Action, VLA)。本讲介绍自回归(autoregressive)一脉的代表工作:
| 模型 | 要点 |
|---|---|
| RT-1 | Robotics Transformer,面向真实世界大规模控制的机器人 Transformer。 |
| RT-2 | VLA 模型,把网络知识(web knowledge)迁移到机器人控制——动作被当作 token 由视觉-语言模型一并输出。 |
| OpenVLA | 开源的视觉-语言-动作模型。 |
| OpenVLA-OFT | 对 VLA 做微调(Optimized Fine-Tuning),同时优化推理速度与成功率。 |
本讲重点回顾
1. 动机:模仿学习中存在多模态行为,MSE 回归会输出「平均动作」导致失败 $\to$ 需用生成模型建模动作分布。
2. 流匹配训练:$x_t = (1-t)x + tz,\; v = z - x$,最小化 $\lVert f_\theta(x_t, t) - v\rVert_2^2$;采样按 $x \leftarrow x - v_t/T$ 反向积分。
3. CFG:训练随机丢弃 $y$,采样用 $v_{cfg} = (1+w)v_y - w v_\varnothing$;效果好但采样成本翻倍。
4. 噪声调度:中间噪声最难学,用非均匀调度(如 logit-normal)重点强调。
5. 广义视角:Rectified Flow / Generalized Diffusion;x-/$\varepsilon$-/v-prediction 三种参数化;扩散可视作潜变量模型、分数函数、SDE。
6. Diffusion Policy:用扩散生成动作;其优势可能来自迭代去噪把动作投影到真实流形(而非真正的多模态)。
7. 扩散/流策略的 RL:对数似然不可解 $\to$ DPPO 把去噪过程当内层 MDP(每步高斯似然可解),FPO 用 CFM 损失构造替代似然比。
8. LLM 后训练:PPO/GRPO + 参考模型 KL 正则;无奖励时用 Bradley-Terry 训练奖励模型,构成 RLHF。
9. VLA:RT-1 $\to$ RT-2 $\to$ OpenVLA $\to$ OpenVLA-OFT,把视觉-语言模型迁移到机器人动作生成。
第 11 讲 · 运动控制 Locomotion
本讲聚焦机器人的运动控制(locomotion),即让足式机器人(尤其是双足/人形 humanoid)在地面上稳定、自然、敏捷地行走与运动的问题。课件从两条主线展开:一是经典的基于模型的控制(model-based control)——以 ZMP 与 MPC 为代表;二是近年成为主流(SOTA)的基于强化学习的控制(RL-based control)——围绕 PPO、观测设计、奖励设计,以及核心难题 sim-to-real gap(仿真到现实的差距)及其解决方案;最后扩展到人体动作迁移到人形机器人(Human Motion to Humanoid Robot)、全身控制(Whole Body Control, WBC)的规模化,以及带感知的运动控制(locomotion with perception)。
Model-based(ZMP / MPC) $\to$ RL-based(PPO + 观测/奖励设计) $\to$ Sim-to-Real Gap 的成因与解法 $\to$ 人体动作迁移 / 全身动作追踪 $\to$ 带感知的 locomotion(Teacher-Student / 非对称 Actor-Critic)。
11.1 什么是 Locomotion 与两类方法对比
Locomotion 指机器人通过腿部运动在环境中移动。课件将实现方法分为两大类:传统方法(基于模型)与强化学习方法。两者的核心差异如下表。
| 对比维度 | 传统方法(Traditional / Model-based) | 强化学习(Reinforcement Learning) |
|---|---|---|
| 对模型的依赖 | 高度依赖模型精度(High dependency on model accuracy) | 无模型且鲁棒(Model-free & robust) |
| 动作风格 | 机械、预先设计的运动(mechanical & pre-designed motions) | 自然、动态的运动(natural & dynamic motions) |
| 板载算力需求 | 高板载算力需求(high onboard compute demand) | 高效的板载执行(efficient onboard execution) |
11.2 基于模型的控制(一):ZMP 零力矩点
ZMP(Zero Moment Point,零力矩点)是经典双足行走稳定性判据中的核心概念(CORE CONCEPT)。
- 稳定性判据:若 ZMP 落在支撑多边形(support polygon)内部,则稳定性得到保证。
- 支撑多边形:即机器人双脚(或脚掌)所覆盖的区域。ZMP 越靠近多边形边界,越接近失稳;一旦超出边界,机器人将发生倾覆。
- 用一句话概括:ZMP $\in$ 支撑多边形 $\Rightarrow$ 动态稳定行走可保证。
形式上,ZMP 是地面上满足"惯性/重力合力矩水平分量为零"的点,可记为 $\sum \tau_{\text{horizontal}}(p_{\text{ZMP}}) = 0$,且要求 $p_{\text{ZMP}} \in \mathcal{P}_{\text{support}}$(支撑多边形)。
11.3 基于模型的控制(二):MPC 模型预测控制
MPC(Model Predictive Control,模型预测控制)是另一核心概念(CORE CONCEPT)。其思想是在实时中优化一段未来动作序列,从而找出当下最优的即时动作。
- 滚动优化:MPC 优化的是一序列未来动作(a sequence of future actions),但只执行其中的第一步。
- 不断重规划(re-planning):基于当前状态持续地重新规划,使机器人能即时适应变化。
- 效果:这种"预测—执行—再预测"的闭环让机器人可以完成极其敏捷(incredibly agile)的机动动作。
11.4 基于学习的控制:为什么是 PPO?
课件指出,在 RL-based locomotion 中,机器人研究者几乎总是使用 PPO(Proximal Policy Optimization)。原因有三:
| 理由 | 说明 |
|---|---|
| 训练抗崩溃(Crash-proof training) | PPO 的信赖域(trust-region)更新限制了每步策略的变化幅度,可防止灾难性失败——这对人形等不稳定系统至关重要。 |
| 天然适配并行仿真(Perfect for parallel sim) | 作为 on-policy(同策略)方法,PPO 在成千上万个同时进行的仿真中如鱼得水;正因为可以海量采样,样本效率反而变得无关紧要。 |
| 规避脆弱的 Q 函数(Avoids fragile Q-functions) | 直接做策略优化(direct policy optimization),绕开了在动态任务中容易崩溃的 Q-learning(这正是 SAC/DDPG 在此类任务上失效的原因)。 |
11.5 观测设计(Observation Design)
RL locomotion 策略的输入(观测)通常由三部分组成:
| 类别 | 包含内容 |
|---|---|
| 本体感知(proprioception) | 关节状态:关节位置 $qpos$、关节速度 $qvel$;基座朝向:投影重力(projected gravity)、根部角速度 $\text{root\_angular\_vel}$ |
| 任务指令(task commands) | 速度指令 $v_x, v_y, \omega_z$;运动指令:参考关节位置 $qpos\ \text{reference}$ |
| 外部感知(exteroception) | 高度图(height map):所有采样点的高度信息 |
1. 几乎所有任务都建议使用局部参考系(local frame),更稳定、更鲁棒。
2. 对于高动态的双足运动,将时序信息(temporal information)引入观测,往往能提高性能上限。
3. 训练时引入特权信息(privileged information)有助于策略更好地理解环境。
11.6 奖励设计与"行为差距"
课件提出核心问题:如何让机器人在真实世界中实现像人一样的行为(human-like behavior)?这被称为 Robot Behavior Gap(机器人行为差距)。奖励设计(reward design)正是引导策略学出自然、稳定行为的关键手段——配合后文的人体动作参考与对抗式动作先验等技术共同收敛到类人风格。
11.7 Sim-to-Real Gap:成因
在仿真中表现完美的策略,部署到真实机器人上往往失败。这种差异即 Sim-to-Real Gap(仿真到现实差距),根源在于仿真只是对复杂、动态真实世界的简化近似。课件列出三大成因:
| 成因 | 说明 |
|---|---|
| 不完美的物理(Imperfect Physics) | 简化的弹簧-阻尼模型(spring-damper model)无法完全复现复杂的真实摩擦与接触动力学,带来系统性误差。 |
| 理想化的接触(Idealized Contact) | 仿真假设参数恒定(如摩擦系数),而现实是动态可变的,使完美复现成为不可能。 |
| 非理想执行器(Non-Ideal Actuators) | 真实电机存在延迟、带宽限制、非线性摩擦;仿真里的"理想力矩源"会导致真实部署不稳定。 |
11.8 Sim-to-Real Gap:解决方案
课件给出三类应对策略:
11.8.1 域随机化(Domain Randomization)
- 不追求"完美仿真器",而是有意引入变异性。
- 训练时随机扰动物理参数,迫使策略学出一种鲁棒行为,从而泛化到无结构的真实世界。
11.8.2 真实电机建模(Realistic Motor Modeling)
- 针对非理想执行器,直接把真实电机特性纳入仿真:建模时间延迟、带宽限制、非线性力矩-速度曲线(torque-speed curves)。
- 在更接近真实硬件的表征上训练,策略向真机的迁移会显著更可靠。
11.8.3 非对称 Actor-Critic(Asymmetric Actor-Critic)
- 知识分离:Actor(演员)仅依据真实传感器数据行动;Critic(评论家)则使用仿真中的特权信息(privileged information)来指导它。
- 这样策略可以从"完美的内部反馈"中学习,再在仅有部分感知(partial sensing)的真实世界中鲁棒迁移。
11.9 人体动作迁移到人形机器人(Human Motion to Humanoid Robot)
让人形机器人模仿人类动作面临 Embodiment Gap(本体差距):人和机器人的身体结构不同,人的示范不能直接照搬。
- 重定向(retargeting):通过基于交互网格(interaction-mesh)的约束优化把人类示范映射到机器人身上。
- 每一次空间与形状增强(spatial and shape augmentation)都求解为一个新的优化问题,产生多样化的轨迹,作为 RL 训练的参考(references)。
- 配合极少的奖励设计与域随机化,即可实现对真实人形机器人的零样本迁移(zero-shot transfer)。
- 统一配方(single recipe):多样动作用同一套配方、共享超参数即可用 RL 追踪,展示出跨广泛技能的可扩展性(scalability)。
- 动作先验(motion priors):可用潜空间扩散模型(latent diffusion model)学习通用动作先验,支撑多样化 locomotion。
11.10 通用人形全身追踪器(General Humanoid Whole Body Tracker)
课件给出一个典型的三阶段(three-stage)训练范式:
| 阶段 | 做法 |
|---|---|
| Stage 1 | 用预言机状态(oracle states)通过目标条件强化学习(goal-conditioned RL)训练一个教师策略(teacher policy)。 |
| Stage 2 | 用基于 CVAE 的 DAgger 框架把策略蒸馏(distill)成可部署形式。 |
| Stage 3 | 引入快速适应模块(fast adaptation module)处理高难度动作序列,用残差解码器(residual decoder)实现。 |
11.11 全身控制中的鲁棒性(Robustness in Whole Body Control)
以 Any2Track 为例:它由 AnyTracker 与 AnyAdapter 两个关键组件构成。
- AnyTracker:一个带一系列精心设计的通用动作追踪器(general motion tracker)。
- AnyAdapter:建立在 AnyTracker 之上的历史信息驱动的适应模块(history-informed adaptation module),在不损害基础动作表现力的前提下,赋予追踪器在线动力学适应能力(online dynamics adaptability)。
提升鲁棒性的三个关键设计:
- 1. 残差控制(Residual Control)
- 2. 奖励项(Reward Term)
- 3. 域随机化(Domain Randomization)
11.12 全身控制的规模化(Scaling up on WBC)
课件展示了把 WBC 推向大规模、通用化的两条代表工作。
11.12.1 Humanoid-GPT 训练流水线
- (a) 聚合多个动捕(mocap)数据集构建大规模动作语料,并把动作重定向到 Unitree G1 人形机器人。
- (b) 在聚类后的动作数据上用 RL 训练动作专家(motion experts),采用谐波动作嵌入(Harmonic Motion Embedding, HME)。
- (c) 用 DAgger 蒸馏训练一个 GPT 风格的 Transformer,借助因果时序注意力(causal temporal attention),把所有专家知识整合进单个通用追踪器(generalist tracker)。
11.12.2 SONIC:通用人形动作追踪
- 通过一个通用控制策略(universal control policy)实现普适的人形动作追踪,能处理多样的动作指令与模态。
- 专用编码器把机器人、人类、混合动作指令处理成一个通用 token,驱动机器人控制与动作解码器。
- 这种跨本体(cross-embodiment)设计支持多种应用:手柄控制、VR 遥操作、全身遥操作、视频遥操作,以及来自文本与音乐的多模态控制。
- 同样强调三要素:模式对齐(Mode Alignment)、奖励(Rewards)、域随机化(Domain Randomization),以及规划与控制之间的协调(coordination between plan and control)。
11.13 来自模仿学习的动作先验(Motion Priors from Imitation Learning)
以网球技能学习(LATENT)为例,课件给出一个从"不完美人类数据"中学习运动技能的框架,分四步:(a) 在采集的不完美人类动作数据上预训练动作追踪器;(b) 通过在线蒸馏(online distillation)构建可纠正的潜动作空间(correctable latent action space);(c) 训练高层策略来纠正并组合潜动作以完成网球任务;(d) 通过动力学迁移到真实世界。
核心训练框架
- 不完美数据驱动学习:不用完整比赛数据,而是用从业余球员在 $3\text{m} \times 5\text{m}$ 小场地采集的约 $5$ 小时基元动作片段(如正手 forehand、横向滑步 lateral shuffles)训练,大幅降低数据采集难度与成本。
- 可纠正潜动作空间:预训练动作追踪器模仿这些片段;关键是移除腕部控制并在训练中加入扰动,使追踪器即便手臂动作不精确也能保持平衡;随后用变分信息瓶颈(variational information bottleneck)把追踪器蒸馏成紧凑、连续的潜技能空间。
- 高层策略与动作纠正:高层策略同时预测潜动作指令与直接的腕部调整,以补偿原始人类数据的"不完美"。
- 潜动作壁垒(Latent Action Barrier, LAB):为防止抖动或不自然动作,把策略探索约束在状态先验的马氏距离(Mahalanobis distance)范围内。
11.14 带感知的运动控制(Locomotion with Perception)
前述工作多基于本体感知(proprioception)。当引入视觉/LiDAR 等高维感知时,sim-to-real gap 变得巨大且难以建模,因而需要专门架构。
仅本体感知 vs. 带感知的 locomotion 对比
| 维度 | 仅本体感知(Proprioceptive Only) | 带感知(With Perception:视觉 / LiDAR) |
|---|---|---|
| 数据输入 | 低维:关节角、速度、IMU 数据 | 高维:原始图像、点云、深度图 |
| 现实差距(reality gap) | 较小:主要是摩擦、质量、阻尼的差异 | 巨大:光照、纹理、传感器噪声的差异 |
| 主要挑战 | 动力学:匹配物理并确保稳定控制 | 处理:从杂乱视觉数据中提取有用特征 |
| 典型方案 | 标准 RL:PPO + 域随机化 | 师生学习:用仿真的"特权信息"训练真机模型 |
11.15 传统的局部建图与规划(Build the Local Map and Plan)
传统带感知方案建立一张概率高程图(probabilistic elevation map):地图"随机器人移动,并随距离增大而越来越不确定",从而显式地把定位漂移(localization drift)转化为可量化的地图不确定性,使得在较差定位下仍能实现可靠的环境感知。这是建图、感知与 locomotion 融合的奠基性方法之一。
11.16 师生学习与特权学习(Teacher-Student / Privileged Learning)
从传统方法过渡到端到端框架(End-to-End Framework),课件强调特权信息的重要性。
想象一个人跳过一道沟:实际上,仅靠本体感知(proprioception)人是不知道自己身处何处的——因此需要外部/特权信息来感知关键量(如线速度、离地高度),这对 bounding(跨步跳)、balance recovery(平衡恢复)、trotting(小跑)等步态都至关重要。
| 示例 | 做法 |
|---|---|
| 例 1:策略蒸馏(Policy Distill) | 教师策略基于高度图(height map) $\to$ 学生策略基于第一视角深度(ego depth)。学生通过蒸馏继承教师能力,但只用现实可得的输入。 |
| 例 2:非对称 Actor-Critic | Critic 与 Actor 接收不同输入(Critic 用特权信息,Actor 用现实输入)。 |
11.17 课程学习(Curriculum Learning)
- 例 1:地形穿越(Terrain traverse)——从简单地形逐步过渡到困难地形。
- 例 2:奖励权重调节(Reward weight tuning)——随训练进程调整奖励项权重。
11.18 端到端框架与视觉 locomotion
端到端(End-to-End)框架把感知与控制联合学习,关键技术包括:
- 非对称 Actor-Critic 做 sim-to-real:Critic 用特权信息(完美仿真状态)提供高质量学习信号,Actor 只用现实传感器输入学习行动,从而在部署前有效引导策略学习。
- 点云的 BEV 体素编码(BEV Voxel Encoding):把原始 3D 点云高效编码为 2D 鸟瞰图(Bird's Eye View)表征,让 2D CNN 同时提取局部几何特征与全局空间上下文,用于地形感知。
- 提取域不变特征(Domain-Invariant Features):把原始图像转换为对域漂移(纹理、光照)鲁棒的表征(如深度图),使仿真训练的策略可直接用于真机。
- 重建 3D 状态做控制:从 2D 感知估计地形几何与机器人位姿,重建出控制器做运动规划所需的精确 3D 环境状态。
11.19 类人行为与定位(Human-Like Behaviors)
课件给出一个结合 AMP 与真实定位的流程:
- (a) 数据准备:把动捕数据集中的人类动作重定向到人形动作,并通过识别关键接触帧(key contact frames)标注物体。
- (b) AMP 策略训练:用一个判别器(discriminator)区分策略生成动作与参考动作(AMP = Adversarial Motion Priors,对抗式动作先验),以促进自然行为与任务完成的学习。
- (c) 真实部署:当物体在相机视野(FOV)外时,用 LiDAR 可视化手动指定粗略物体位置,并结合里程计(odometry)做粗定位;一旦进入视野,则用 AprilTag 检测结合里程计做细粒度自动定位。
11.20 当前难点(Difficulty)
- Sim-to-real gap 仍然巨大且棘手:域随机化(DR)与电机建模只能缩小差距,无法消除它。
- 数据质量与可行性:光学动捕 + 重定向流水线成本高,且无法保证一切动作在物理上可行(physically feasible)。
- 端到端黑盒的安全与鲁棒性:端到端带来更高的性能上限,但也带来更低的下限,在极端情形(edge cases)可能对用户与机器人本身造成伤害。
11.21 未来方向(Future Directions)
| 方向 | 具体内容 |
|---|---|
| 通用动作追踪器 | 用扩散/流匹配(diffusion or flow matching)学习海量高质量动作先验;捕捉长时序一致性以解决动作漂移(motion drifting)。 |
| 通用小脑(Universal cerebellum) | 极端地形适应(extreme terrain adaptation)。 |
| 安全(Safety) | 安全强化学习(Safe RL)与对人友好的物理人机交互(Physical Human-Robot Interaction)。 |
| 面向 locomotion 的世界模型 | 在非常规地形上获得更好表现并减小 sim-to-real gap。 |
11.22 相关资源(Additional Resources)
- 代码库:Unitree RL GYM、Legged GYM、MuJoCo Playground。
- 双足 locomotion 论文:AMP、OmniXtreme、Gallant、Deep Whole-body Parkour、Perceptive Humanoid Parkour、PhysHSI 等。
- 全身追踪论文:BeyondMimic、OmniRetarget、UniTracker、Any2Track、HumanoidGPT、SONIC、LATENT、BFM4Humanoid、ASAP 等。
本讲重点回顾
1. 两条主线:Model-based(ZMP / MPC,依赖模型精度、动作机械但可控)vs. RL-based(无模型、自然动态、板载高效)。
2. ZMP:地面上使惯性/重力合力矩为零的点;ZMP $\in$ 支撑多边形 $\Rightarrow$ 稳定。MPC:实时滚动优化未来动作序列,只执行第一步并不断重规划。
3. PPO 为何主流:信赖域更新抗崩溃、on-policy 适配大规模并行仿真、直接策略优化避开脆弱 Q 函数。
4. 观测设计:proprioception + task commands + exteroception;建议局部参考系、引入时序信息、训练期用特权信息。
5. Sim-to-Real Gap:成因为不完美物理、理想化接触、非理想执行器;解法为域随机化、真实电机建模、非对称 Actor-Critic。
6. 人体迁移 & WBC:retargeting 跨越 embodiment gap;Teacher-Student / 非对称 Actor-Critic 用特权信息指导只有现实感知的策略;规模化代表为 HumanoidGPT、SONIC。
第 12 讲 · 具身任务规划
本讲是「具身任务(Embodied AI Task)」系列的第二讲,承接上一讲的具身任务总览,聚焦在操作(Manipulation)这一最核心的具身任务上,系统梳理三条主线:
- 物体操作的强化学习(Object Manipulation via RL):以非抓握式平面推动(non-prehensile planar pushing)为代表的状态/视觉策略,以及如何泛化到未见物体与 6D 任意目标位姿。
- 视觉-语言-动作模型(Vision-Language-Action Model, VLA):以模仿学习(imitation learning)为主线,从 Diffusion Policy、RT-1/RT-2,到 OpenVLA、GR-2、$\pi_0$ / $\pi_{0.5}$。
- 合成数据与世界模型(Synthetic Data & World Action Model):以 GraspVLA 等十亿级合成数据为代表,结合统一世界模型(Unified World Model)思想。
12.1 课程作业与组织安排(Logistics)
本讲开头先交代了两个关键作业及团队安排,请务必关注:
12.1.1 Assignment 3:基于 Unitree G1 的人形机器人运动控制(Humanoid Locomotion)
作业 3 在仿真中训练 Unitree G1 人形机器人完成运动控制(locomotion),分为三个递进的任务:
| 子任务 | 名称 | 核心要求 |
|---|---|---|
| Task I | Implement your PPO | 自行实现近端策略优化(Proximal Policy Optimization, PPO)算法,作为后续两项任务的策略学习基础。 |
| Task II | Direct Velocity Walking | 训练策略让机器人按给定的指令速度(目标线速度/角速度)直接行走,即速度跟踪式的行走控制。 |
| Task III | Single Motion Tracking | 训练策略跟踪单条参考运动(reference motion),让人形机器人复现一段目标动作轨迹。 |
截止时间:5/31(周日)23:59。
12.1.2 Assignment 4:Galbot 操作任务
- 使用 Galbot 在仿真与真实环境中完成操作任务(manipulation task),总分 20 分。
- 同学须在 6 月 1 日前组队,每队最多 4 人。
- 课程提供配备 NVIDIA GPU 的远程服务器;组队完成后,每队会获得访问远程服务器的用户名与密码。
12.2 物体操作与强化学习总览(Object Manipulation via RL)
本讲第一条主线是用强化学习解决物体操作问题,尤其是非抓握式操作(non-prehensile manipulation)——即不靠夹爪「抓住」物体,而是通过推(push)、拨、利用接触(contact)与外部环境来改变物体位姿。这类问题因为接触丰富(contact-rich)、动力学复杂,难以用解析方法求解,因此天然适合学习方法。
12.3 非抓握式平面推动(Non-Prehensile Planar Pushing)
最基础的设定是在平面上把物体推到目标位姿。课件给出的形式化参数化如下:
| 要素 | 参数化 | 含义 |
|---|---|---|
| 观测 Observation | $(x, y, \theta)$ | 物体当前的平面位置与朝向 |
| 目标 Goal | $(x, y, \theta)$ | 物体期望到达的目标位姿 |
| 动作 Action | $(x, y, v_x, v_y)$ | 接触点位置 $(x,y)$ 与推动速度 $(v_x, v_y)$ |
对应的解法是目标条件、基于状态的强化学习(Goal-conditioned State-based RL):策略以「当前状态 + 目标」为输入,输出推动动作。该工作还采用了多模态分类探索(multimodal categorical exploration)来改善训练(Ferrandis et al., IROS 2023)。
12.4 基于任务规划的非抓握式操作(via Task Planning)
另一条思路不直接端到端学策略,而是把操作拆成技能(skill)+ 规划(planning):
- 技能:参数化的力-速度控制器(Parameterized Force-Velocity Controller)。
- 流程:感知(Perception)$\to$ 任务规划(Task Planning),由规划器选择并参数化合适的技能。
- 局限:技能是为已知实例预先定义的(predefined skills for known instances),难以泛化到新物体(Liang et al., CoRL 2022——学习混合力-速度控制器的前置条件 preconditions)。
12.5 外在灵巧性(Extrinsic Dexterity)
当物体本身「抓不住」(ungraspable,例如平躺在桌面、无可抓边缘)时,可以借助外部环境来辅助抓取——这就是外在灵巧性(Zhou & Held, CoRL 2022)。
- 动机(Motivation):利用外部环境帮助抓取(例如把物体推到墙边、利用墙面把它「立」起来再抓)。
- 解法(Solution):目标条件、基于状态的 RL,结合操作空间控制(Operational Space Control, OSC)。
12.6 可泛化的 6D 非抓握式操作(Generalizable 6D Non-prehensile Manipulation)
课件对比了「以往工作」与「近期趋势」,清晰地刻画了该方向的演进:
| 以往工作(Previous) | 近期趋势(Recent Trend) | |
|---|---|---|
| 泛化层次 | 实例级(Instance-level) | 对未见物体泛化(Generalization on Unseen Objects) |
| 策略输入 | 基于状态(State-based policy) | 基于视觉(Vision-based policy) |
| 目标位姿 | 受限 | 6D:任意稳定目标位姿(Arbitrary Stable Goal Pose) |
12.7 HACMan:混合 Actor-Critic 映射
HACMan(Hybrid Actor-Critic Maps,Zhou et al., CoRL 2023)是 6D 非抓握式操作的代表性工作,核心是把动作建模为「在物体表面选一个接触点 + 一个推动方向」。
12.7.1 动作参数化与核心思想
- 动作参数化:接触点(contact point)+ 推动方向(pushing direction)。
- 核心思想:通过 RL 学习一张动作映射图(action map)。
- 挑战:动作空间同时含离散部分(选哪个接触点)和连续部分(推动方向),是混合动作空间。
12.7.2 网络结构与决策
- 输入:点云(Point cloud)+ 目标流(Goal Flow)+ 掩码(Mask)。
- 把 critic 特征与 actor 映射图(运动参数 motion parameter)拼接(concat)。
- 对 critic 值取 argmax 来选择具体动作(即在所有候选接触点中选 critic 评分最高者)。
12.7.3 优势与局限
| 优势 | 局限 |
|---|---|
| 能跨未见物体泛化(generalization across unseen objects) | 使用运动基元(motion primitive)$\to$ 无法实现连续、平滑的动作 |
| 无法泛化到不同的桌面摩擦(different table friction) |
12.8 闭环非抓握式操作策略(Closed-loop Policy)
为克服 HACMan 基于运动基元的「非连续」问题,后续工作转向闭环(closed-loop)策略,实现连续、平滑且对动力学自适应的控制:
- CORN(Cho et al., ICLR 2024):基于接触的物体表示(Contact-based object representation),用于一般未见物体的非抓握式操作。
- DyWA(Lyu et al., ICCV 2025):动力学自适应的世界-动作模型(Dynamics-adaptive World Action model),实现可泛化的非抓握式操作。
12.8.1 DAPL 的自适应行为(RSS 2026)
DAPL(Zheng et al., 2026)展示了在杂乱场景(cluttered scenes)中通过动力学感知的策略学习涌现出的外在灵巧性。其关键是选择性地利用环境(selectively leveraging environments),根据物体的物理属性自适应地切换行为:
| 物体属性 | 策略行为 |
|---|---|
| 重物(Heavy mass) | 利用接触(Leveraging Contact)——借助环境施力 |
| 轻物(Light mass) | 避免扰动(Avoiding Disturbance)——小心不把它碰乱 |
课件还列举了三类涌现行为:利用接触(Leveraging Contact)、避免扰动(Avoiding Disturbance)、穿越障碍(Traversing Obstacles)。
12.9 视觉-语言-动作模型概览(VLA, 以模仿学习为主)
第二条主线从 RL 转向模仿学习(Imitation Learning)主导的 VLA。其基本范式是:给定视觉观测与语言指令,模型直接输出机器人动作;通过大规模演示数据(demonstration)做监督学习。
12.9.1 回顾:Diffusion Policy
Diffusion Policy(Chi et al., 2025, IJRR)把动作生成建模为一个扩散(diffusion)过程:从纯噪声 $x_T$ 出发,经过逐步去噪得到动作序列 $x_0$,即「视觉运动策略学习 = 动作扩散」。其优点是能很好地表达多模态动作分布(同一观测下有多种合理动作)。
12.10 RT-1 与 RT-2
| 模型 | 定位 | 关键点 |
|---|---|---|
| RT-1(2022) | Robotics Transformer | 大规模真实世界控制的机器人 Transformer,把图像 + 指令映射为离散动作 token。 |
| RT-2(2023, CoRL) | Vision-Language-Action 模型 | 把网络知识(web knowledge)迁移到机器人控制——在视觉-语言模型基础上联合训练,使其同时输出动作,从而具备语义泛化能力。 |
12.11 数据从哪来:遥操作与 Open-X Embodiment
12.11.1 数据采集:遥操作(Teleoperation)
- Tesla VR + 动作捕捉(MoCap)方式的遥操作。
- Stanford Aloha 遥操作系统(低成本双臂遥操作)。
12.11.2 数据集:Open-X Embodiment
- 规模:100 万条以上轨迹(1M+ trajectories),主要覆盖抓取-放置(pick-and-place)、铰接物体操作(articulated object manipulation)等。
- 由此训练出 RT-X 系列模型;该工作获 ICRA 2024 最佳会议论文(O'Neill et al., 2024)。
12.12 OpenVLA
- OpenVLA(Kim et al., 2024)是一个开源的视觉-语言-动作模型,让社区能在统一框架上复现与改进 VLA。
- 课件特别标注其局限:Not generalizable——尽管开源且效果不错,但泛化能力仍有限,这正引出后续对更多数据/合成数据的需求。
12.13 GR-2(字节跳动)
- GR-2(Cheang et al., 2024)是一个生成式视频-语言-动作模型(generative video-language-action model),利用网络规模知识做机器人操作。
- 专注于抓取(grasping)任务,采集了 94K 条真实样本,耗费约 470 人·天(person-days)——凸显真实数据采集的高昂成本。
12.14 $\pi_0$(Physical Intelligence)
$\pi_0$(Black et al., 2024)回答的核心问题是:如何把流匹配(flow matching)与 VLM 结合?
- 随机初始化一个动作专家(action expert),其架构与 LLM 相同,但参数更少。
- 动作专家的查询(queries)在同一注意力层(same attention layer)内,去 attend VLM token 的键(keys)与值(values),从而把语言-视觉表征注入动作生成。
12.14.1 Chelsea Finn 在 CoRL 2024 的经验分享($\pi_0$ takeaways)
训练范式:在所有数据上预训练,再在约 1k 条一致、高质量演示上微调(pre-train on all data, fine-tune on ~1k consistent, high-quality demos)。实测如叠衣服任务「$5$ 件用时约 $20$ 分钟,会犯错,叠蓝衬衫约需 $7$ 次尝试,质量不稳定」。要点:
- 后训练数据(post-training data)与预训练模型应独立开发。
- 对复杂任务,把所有数据混在一起训并不奏效(training on all data doesn't work for complex tasks)。
- 应循序渐进:先叠衣(folding)$\to$ 再洗衣(laundry)。
- 遇到分布外(OOD)情况,模型会退回到预训练行为(falls back on pretrained behaviors)。
12.15 $\pi_{0.5}$(Physical Intelligence)
- $\pi_{0.5}$(Physical Intelligence et al., 2025)是 $\pi_0$ 的升级,主打开放世界泛化(Open-World Generalization),能在更多样、未见过的真实家庭环境中执行长程操作任务。
12.16 合成数据(Synthetic Data)
真实数据采集昂贵(参见 GR-2 的 470 人·天),课件提出用十亿级合成数据(billion-scale synthetic data)来突破数据瓶颈,代表工作是 GraspVLA。
12.16.1 GraspVLA:具身基础抓取模型(CoRL 2025)
GraspVLA(Deng et al., 2025)是在十亿级合成动作数据上预训练的抓取基础模型。其关键设计:
- 具身思维链(Embodied Chain of Thought, CoT)提升性能。以「Pick up a box」为例,推理分为三步:
① 2D bbox(定位物体的二维包围框)
② 6D grasp pose(六自由度抓取位姿)——以上为离散 token(discrete tokens)
③ 7D 连续增量动作(7D continuous delta action)——末端连续控制。 - 合成数据协同训练(Co-training):约 10 亿(1B)条 VLA 元组来自合成数据。
- 网络 grounding 数据协同训练:互联网上的图文对(image-text pairs),含 1 亿(100M)以上 bbox(如「a white charger」「a white N95 mask」),为模型注入开放词汇的物体识别能力。
12.16.2 GraspVLA 的实验结果
- 仿真零样本(Zero-Shot in Sim):GraspVLA 在没有 LIBERO 训练数据的情况下,零样本超过了在 LIBERO 上微调过的 $\pi_0$。
- 零样本泛化:跨不同光照(diverse illumination)、跨未见物体类别(unseen object categories)均有效。
- 少样本后训练(Few-Shot Post-Training):仅用 200 条轨迹即可后训练,数据采集仅需「$1$ 人 $\times$ $4$ 小时」。
- 涌现行为:能迁移到相似物体(如未见过的瓶子 unseen bottles)。
12.16.3 合成抓取数据的缩放律(Scaling Law)
• 性能随数据呈次线性(sub-linearly)增长——额外的成功需要指数级更多的训练帧。
• 当训练数据规模上去后,sim2real gap 会缩小。
• 因此我们确实需要十亿级数据(we do need billion-scale data)。
评测维度说明:Real/Sim 指在真实世界或仿真器中评测;Synthetic 指合成数据覆盖的物体类别,web 指互联网类别。
12.17 攻克数据难题:大规模合成 + Sim2Real
课件以「Cracking Data Challenge」为题,串联了实验室在合成数据与 sim2real 上的系列工作,构成一条完整的数据生产流水线:
| 环节 | 代表工作 | 说明 |
|---|---|---|
| 场景合成与自动位姿标注 | NOCS(CVPR 2019 Oral) | 归一化物体坐标空间,用于位姿标注 |
| 人类视频 $\to$ 合成数据 | GenHOI(EuroGraphics 2019) | 从人手-物交互生成合成数据 |
| 基于物理的能量优化 | DexGraspNet(ICRA 2023) | 大规模灵巧抓取合成 |
| 大规模强化学习 | UniDexGrasp++(ICCV 2023) | 大规模灵巧抓取 RL |
| 铰接资产与标注 | GAPartNet(CVPR 2023 Highlight) | 面向铰接部件的资产与标注 |
| Sim2Real | ASGrasp(ICRA 2024 Oral) | 缩小仿真到真实的差距 |
12.18 RL 用于布料/衣物的长程操作
课件展示了把上述合成数据 + RL 思路用于可形变物体(deformable)的系列工作:
- RoboHanger(Chen et al., 2025, RAL):学习可泛化的挂衣架插入(hanger insertion),适配多种衣物,用 RL 求解。
- FoldNet(Chen et al., 2026, RAL):通过关键点驱动(keypoint-driven)的资产与演示合成,学习可泛化的闭环衣物折叠策略。特点:可泛化到未见衣物、对扰动鲁棒(robust to perturbations)、基于关键点的错误恢复(error recovery)。其升级版 FoldNet++ 进一步做长程可形变操作演示合成。
- GroceryVLA:在真实超市货架上做双臂(bimanual)抓取-放置,训练数据 99% 合成 + 1% 真实遥操作——再次印证「合成数据为主、少量真实数据收尾」的范式。
12.19 第一人称数据与世界-动作模型(Egocentric Data & World Action Model)
本讲最后引出一个前瞻方向:能否给 VLA 引入更多辅助任务(auxiliary tasks),以更丰富、且尽量无监督/自监督的方式扩充其知识?
- 已有的辅助监督来自合成世界,如:2D bbox、6D grasp pose、占据预测(occupancy prediction)等。
- 进一步的问题:是否能找到更多任务,以无监督/自监督方式丰富 VLA 的知识。
12.19.1 统一世界模型(Unified World Model)
统一世界模型(Zhu et al., 2025)把多种任务学习统一进一个模型,通过耦合视频与动作扩散在大规模机器人数据上预训练。其中 V/L/A 分别代表视觉(Vision)、语言(Language)、动作(Action):
| 任务 | 映射形式 | 含义 |
|---|---|---|
| 策略 Policy | VL $\to$ A | 由视觉+语言生成动作 |
| 视频预测 Video prediction | VL $\to$ V | 由视觉+语言预测未来视频 |
| 前向动力学 Forward Dynamics | VA $\to$ V | 动作条件世界模型:给定当前视觉+动作,预测下一视觉 |
| 逆向动力学 Inverse Dynamics | VV $\to$ A | 由前后两帧视觉反推动作 |
下一讲预告:Lecture 13, EAI Tasks III。
本讲重点回顾
① 作业线索:Assignment 3(Unitree G1 人形 locomotion,独立完成)= PPO + Direct Velocity Walking + Single Motion Tracking;Assignment 4(Galbot 操作,4 人组队,20 分)。
② 非抓握式操作的 RL 演进:平面推动 $(x,y,\theta)$ 目标条件状态 RL $\to$ 任务规划 + 参数化力-速度控制器(受限于预定义技能)$\to$ 外在灵巧性(借助环境 + OSC)$\to$ HACMan(接触点 + 推动方向的混合 actor-critic 映射,能跨物体泛化但用运动基元、动作不连续)$\to$ CORN / DyWA / DAPL 的闭环、动力学自适应策略。
③ VLA(模仿学习主线):Diffusion Policy(动作扩散、多模态)$\to$ RT-1 $\to$ RT-2(迁移网络知识)$\to$ OpenVLA(开源但泛化受限)$\to$ GR-2(生成式视频-语言-动作)$\to$ $\pi_0$(flow matching + 动作专家 attend VLM)$\to$ $\pi_{0.5}$(开放世界泛化)。数据来自遥操作与 Open-X Embodiment($1$M+ 轨迹)。
④ 合成数据:GraspVLA 用十亿级合成数据 + Embodied CoT(2D bbox $\to$ 6D grasp pose $\to$ 7D 连续动作),零样本超过微调的 $\pi_0$;缩放律:性能次线性增长、需 billion-scale 数据、sim2real gap 随数据缩小。
⑤ 世界模型:统一世界模型把 Policy(VL$\to$A)、视频预测(VL$\to$V)、前向动力学(VA$\to$V)、逆向动力学(VV$\to$A)统一进一个模型。
互动自测
以下题目覆盖全部 12 讲,支持单选与多选,自动判分。题库见 app-full.js 中的 QUIZ_BANK。
具身智能导论完整课程自测
考前速查
把整门课最该记住的公式与结论压成一张表。考试题面是英文,建议结合 术语增强版 把对应英文术语过一遍。
机器人学基础(第 2-4 讲)
1. 刚体变换矩阵:$T=\begin{bmatrix}R & t \\ 0 & 1\end{bmatrix}$,其中 $R\in SO(3)$,$t\in\mathbb{R}^3$。
2. 旋转矩阵性质:$RR^T=R^TR=I$ 且 $\det R=1$。
3. 正运动学(forward kinematics):已知关节角 $\to$ 求末端位姿;逆运动学(inverse kinematics):已知末端位姿 $\to$ 求关节角。
4. Rodrigues 公式:$e^{[\omega]\theta}=I+[\omega]\sin\theta+[\omega]^2(1-\cos\theta)$。
5. 万向锁(gimbal lock):欧拉角在特定姿态下丢失一个自由度;四元数(quaternion)/ 轴角无此问题。
6. Pieper's criterion:判断 6-DoF 机械臂是否存在 closed-form IK 解。
7. 路径(path)回答「去哪」,轨迹(trajectory)回答「何时到、怎么到」(带时间参数化)。
8. 采样式规划:PRM、RRT、RRT-Connect、RRT*;在 configuration space(C-space)中规划。
9. PD 控制:$u=K_p e+K_d\dot{e}$;二阶系统调参 $K_p=\omega_n^2,\ K_d=2\xi\omega_n$;现代机器人常偏好 PD 而非纯 PID。
视觉与抓取(第 5-6 讲)
10. 6D 位姿(6D pose)= 三维平移 $t$ + 三维旋转 $R$。
11. 针孔相机模型:内参 $K$、外参 $[R\mid t]$;PnP 用 2D-3D 对应求位姿。
12. ICP(Iterative Closest Point):找最近点对应 $\to$ 求解 $R,t$ $\to$ 迭代。
13. 神经网络回归旋转需用 连续表示(6D / 9D),避免欧拉角/四元数的不连续性。
14. 力闭合(force closure):能用摩擦力抵抗任意外力/力矩,是抓取规划的重要最低要求。
15. 手眼标定(hand-eye calibration):求解 $AX=XB$;分 eye-in-hand 与 eye-to-hand。
策略学习(第 7-10 讲)
16. policy:$\pi(a\mid s)$(随机)或 $a=\pi(s)$(确定)。
17. 行为克隆(behavior cloning)最大问题是分布漂移(distribution shift)与误差复合;DAgger 可缓解。
18. MDP:$(S,A,P,r,\gamma)$;目标是最大化期望折扣回报 $\mathbb{E}[\sum_t\gamma^t r_t]$。
19. 价值函数 $V^\pi(s)$、动作价值 $Q^\pi(s,a)$、优势函数 $A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s)$。
20. 策略梯度:$\nabla_\theta J=\mathbb{E}[\nabla_\theta\log\pi_\theta(a\mid s)\,A(s,a)]$;REINFORCE 是其 Monte Carlo 版本。
21. actor-critic = 策略网络(actor)+ 价值网络(critic);policy gradient 本质是 on-policy。
22. GAE:用 $\lambda$ 加权多步截断优势,平衡 bias 与 variance。
23. PPO:用 clipped objective 限制策略更新幅度,近似 trust region。
24. Diffusion Policy / Flow Matching:建模多模态动作分布,缓解 BC 的模式平均问题。
运动与任务(第 11-12 讲)
25. ZMP(Zero Moment Point):地面上使所有惯性/重力力合力矩为零的点;落在支撑多边形内则稳定。
26. 基于学习的 locomotion:仿真中用 PPO 训练 + sim-to-real(域随机化 domain randomization、非对称 actor-critic)。
27. VLA(Vision-Language-Action):输入视觉+语言+传感器,输出机器人动作;如 RT-1/RT-2、OpenVLA、$\pi_0$。
考试题面是英文。中文读懂之后,建议切回 术语增强版,把这些核心概念的英文说法过一遍:state、observation、policy、reward、value function、advantage、force closure、hand-eye calibration、trajectory、actor-critic、GAE、PPO、ZMP、VLA。