跳转至

大模型驱动的机器人

大语言模型(LLM)和视觉语言模型(VLM)拥有丰富的常识知识和推理能力,但它们并不直接理解物理世界的约束。如何将LLM/VLM的"大脑"连接到机器人的"身体"?本文系统梳理LLM/VLM驱动机器人的核心方法。

相关笔记:机器人基础模型概论 | VLA模型 | 多任务与泛化


1. 问题定义:接地问题

LLM驱动机器人的核心挑战是接地问题(Grounding Problem)

\[\text{语言空间} \xrightarrow{?} \text{物理世界}\]

LLM可以生成"打开冰箱门"这样的指令,但如何确保:

  1. 物理可行性:机器人当前状态下能否执行这个动作?
  2. 语义准确性:LLM理解的"打开"是否与机器人的动作原语匹配?
  3. 环境感知:LLM是否知道冰箱在哪里?门的把手位置?

2. SayCan:可行性约束的语言规划

2.1 核心思想

SayCan(Ahn et al., Google, 2022)是LLM驱动机器人的奠基工作。核心公式:

\[c^* = \arg\max_{c_i \in \mathcal{C}} \underbrace{p_{\text{LLM}}(c_i | l, h)}_{\text{任务相关性}} \cdot \underbrace{V^{c_i}(s)}_{\text{可行性评分}}\]

其中:

  • \(\mathcal{C}\):预定义的技能库(如 "pick up X", "go to Y", "place X on Y")
  • \(l\):用户的自然语言指令
  • \(h\):对话历史(已完成的动作序列)
  • \(V^{c_i}(s)\):技能 \(c_i\) 在当前状态 \(s\) 下的value function,作为affordance score

2.2 架构流程

graph TB
    USER[用户指令<br/>"I spilled my drink, can you help?"] --> LLM[LLM<br/>PaLM 540B]

    LLM --> SCORE["对每个技能评分<br/>p(skill | instruction, history)"]

    ENV[环境状态<br/>机器人观测] --> AFF["Affordance评估<br/>每个技能的value function"]

    SCORE --> MUL["联合评分<br/>p(skill) × V(skill)"]
    AFF --> MUL

    MUL --> SELECT["选择最佳技能<br/>argmax"]
    SELECT --> EXEC["执行技能<br/>底层RL/BC策略"]
    EXEC --> FB["执行结果<br/>成功/失败"]
    FB --> LLM

    style LLM fill:#e3f2fd
    style AFF fill:#e8f5e9
    style MUL fill:#fff3e0

2.3 关键细节

技能库设计:SayCan预定义了551个短程技能,每个技能对应一个预训练的RL策略。技能用自然语言描述:

"pick up the red bull can"
"go to the counter"
"place the sponge in the sink"
"open the top drawer"

Affordance评估:每个技能的affordance通过训练一个value function来估计:

\[V^{c_i}(s) \approx \mathbb{E}\left[\sum_{t=0}^T \gamma^t r_t \mid s_0 = s, \pi = \pi_{c_i}\right]\]

当机器人离目标物体很远或者目标不在视野内时,\(V^{c_i}(s)\) 自然会很低。

局限性

  • 依赖预定义的技能库,无法处理技能库外的任务
  • 每个技能需要单独训练一个RL策略
  • 无法处理需要创造性解决方案的任务

3. Code as Policies:LLM生成代码

3.1 核心思想

Code as Policies(Liang et al., 2023)让LLM直接生成Python代码来控制机器人,而非选择预定义技能:

\[\text{LLM}(\text{instruction}, \text{API docs}, \text{examples}) \rightarrow \text{Python code}\]

3.2 示例

用户指令:"把所有蓝色的方块排成一行"

LLM生成的代码:

# 获取所有蓝色方块的位置
blue_blocks = detect_objects("blue block")

# 按x坐标排序
blue_blocks.sort(key=lambda b: b.position[0])

# 设定目标排列位置
start_x = 0.3
spacing = 0.08

for i, block in enumerate(blue_blocks):
    target_pos = [start_x + i * spacing, 0.5, block.position[2]]
    pick_and_place(block.id, target_pos)

3.3 API设计

关键在于设计合适的机器人API供LLM调用:

API层级 示例 说明
高层语义 pick_and_place(obj, target) 抽象操作
中层运动 move_to(position, orientation) 运动规划
底层控制 set_joint_angles(angles) 关节控制
感知 detect_objects(description) 视觉检测
空间推理 get_position(obj) 位置查询

优点

  • 组合性强:代码天然支持循环、条件、函数调用
  • 可解释:生成的代码可以人工审查
  • 灵活:不受预定义技能库的限制

缺点

  • LLM可能生成语法正确但语义错误的代码
  • 需要精心设计API接口
  • 错误处理和异常恢复困难

4. ProgPrompt:程序化提示

ProgPrompt(Singh et al., 2023)结合了结构化程序和自然语言提示:

核心创新:在prompt中提供:

  1. 环境中可用物体的列表
  2. 可用动作的函数签名
  3. 断言函数(用于检查前置条件)

示例Prompt结构

# 可用物体: mug, plate, table, sink, sponge
# 可用动作: find(obj), pick_up(obj), place(obj, location), 
#           open(obj), close(obj)
# 断言: is_holding(obj), is_at(location), is_open(obj)

def clean_the_mug():
    find("mug")
    pick_up("mug")
    find("sink")
    place("mug", "sink")
    # 检查前置条件
    assert is_at("sink")
    open("faucet")
    ...

与Code as Policies的区别

  • ProgPrompt更强调前置条件检查断言
  • 提供了系统化的prompt工程模板
  • 更适合需要严格执行顺序的任务

5. VoxPoser:3D空间推理

5.1 核心思想

VoxPoser(Huang et al., 2023)将LLM的语言推理能力映射到3D体素空间:

\[\text{LLM} + \text{VLM} \rightarrow \text{3D Affordance/Constraint Maps} \rightarrow \text{Motion Planning}\]

5.2 工作流程

  1. 语言理解:LLM解析指令,生成代码描述目标区域和约束
  2. 视觉定位:VLM(如OWL-ViT)定位场景中的物体
  3. 体素地图生成: - Affordance Map \(\mathbf{V}_{\text{aff}} \in \mathbb{R}^{X \times Y \times Z}\):目标区域得分高 - Constraint Map \(\mathbf{V}_{\text{con}} \in \mathbb{R}^{X \times Y \times Z}\):障碍/禁区得分高
  4. 运动规划:在体素地图上运行MPC,生成无碰撞轨迹

组合得分

\[\mathbf{V}_{\text{total}}(x, y, z) = \mathbf{V}_{\text{aff}}(x, y, z) - \lambda \mathbf{V}_{\text{con}}(x, y, z)\]

优点

  • 无需任何机器人训练数据
  • 可以处理复杂的空间约束("把杯子放在盘子和花瓶之间")
  • 组合了语言推理和3D空间推理

6. Inner Monologue:闭环反馈

6.1 核心思想

Inner Monologue(Huang et al., Google, 2022)在LLM规划中引入了感知反馈闭环

之前的方法(如SayCan)是开环的——LLM生成计划后直接执行,不考虑执行过程中的意外。Inner Monologue让LLM持续接收环境反馈并动态调整计划。

6.2 反馈类型

反馈类型 来源 示例
成功/失败检测 视觉分类器 "pick up succeeded"
场景描述 图像描述模型 "I see a red cup on the table"
物体检测 目标检测模型 "Objects: cup(0.3, 0.5), plate(0.6, 0.4)"
人类反馈 人类操作员 "No, I meant the other cup"

6.3 闭环执行流程

graph TB
    INST[用户指令] --> LLM[LLM规划器]
    LLM --> PLAN[子任务计划]
    PLAN --> EXEC[执行当前子任务]
    EXEC --> SENSE[感知系统]
    SENSE --> FB["反馈汇总<br/>1. 成功/失败<br/>2. 场景描述<br/>3. 物体检测"]
    FB --> LLM
    LLM --> |"根据反馈调整计划"| PLAN

    EXEC --> |"任务完成"| DONE[完成]

    style LLM fill:#e3f2fd
    style SENSE fill:#e8f5e9
    style FB fill:#fff3e0

与SayCan的关键区别

  • SayCan:LLM选技能 → 执行 → 选下一个技能(无反馈)
  • Inner Monologue:LLM选技能 → 执行 → 收集环境反馈 → LLM根据反馈调整(有反馈)

7. Statler:状态维护

Statler(Yoneda et al., 2023)在LLM规划中引入显式状态表征

问题:LLM的上下文窗口有限,长序列任务中可能"忘记"环境状态。

解决方案:维护一个结构化的世界状态表征:

World State:
- Robot Location: kitchen counter
- Holding: nothing
- Objects:
  - red_cup: on table, upright, empty
  - blue_plate: on counter, clean
  - sponge: in sink, wet

两个LLM模块

  1. Inner State LLM:根据执行结果更新世界状态
  2. Outer State LLM:根据当前世界状态决定下一步动作

这种分离使得LLM可以更可靠地跟踪长时间任务中的环境变化。


8. 方法对比总结

方法 年份 动作输出方式 是否闭环 需要训练 3D推理
SayCan 2022 选择预定义技能 部分 每个技能需训练
Code as Policies 2023 生成Python代码 有限
ProgPrompt 2023 生成程序+断言 部分(断言)
VoxPoser 2023 3D体素值图 → MPC
Inner Monologue 2022 选择技能+反馈 底层技能需训练
Statler 2023 选择技能+状态

关键权衡

灵活性 vs 可靠性

  • Code as Policies最灵活(可以生成任意代码),但可靠性最低(代码可能有bug)
  • SayCan最可靠(每个技能都经过训练),但灵活性最低(受限于技能库)

零样本 vs 需训练

  • VoxPoser、Code as Policies、ProgPrompt、Statler都是零样本方法,不需要机器人训练数据
  • SayCan、Inner Monologue需要预训练底层技能

9. 局限性与未来方向

9.1 当前局限

  1. 推理延迟:LLM推理通常需要数百毫秒到数秒,不适合实时控制
  2. 幻觉问题:LLM可能生成看似合理但物理不可行的计划
  3. 空间推理弱:纯文本LLM的空间推理能力有限
  4. 错误累积:长序列任务中错误会累积
  5. 安全性:LLM生成的代码可能导致危险动作

9.2 发展趋势

  1. VLM替代LLM:使用视觉语言模型(如GPT-4V)直接从图像理解场景,减少语言描述的信息损失
  2. 与VLA融合:高层用LLM规划,底层用VLA执行(如pi0.5架构)
  3. 主动感知:LLM不仅被动接收反馈,还主动指导机器人收集信息("先看看桌子上有什么")
  4. 多智能体协作:多个LLM Agent协调控制多台机器人
  5. 持续学习:从执行经验中改进LLM的规划能力

参考文献

  • Ahn et al., "Do As I Can, Not As I Say: Grounding Language in Robotic Affordances" (SayCan), 2022
  • Liang et al., "Code as Policies: Language Model Programs for Embodied Control", ICRA 2023
  • Singh et al., "ProgPrompt: Generating Situated Robot Task Plans using Large Language Models", ICRA 2023
  • Huang et al., "VoxPoser: Composable 3D Value Maps for Robotic Manipulation with Language Models", CoRL 2023
  • Huang et al., "Inner Monologue: Embodied Reasoning through Planning with Language Models", CoRL 2022
  • Yoneda et al., "Statler: State-Maintaining Language Models for Embodied Reasoning", CoRL 2023

评论 #