具身智能中的感知-行动循环实现与大语言模型规划增强
文件:
技术文档.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"]
]
}
关键处理步骤:
-
传感器同步与标定
对相机、深度图、激光雷达、机器人关节状态进行时间同步和坐标系统一。 -
目标检测与分割
识别物体类别、边界框、实例分割区域。 -
深度估计与三维定位
得到物体在机器人坐标系中的三维位置。 -
姿态估计与可操作性分析
判断物体是否可抓、从哪个角度抓、是否被遮挡、是否存在碰撞风险。 -
场景图构建
将“杯子在桌上”“用户在机器人前方”“门是关闭的”等关系结构化。
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")
注意:这里的 locate、move_base、pick、handover 不是普通文字,而是机器人系统中已经注册的技能接口。
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 安全策略
必须加入以下保护:
- 技能白名单:LLM 只能调用已注册技能;
- 前置条件检查:动作执行前检查是否满足条件;
- 碰撞检测:所有轨迹执行前必须验证;
- 不确定性阈值:低置信度感知结果不直接执行高风险动作;
- 人类确认:危险、昂贵、不可逆动作需要确认;
- 执行超时:动作卡住时停止并重规划;
- 日志回放:保存感知、计划、动作和结果,方便追踪问题。
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. 参考资料
-
SayCan: Grounding Language in Robotic Affordances
https://say-can.github.io/ -
Do As I Can, Not As I Say: Grounding Language in Robotic Affordances
https://arxiv.org/abs/2204.01691 -
PaLM-E: An Embodied Multimodal Language Model
https://proceedings.mlr.press/v202/driess23a.html -
RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control
https://proceedings.mlr.press/v229/zitkovich23a.html -
Google DeepMind RT-2 Blog
https://deepmind.google/blog/rt-2-new-model-translates-vision-and-language-into-action/ -
Gemini Robotics
https://deepmind.google/models/gemini-robotics/ -
Gemini Robotics-ER 1.6
https://deepmind.google/blog/gemini-robotics-er-1-6/ -
Open X-Embodiment: Robotic Learning Datasets and RT-X Models
https://arxiv.org/abs/2310.08864
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)