文件:技术文档.md
配套动态图:动态展示图.gif
主题:具身智能(Embodied AI)、感知-行动循环(Perception-Action Loop)、大语言模型规划(LLM Planning)

请添加图片描述


1. 核心结论

具身智能不是“先看懂再一次性执行”,而是一个持续闭环系统:

环境变化
  ↓
多模态感知
  ↓
状态估计 / 世界模型
  ↓
任务规划 / 技能选择
  ↓
运动规划 / 低层控制
  ↓
机器人行动
  ↓
传感器反馈
  ↺ 重新感知、修正计划、继续执行

大语言模型的主要价值不在于直接控制电机,而在于提升高层认知能力:

  • 把自然语言目标拆成可执行子任务;
  • 利用常识判断任务顺序、对象关系和隐含约束;
  • 根据场景状态选择合适的技能;
  • 在执行失败时解释原因并重新规划;
  • 作为调度器调用视觉模型、导航模块、抓取模块、知识库和安全检查器。

2. 感知-行动循环如何实现?

2.1 总体架构

典型具身智能系统可以拆成四层:

┌────────────────────────────────────────────┐
│  用户目标层:自然语言指令 / 任务目标       │
└────────────────────────────────────────────┘
                    ↓
┌────────────────────────────────────────────┐
│  认知规划层:LLM / VLM / 世界模型 / 记忆   │
└────────────────────────────────────────────┘
                    ↓
┌────────────────────────────────────────────┐
│  技能执行层:导航、抓取、放置、搜索、避障 │
└────────────────────────────────────────────┘
                    ↓
┌────────────────────────────────────────────┐
│  控制反馈层:传感器、控制器、执行监测     │
└────────────────────────────────────────────┘

在工程上,LLM 通常位于“认知规划层”,负责产生可解释的任务计划;真正的连续控制仍由运动规划器、控制器和安全模块完成。


2.2 感知模块:把原始传感器变成结构化状态

输入可以包括:

  • RGB 摄像头;
  • 深度相机;
  • 激光雷达;
  • IMU;
  • 触觉传感器;
  • 麦克风;
  • 机器人本体状态,例如关节角、末端位姿、电池状态。

感知模块的目标是把原始数据变成机器人可以使用的状态表示:

{
  "robot": {
    "base_pose": [1.2, 0.4, 0.0],
    "arm_pose": [0.35, 0.12, 0.58],
    "gripper": "open"
  },
  "objects": [
    {
      "id": "red_cup_01",
      "class": "cup",
      "color": "red",
      "position": [0.72, 0.31, 0.86],
      "state": "on_table",
      "affordance": ["graspable", "movable"],
      "confidence": 0.92
    }
  ],
  "scene_graph": [
    ["red_cup_01", "on", "table_01"],
    ["table_01", "near", "user_01"]
  ]
}

关键处理步骤:

  1. 传感器同步与标定
    对相机、深度图、激光雷达、机器人关节状态进行时间同步和坐标系统一。

  2. 目标检测与分割
    识别物体类别、边界框、实例分割区域。

  3. 深度估计与三维定位
    得到物体在机器人坐标系中的三维位置。

  4. 姿态估计与可操作性分析
    判断物体是否可抓、从哪个角度抓、是否被遮挡、是否存在碰撞风险。

  5. 场景图构建
    将“杯子在桌上”“用户在机器人前方”“门是关闭的”等关系结构化。


2.3 状态估计与世界模型

感知结果并不等于可靠事实。真实环境中会有遮挡、反光、传感器噪声和动态变化,所以需要维护一个带不确定性的内部状态。

可以定义:

BeliefState_t = {
  RobotState_t,
  ObjectState_t,
  SceneGraph_t,
  TaskMemory_t,
  Affordance_t,
  Uncertainty_t
}

其中:

  • RobotState_t:机器人当前位置、姿态、关节状态;
  • ObjectState_t:物体类别、位置、状态;
  • SceneGraph_t:物体之间的空间和语义关系;
  • TaskMemory_t:当前任务进度和历史动作;
  • Affordance_t:某个动作在当前状态下是否可行;
  • Uncertainty_t:状态置信度和风险。

世界模型可以进一步预测:

如果执行 grasp(red_cup_01),可能结果:
1. 成功抓取杯子;
2. 杯子滑落;
3. 抓取路径与桌面碰撞;
4. 杯子位置估计错误,需要重新观察。

2.4 规划模块:从目标到动作序列

用户指令:

把桌上的红色杯子拿给我。

规划模块需要完成:

目标理解 → 场景匹配 → 子任务分解 → 技能选择 → 可行性验证 → 执行监控

示例计划:

Plan:
1. locate(object="red cup", region="table")
2. move_base(target="table")
3. estimate_grasp_pose(object="red_cup_01")
4. pick(object="red_cup_01")
5. move_base(target="user")
6. handover(object="red_cup_01")

注意:这里的 locatemove_basepickhandover 不是普通文字,而是机器人系统中已经注册的技能接口。


2.5 行动模块:把离散计划变成连续控制

LLM 输出的通常是高层动作,例如:

pick(red_cup_01)

机器人还需要把它转换成连续控制:

pick(red_cup_01)
  ↓
抓取点估计
  ↓
逆运动学求解
  ↓
轨迹规划
  ↓
碰撞检测
  ↓
控制器执行
  ↓
力控 / 视觉伺服修正

低层控制器一般以高频运行,负责稳定、实时、安全地控制电机;LLM 不适合直接生成每个电机控制周期的命令。


2.6 执行监测与反馈重规划

执行不是一次性完成的。每个动作后都要检查:

  • 目标是否达到;
  • 物体是否仍在预期位置;
  • 抓取是否成功;
  • 是否发生碰撞或异常;
  • 用户意图是否改变。

失败示例:

动作:pick(red_cup_01)
结果:失败
原因:杯子被遮挡,抓取点不可达
系统响应:
1. 移动视角重新观察;
2. 更新杯子位姿;
3. 重新生成抓取姿态;
4. 再次执行 pick。

这就是“感知-行动循环”的核心:每次行动都会改变环境,环境变化又会触发新的感知和规划。


3. 大语言模型如何提升具身智能规划能力?

3.1 高层任务分解

传统机器人系统通常依赖人工规则:

if task == "take cup":
    move_to_table()
    grasp_cup()
    deliver_to_user()

问题是规则难以覆盖复杂开放场景。

LLM 可以把模糊目标拆成结构化步骤:

用户:帮我整理一下桌面。
LLM 输出:
1. 检测桌面物体;
2. 区分垃圾、文具、餐具和电子设备;
3. 将垃圾放入垃圾桶;
4. 将文具放入收纳盒;
5. 将餐具放入托盘;
6. 检查桌面是否仍有散乱物体。

优势:

  • 能处理开放词汇;
  • 能理解隐含目标;
  • 能根据上下文调整步骤。

3.2 语义 grounding:把语言目标绑定到真实物体

用户说:

拿那个可以喝水的东西。

机器人不能只做关键词匹配。LLM 可以结合常识推断“可以喝水的东西”大概率是杯子、瓶子或水壶,再通过视觉模块确认场景中有哪些候选物体。

典型过程:

语言描述
  ↓
候选类别推理:cup / bottle / mug
  ↓
视觉检测候选对象
  ↓
结合位置、颜色、关系进行消歧
  ↓
绑定到具体对象 ID:red_cup_01

3.3 技能选择与可行性约束

LLM 生成的计划必须受到机器人实际能力约束。例如机器人没有“开冰箱”技能,就不能把计划写成:

open_fridge()

工程上应维护一个技能库:

{
  "skills": [
    {
      "name": "move_base",
      "args": ["target"],
      "preconditions": ["target_reachable"],
      "effects": ["robot_near_target"]
    },
    {
      "name": "pick",
      "args": ["object_id"],
      "preconditions": ["object_visible", "object_graspable", "path_collision_free"],
      "effects": ["object_in_gripper"]
    },
    {
      "name": "place",
      "args": ["object_id", "target_surface"],
      "preconditions": ["object_in_gripper", "surface_available"],
      "effects": ["object_on_surface"]
    }
  ]
}

LLM 的输出要经过技能白名单、前置条件检查和安全验证。


3.4 结合 affordance 评分进行规划

一个可落地的规划评分方式是:

Score(skill) = LanguageScore(skill | instruction, state)
             × FeasibilityScore(skill | state)
             × SafetyScore(skill | constraints)

含义:

  • LanguageScore:这个技能是否符合用户目标;
  • FeasibilityScore:当前机器人是否真的能执行;
  • SafetyScore:是否满足安全约束。

这样可以避免 LLM 说出“听起来合理但机器人做不到”的动作。


3.5 长时序任务规划与异常恢复

长时序任务难点:

  • 步骤多;
  • 环境动态变化;
  • 任务中间状态容易丢失;
  • 单个失败会导致全局失败。

LLM 可以维护任务记忆:

TaskMemory:
- 用户目标:把红色杯子拿给我
- 已完成:定位杯子、移动到桌边
- 当前失败:第一次抓取失败
- 失败原因:抓取姿态不可达
- 下一步:调整视角,重新估计抓取点

这使机器人可以“接着任务继续做”,而不是每次失败都从头开始。


4. 三种主流实现范式

范式 核心思想 优点 风险
LLM + 技能库 LLM 只做高层规划,调用已有机器人技能 工程稳定、可解释、安全边界清晰 依赖技能库覆盖范围
多模态模型 + 世界模型 模型直接处理图像、语言、状态,并参与推理 grounding 更强,能理解复杂场景 对数据和算力要求高
VLA 模型 将视觉、语言和动作统一建模,直接输出动作或动作 token 泛化能力更强,端到端学习 安全验证、可解释性和实时性更难

建议工程落地优先采用:

LLM 高层规划
+ VLM 场景理解
+ 技能库约束
+ 运动规划器
+ 安全监督器
+ 闭环反馈重规划

5. 参考系统流程

5.1 闭环伪代码

def embodied_agent_loop(user_goal):
    task_memory = []
    world_state = None

    while not goal_finished(user_goal, world_state):
        # 1. 感知
        observations = read_sensors()

        # 2. 状态估计
        world_state = update_world_model(observations, task_memory)

        # 3. 生成候选计划
        candidate_plan = llm_plan(
            goal=user_goal,
            state=world_state,
            available_skills=skill_registry,
            memory=task_memory
        )

        # 4. 约束验证
        safe_plan = verify_plan(
            plan=candidate_plan,
            state=world_state,
            constraints=safety_rules
        )

        # 5. 执行动作
        for skill_call in safe_plan:
            result = execute_skill(skill_call)

            # 6. 执行后重新感知
            observations = read_sensors()
            world_state = update_world_model(observations, task_memory)

            # 7. 成功检测与失败恢复
            if not success_check(skill_call, world_state):
                task_memory.append({
                    "failed_skill": skill_call,
                    "reason": diagnose_failure(skill_call, world_state)
                })
                break

            task_memory.append({
                "success_skill": skill_call
            })

    return "task_finished"

5.2 LLM 规划 Prompt 模板

你是机器人高层任务规划器。

用户目标:
{user_goal}

当前世界状态:
{world_state_json}

可用技能:
{skill_registry_json}

安全约束:
{safety_rules}

请输出 JSON 格式计划:
[
  {
    "skill": "move_base",
    "args": {"target": "table_01"},
    "reason": "需要靠近杯子所在桌面",
    "precondition_check": ["target_reachable"]
  }
]

要求:
1. 只能使用可用技能;
2. 不确定时先调用 observe 或 ask_user;
3. 不允许绕过安全约束;
4. 每一步都要写明目的和前置条件。

6. 工程实现要点

6.1 模块接口设计

建议至少拆成以下服务:

PerceptionService
- detect_objects()
- estimate_pose()
- build_scene_graph()

WorldModelService
- update_state()
- query_object()
- predict_effect()

PlannerService
- parse_goal()
- generate_plan()
- replan_on_failure()

SkillService
- list_skills()
- check_preconditions()
- execute_skill()

SafetyService
- collision_check()
- forbidden_action_check()
- human_confirmation()

6.2 推荐数据流

SensorFrame
  → PerceptionResult
  → BeliefState
  → LLMPlan
  → VerifiedSkillPlan
  → MotionTrajectory
  → ExecutionResult
  → UpdatedBeliefState

6.3 安全策略

必须加入以下保护:

  1. 技能白名单:LLM 只能调用已注册技能;
  2. 前置条件检查:动作执行前检查是否满足条件;
  3. 碰撞检测:所有轨迹执行前必须验证;
  4. 不确定性阈值:低置信度感知结果不直接执行高风险动作;
  5. 人类确认:危险、昂贵、不可逆动作需要确认;
  6. 执行超时:动作卡住时停止并重规划;
  7. 日志回放:保存感知、计划、动作和结果,方便追踪问题。

7. 示例:服务机器人拿杯子

输入

用户:把桌上的红色杯子拿给我。

感知结果

{
  "objects": [
    {
      "id": "red_cup_01",
      "class": "cup",
      "color": "red",
      "position": [0.72, 0.31, 0.86],
      "relation": "on table",
      "affordance": ["graspable"]
    }
  ],
  "robot_state": {
    "near": "sofa",
    "gripper": "empty"
  }
}

LLM 规划

[
  {
    "skill": "move_base",
    "args": {"target": "table_01"},
    "reason": "机器人需要先靠近杯子"
  },
  {
    "skill": "pick",
    "args": {"object_id": "red_cup_01"},
    "reason": "目标物体可抓取"
  },
  {
    "skill": "move_base",
    "args": {"target": "user_01"},
    "reason": "将杯子递给用户"
  },
  {
    "skill": "handover",
    "args": {"object_id": "red_cup_01"},
    "reason": "完成递交"
  }
]

闭环调整

如果抓取失败:

重新观察 → 更新杯子姿态 → 重新计算抓取点 → 再次抓取

8. 关键难点

8.1 感知不确定性

机器人看到的世界并不完整。遮挡、反光、动态移动都会导致误判。

解决方向:

  • 多视角观测;
  • 主动感知;
  • 场景记忆;
  • 不确定性建模;
  • 失败后重观察。

8.2 语言计划与物理可执行性不一致

LLM 可能生成语义合理但物理不可执行的计划。

解决方向:

  • 技能库约束;
  • affordance 评分;
  • 运动规划验证;
  • 仿真预演;
  • 执行后反馈。

8.3 长任务稳定性

长任务容易出现“前面步骤成功,后面状态变了”的问题。

解决方向:

  • 采用滚动规划;
  • 每一步后重新感知;
  • 维护任务记忆;
  • 失败时局部重规划;
  • 不把长计划一次性执行到底。

9. 推荐落地架构

                       用户自然语言指令
                              ↓
                    ┌─────────────────┐
                    │   LLM 任务规划器 │
                    └─────────────────┘
                              ↓
        ┌───────────────────────────────────────┐
        │  计划验证器:技能白名单 / 安全约束     │
        └───────────────────────────────────────┘
                              ↓
        ┌───────────────┬───────────────┬───────────────┐
        │  视觉感知技能  │   导航技能     │   操作技能     │
        └───────────────┴───────────────┴───────────────┘
                              ↓
                    ┌─────────────────┐
                    │  控制器 / 执行器 │
                    └─────────────────┘
                              ↓
                    ┌─────────────────┐
                    │  传感器反馈更新 │
                    └─────────────────┘
                              ↺

10. 技术路线总结

具身智能中的感知-行动循环,本质上是一个持续运行的闭环控制与认知系统。

LLM 的增强作用主要体现在高层规划、语义理解、任务分解、工具调用和失败恢复;但为了工程可靠性,LLM 不应绕过感知、世界模型、技能约束、安全验证和低层控制模块。

最终较稳妥的系统设计是:

多模态感知 + 世界模型 + LLM 高层规划 + 技能库 + 控制器 + 安全监督 + 闭环重规划

11. 参考资料

  1. SayCan: Grounding Language in Robotic Affordances
    https://say-can.github.io/

  2. Do As I Can, Not As I Say: Grounding Language in Robotic Affordances
    https://arxiv.org/abs/2204.01691

  3. PaLM-E: An Embodied Multimodal Language Model
    https://proceedings.mlr.press/v202/driess23a.html

  4. RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control
    https://proceedings.mlr.press/v229/zitkovich23a.html

  5. Google DeepMind RT-2 Blog
    https://deepmind.google/blog/rt-2-new-model-translates-vision-and-language-into-action/

  6. Gemini Robotics
    https://deepmind.google/models/gemini-robotics/

  7. Gemini Robotics-ER 1.6
    https://deepmind.google/blog/gemini-robotics-er-1-6/

  8. Open X-Embodiment: Robotic Learning Datasets and RT-X Models
    https://arxiv.org/abs/2310.08864

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐