4.4 语言在机器人中的角色(本节综述)
在具身智能中,“语言”不再只是聊天工具,而是贯穿任务描述、约束与安全、行为解释、规划分解 的统一接口。 本节重点讨论:当机器人已经具备视觉与控制能力之后,如何把“人话”稳健地接到“机器动作”上,并反过来用语言让机器人更可控、更安全、更可理解。
4.4.1 语言作为任务描述(goal specification)
4.4.1.1 自然语言指令
在人机协作场景中,最自然的任务接口就是一句话:
“把桌上的红色杯子放进水槽左边的碗里。”
对人类来说,这是一句再日常不过的句子,对机器人来说,这其实隐含了多个层次的信息:
- 任务意图:搬运(pick-and-place)
- 目标物体:红色杯子
- 目标位置:水槽左边的碗
- 关系约束:从桌子上拿起,再放入碗中
- 隐含常识:不要打碎杯子,要先清空路径、避免撞到人等
典型的自然语言任务接口一般包含以下处理链路:
- 语言输入
- 文本指令(键盘、APP、手机端)
- 语音指令 + 语音识别(ASR)转成文本
- 语义解析 / LLM 理解
- 使用大语言模型或专门的语义解析器,将指令转为结构化表示,例如:
action: place
object: cup(color=red, category=“mug”)
target: bowl(location=left_of(sink))
constraints: gentle, avoid_spill
- 现代系统常利用语言模型直接对“动作原语库”进行评分,选择适合技能,如 SayCan 框架通过将 LLM 与价值函数组合来选择技能序列,实现“既有用又可行”的行动 (arXiv)
- 与感知和控制对接
- 视觉模块在场景中识别“红色杯子”“碗”“水槽”等目标
- 任务层规划生成抓取、移动、放置的子任务序列
- 低层控制器生成具体的轨迹和关节控制命令
[图片占位:一张“自然语言指令到机器人执行”的流程图 从左到右依次为:人类口头/文本指令 → 语言模型/解析器 → 结构化任务表示(object / target / constraints)→ 任务规划器 → 运动规划 → 机械臂执行画面。]
相比传统“按钮 + 工程参数”的交互方式,自然语言有三个优势:
- 接近人类思维,学习成本低
- 可以模糊但正确地 描述任务(“大概放在中间”“尽量轻一点”),由系统再细化
- 方便表达组合任务与长时序目标(“先把桌子收拾干净,再拖地”)
语言条件化机器人策略,已经在多种操作基准与真实机器人中被验证可行,如 VIMA 提出用多模态 prompt(语言 + 目标图像)来统一表达多种操作任务,Transformer 模型自回归地产生动作序列 (OpenReview)。
4.4.1.2 相比坐标输入
传统机器人更习惯接受这样的命令:
- “末端移动到 \( (x, y, z, roll, pitch, yaw) \)”
- “关节角设置为 \( q_1, \dots, q_7 \)”
这类坐标/关节指令 有两个显著特征:
- 语义层次低
- 它只告诉机器人“到哪儿、摆成什么姿态”,而不是“为什么要这样做”
- 无法直接表达“抓起”“放下”“避开玻璃杯”等任务语义和约束
- 对使用者要求高
- 人类需要理解机器人坐标系、DH 参数、工作空间边界等
- 在非结构化场景(家居、仓库)中,用户难以给出准确坐标,更不可能频繁手动输入
语言接口与坐标接口之间的关系可以这样理解:
- 语言:任务层描述(task-level)
- “把 A 放到 B”“先做 X 再做 Y”“如果桌子太乱就先整理”
- 坐标:控制层接口(motion/control-level)
- 决策好的“抓取 A”最终会被落到一系列笛卡尔位姿或关节轨迹上
现代 VLA 系统的典型做法是:
语言描述 → 抽象任务表示(符号层)→ 运动规划器生成一组几何目标 / 轨迹 → 控制器执行。
这样既保留了语言的高层表达力,又利用坐标级控制的精确性与可验证性。
4.4.1.3 任务参数提取
要让语言真正转化为可执行任务,核心是从自然语言中自动提取出任务参数(task parameters),并与环境状态对齐。
常见的任务参数类型包括:
- 对象参数:类别、颜色、形状、材质、是否易碎
- 目标位置 / 容器:桌面某区域、某个容器、某个具体物体附近
- 空间关系:左边、右边、前面、背后、堆叠在上方、靠近墙面等
- 时序结构:先后顺序、条件执行(“如果 A 不存在就改为 B”)
- 风格 / 性能要求:快/慢、轻/重、优先节能/优先速度等
在工程上可采用多种方式提取:
- 模板与槽位(slot filling) 对于结构固定的任务(如装配线操作),可定义模板:
模板:“把 [颜色] 的 [物体] 放到 [目标位置]” 然后用简单的 NLP 或正则匹配来提取槽位。
- 语义角色标注 / 依存分析
- 使用语法分析器找出句子中的谓词(谓词:put / move / pick)及其论元(agent, patient, destination)。
- 如:“把红色杯子放到水槽左边的碗里”中:
- 动作:放
- 受事(被操作对象):红色杯子
- 目标:碗
- 目标位置修饰:水槽左边
- 大语言模型 + 结构化输出
- 直接让 LLM 输出 JSON 或类似结构:
{
"high_level_action": "place",
"object": {"type": "cup", "color": "red"},
"target": {"type": "bowl", "relation": "left_of", "anchor": "sink"},
"constraints": ["be_gentle"]
}
- 这种方式已被广泛用于语言条件化策略学习和多任务操作系统,如多个工作将自然语言指令映射为操作子、技能调用图或 symbolic predicate,用于下游规划器 (arXiv)
- “代码即策略”(Code as Policies) 更进一步,可以直接让 LLM 生成可执行代码,代码中显式包含任务参数、条件判断和控制 API 调用。例如 CaP 框架中,大模型从自然语言生成完整的 Python 控制程序,其中对物体、目标、运动参数的解析隐含在生成的函数调用与逻辑结构中 (arXiv)。
[图片占位:自然语言 → JSON 任务表示 → 运动规划 → 控制的示意图。 左侧是原始中文指令,中间是结构化参数表,右侧为机械臂在仿真环境中执行抓取/放置动作的帧序列。]
在本书后续 VLA 架构与训练章节(第 8、9 章)中,可以把“任务参数提取”视作语言编码器 + 头部预测任务 的一部分,或视作 LLM 通过 few-shot 提示(prompting)自动完成的子功能。
4.4.2 语言作为约束与安全规范(规则、禁止项)
任务描述回答的是“做什么”,但对真实机器人系统来说,“** 不准做什么**”同样重要,尤其在开放环境中。
语言可以自然地表达:
- 安全边界:“不要靠近人”“不能碰到墙上的名画”
- 操作限制:“易碎物品都要轻拿轻放”“不要提起超过 5kg 的物体”
- 个性偏好:“不要在晚上 10 点以后打扫”“不要移动这张桌子上的任何东西”
这些信息对 RL 奖励函数或传统代价函数来说很难完整编码,因此自然语言约束逐渐成为安全机器人学习的重要研究方向。Safe RL with Natural Language Constraints 这类工作就专门区分了“指令(做什么)”与“约束(不能做什么)”,并用文本对安全区域进行定义和学习 (NeurIPS Proceedings)。
4.4.2.1 语言规则示例
从工程视角看,我们希望把自然语言规则系统化整理为可处理的类型。 可以将常见规则粗略划分为:
- 区域/位置类约束
- “不要进入厨房的地毯区域”
- “离墙至少 30cm”
- “不要在婴儿床 1 米以内移动”
- 对象/材料类约束
- “不要触碰玻璃制品”
- “对易碎物体速度要小于 0.1 m/s”
- “不要移动这个黑色笔记本电脑”
- 交互与力学类约束
- “人接近时降低速度”
- “不要施加超过 10N 的推力”
- “搬运液体时避免急加速”
- 时序类约束
- “先确认门关闭再启动机械臂”
- “绝对不要在有人进入房间之前开启激光器”
- “如果湿滑警示存在,不要进入该区域”
[图片占位:表格形式的“自然语言规则示例汇总图”,左列为中文规则,中列为类别(区域/对象/力学/时序),右列为简要解释。]
这些规则本身可以由操作员、实验室安全规范、企业 SOP(Standard Operating Procedure)或监管机构标准给出,再通过语言接口实时配置给机器人。
4.4.2.2 将安全规范翻译为可检查条件
自然语言规则最终必须变成可计算、可验证的形式,才能在规划和控制中生效。典型做法是构建一个“语言 → 形式规范”的翻译模块,然后在控制环路中加入一个** 安全过滤器(safety filter)**或“Safety Chip”进行实时约束检查 (人机实验室)。
可以从三个层次理解这一过程:
- 语义到逻辑/数学形式的映射 举例:
更复杂的时序规则(如“先关门再开动机器人”)常被映射为时序逻辑(如 LTL) 或自动机约束,并在规划或 MPC(Model Predictive Control)中强制满足。部分工作已经实现了从自然语言到 LTL 公式的自动翻译,再用自动机对策略执行过程进行监控 (人机实验室)。
- 语言规则:
“不要靠近人,至少保持 0.8 米距离。”
-
转换为数学约束:
\[ \forall t,\ \text{dist}(\text{robot}(t), \text{human}(t)) \ge 0.8\ \text{m} \]
-
再进一步可转换为运动规划中的线性或非线性不等式约束。
- 结合感知进行“语义落地”(grounding)
近期工作提出“语言条件化安全过滤”框架:LLM 将自然语言规则翻译为结构化安全规格;感知模块维护对象级 3D 表示;控制模块通过 MPC 或 QP 在实时控制中强制满足语义与几何安全约束 (arXiv)。
- “不要压到地上的电源线”需要先通过视觉/点云识别“电源线”,再把其投影到机器人坐标系中,定义避让区域。
- “避免湿滑区域”则需要通过语义分割或人类标注,将地面 patch 标记为“slippery”,再生成约束。
- 规划与控制中的集成方式
- 在任务规划器 中: 将规则编译进规划域(例如 PDDL 中的 precondition / forbidden state),在生成任务序列时就避免违背规则。
- 在运动规划器/控制器 中: 使用“安全过滤器”对候选轨迹进行可行性检查,不满足约束的轨迹被丢弃或修正(例如 QP-based Safety Layer,或 Control Barrier Function)。
- 在RL 策略 中: 把规则转化为约束集,用于限制策略的动作选择或构造“屏蔽层(shield)”,形成 safe RL。
[图片占位:语言规则 → LTL/数学约束 → 安全过滤器 → 机器人轨迹 的流程示意图;图中包含感知模块将地毯/电源线等标成不同颜色区域。]
4.4.2.3 人机交互中的纠偏
即便事先定义了大量规则,机器人仍然会犯错或不符合用户偏好。语言在在线纠偏(on-the-fly correction) 中尤其有用:
典型交互形式:
- 速度或风格纠正:
- “太快了,慢一点。”
- “不要再从桌子这一侧绕了,从后面走。”
- 安全偏好调整:
- “这块地毯很贵,不要踩上去。”
- “这些纸箱可以随便挪,不用小心。”
- 目标修正:
- “不是那个红杯子,是靠近窗户的那个。”
研究表明,将语言反馈映射为代价函数修正 或轨迹改写,可以显著提升机器人轨迹质量和用户满意度。比如有工作提出从自然语言反馈中学习“比较偏好”(comparative language feedback),在共享的嵌入空间中对轨迹进行改进和奖励学习,从而迭代优化策略 (arXiv)。另一些工作则直接把“不要靠这么近”“往桌子中心一点”这类文本映射为代价函数的参数更改,从而重新规划路径 (NVIDIA)。
这一方向与第 9 章中 RLHF 和人类偏好学习内容相呼应: 区别在于,这里的人类反馈不是抽象的数值,而是更具信息量的自然语言,可同时指出“哪里错了”和“应该如何改”。
4.4.3 语言作为解释接口(机器人行为的可解释性)
当机器人通过 VLA 模型自主决策时,人类很容易产生“黑箱恐惧”: 为什么它要绕一大圈?为什么它停在这里不动?是坏了还是在思考?
语言解释接口的目标,就是让机器人在关键时刻说清楚自己在做什么、为什么这么做、哪里出了问题、下一步会怎样做,从而提升信任与可调试性。
4.4.3.1 行为解释
可以把行为解释按“深度”分为三层:
- What:描述正在做什么
- “我正在寻找红色杯子。”
- “我准备从桌子的右侧绕到水槽前面。”
- “我正在缓慢放下杯子,避免倾倒。”
- Why:解释决策原因(代价与约束)
- “我选择从右侧绕行,因为左侧有地毯区域被标记为禁入。”
- “我降低了速度,因为检测到附近有人类在移动。”
- “我先收拾桌面,再拖地,因为拖地前需要清空地面。”
- What-if:对比和反事实解释
- “如果我从左侧走,可能会踩到电源线。”
- “如果直接抬起箱子,可能超过负载限制,会造成危险。”
在实现上,解释可以来自:
- 显式规划轨迹和代价信息: 规划器天生就有路径、代价值、约束,LLM 可以根据这些信息生成自然语言说明。
- 任务层步骤序列: 像 SayCan 这类系统已经有“技能序列 + 成功概率”的中间表示,可以直接转换成可读的步骤说明(“先打开柜门,再拿出杯子,再关门……”) (arXiv)。
- 策略内部的中间 token / subgoal: 多模态 Transformer 产生的中间“子目标 token”也可视为解释线索,经过语言解码头转换成自然语言解释。
[图片占位:左侧为机器人执行某个长时任务的时间轴,右侧对应每个关键时刻的解释气泡;例如“t1:正在寻找杯子”“t2:绕开地毯”“t3:抓取失败,重新尝试”。]
4.4.3.2 故障诊断
当机器人无法完成任务或表现异常时,人类需要知道是感知出错、规划失败、控制器饱和,还是“指令不可行”。
语言诊断接口可以做几件事情:
- 明确失败原因类别
- 感知问题: “我没有在桌面上找到红色杯子,只找到了蓝色和绿色的杯子。”
- 几何可达性问题: “目标位置太靠近墙角,我的机械臂在不碰撞墙的前提下无法到达。”
- 动力学/负载问题: “物体重量估计超过 7kg,而我的额定负载为 5kg。”
- 规则/约束冲突: “该路径会经过禁止进入的地毯区域,因此被安全规则拒绝。”
- 反馈给普通用户与开发者不同粒度的信息
- 对普通用户:用日常语言说明情况并给出建议(“请把杯子放到更靠近桌面中心的位置”)。
- 对开发者:附带具体错误码、关节、传感器读数等技术信息(供日志分析)。
- 与调试工具联动
- 语言解释中可附带“建议收集何种数据”“建议降低某个参数”等,使调试过程更高效。
随着 LLM 与机器人控制的结合,越来越多工作尝试用大模型对低层日志进行“文本摘要式诊断”,例如将多轮规划失败记录压缩成一句话:“最近 10 次任务失败大多是由于抓取时末端对准误差过大”。这一方向与第 10 章“系统部署与评测”可以形成上下呼应。
4.4.3.3 学习反馈
语言不仅可以解释机器人的行为,也可以用来总结机器人学到的内容,形成一种“可对话的学习日志”。
从机器人一侧来看,典型能力包括:
- 任务完成总结
- “本次共完成 10 次抓取任务,成功 8 次,失败 2 次(均发生在抓取小物体时)。我发现对小物体使用当前视角难以准确对准。”
- 策略更新说明
- “根据最近的语言反馈‘尽量不要碰到桌上的纸张’,我在路径规划中增加了对纸张区域的避让权重。”
- 提出澄清问题
- “你希望我优先减少耗时还是优先减少能耗?”
- “‘把房间收拾干净’是否包括把桌上的书也收进书架?”
从人类一侧来看,自然语言反馈 本身也可以参与学习:
- 作为奖励模型 / 偏好模型 的训练数据,例如“刚才那条路径太靠近花瓶了”对应一个低评分,反之“这样很好,离人足够远”对应高评分。
- 作为策略改进建议,被自动映射到轨迹修正或约束调整中(参见前面提到的 comparative language feedback 与 preference learning 工作) (arXiv)。
这一方向在未来有望让机器人拥有更“人性化”的学习接口: 不是只看数字奖励和 loss 曲线,而是能听懂“老板/用户”一句抱怨或鼓励,从中调整行为策略。
4.4.4 任务层规划与语言层规划的关系
在前面的机器人学与控制章节中,我们主要讨论的是任务/运动规划: 如何在给定目标状态与环境模型的前提下,找到一条可行又优的轨迹。
而在有了大语言模型之后,出现了一个新层级:语言层规划(language-level planning)——用语言或符号步骤来规划“做什么”,再交给传统规划器和控制器决定“怎么做”。
两者的关系类似于:
人说“先买菜再做饭”,导航和操作模块决定“走哪条路、用哪只手拿菜、锅放在哪个灶眼”。
4.4.4.1 任务层规划(Task-level Planning)
任务层规划传统上指在符号状态和动作空间 上进行规划,有时也包含几何细节,典型包括:
- 经典 AI 规划(如 PDDL + 规划器)
- Task and Motion Planning(TAMP):同时考虑离散任务结构与连续运动可行性
- 运动规划与轨迹优化(RRT*, CHOMP, TrajOpt 等)
其输入通常是:
- 形式化目标(goal state / goal formula)
- 任务域模型(动作 precondition / effect)
- 几何与动力学约束(碰撞、关节限制等)
输出则是:
- 一个可执行的动作序列 或带参数的操作模板:
pick(obj=RedCup, pose=p1)place(obj=RedCup, pose=p2)- 中间插入
move_base、open_door等技能调用
这一层不关心“指令是用中文、英文还是按钮点击传达的”,它只需要结构化的目标与约束。
4.4.4.2 语言层规划(Language-level Planning)
语言层规划利用语言模型强大的世界知识与组合能力,在“符号/语言空间”内先做一轮** 高层策略推理**,其典型形式包括:
- 把自然语言指令分解为子任务序列 例如指令:“帮我准备一个早餐托盘:一杯咖啡、一片面包和一个苹果。”语言层规划可能生成的步骤:
每一步再映射为相应的机器人技能调用。
1. 去厨房找到干净的托盘
2. 把咖啡杯放到托盘左侧
3. 把面包放在托盘中间
4. 把苹果放在托盘右侧
5. 把托盘端到餐桌上
- 生成“代码式策略” Code as Policies 等工作直接让 LLM 生成控制程序,如:
def make_breakfast_tray():
tray_pose = find_object("tray")
move_arm_to(tray_pose)
# ...
这段代码中已经内含了子任务结构、条件判断和循环逻辑,语言层规划就是程序结构 本身 (arXiv)。
- 与经典规划器协同 近期大量工作探讨“LLM + 经典规划器”的组合:
- LLM 负责从自然语言抽象出符号谓词、操作子、子目标
- 把这些知识编译成 PDDL 或其他形式,交给经典规划器求解
- 规划结果再由 LLM 或规则系统转回自然语言解释或技能序列 (Nature)。
在 VLA 框架下,可以把语言层规划看成是“在 token 序列上做规划”: 模型生成一串“子任务 token / 技能 token / 子目标 token”,然后由下游模块执行。
[图片占位:上半部分为 LLM 生成的“文字/代码形式的步骤计划”,下半部分为每步映射到任务规划器和运动规划器的执行过程。]
4.4.4.3 协同作用
真正强大的机器人系统,往往不是“纯语言驱动”或者“纯经典规划”,而是两者的协同:
- 语言层:提出“可能的好计划”
- 借助大模型的常识和抽象能力,快速产生多种候选计划:
- 不同子任务顺序
- 不同工具/通道选择(从门走还是从另一侧绕行)
- 考虑用户偏好、安全需求、任务优先级等“软因素”
- 借助大模型的常识和抽象能力,快速产生多种候选计划:
- 任务层:验证“这计划在几何和安全上能不能干”
- 利用精确的几何/动力学模型、环境地图和安全约束,对候选计划进行可行性检查与优化
- 发现不可行时(如某个抓取姿态在当前场景会碰到墙),反馈给语言层更新计划
- 安全层:语言约束与形式安全的结合
- 语言层从自然语言中抽取安全规则(第 4.4.2 节),转换为形式约束
- 任务层与控制层利用这些约束进行优化与安全过滤
- 一些工作更进一步,结合 LLM 生成的安全策略与 QP/MPC 安全过滤器,构建“Safety-aware Task Planning”体系,让规划过程同时兼顾任务成功率与安全规避 (arXiv)。
- 解释与交互闭环
- 语言层可以解释 任务层的规划决策(“我选择方案 B,因为方案 A 会违反安全约束 X”)
- 人类可以通过语言修改计划或规则(“允许你临时进入这个区域,但速度必须低于 0.2 m/s”),系统再重新规划
[图片占位:三层结构图: 顶层“语言层规划(LLM)”负责解析指令、分解子任务和规则解释; 中层“任务/运动规划”负责路径和动作的具体计算; 底层“控制与执行”负责实时控制。 左侧有“人类语言输入/反馈”,右侧有“机器人执行 + 语言解释输出”。]
从长远看,可以把语言看成一种统一接口:
- 向上连接人类的任务需求、偏好与安全规范
- 向下连接机器人的传统规划、控制与感知模块
- 与多模态表示(视觉、状态、历史轨迹)共同构成具身基础模型的一部分
本节讲的是“语言的角色”;在后续章节中,你会看到这些角色如何通过具体的 VLA 架构、训练范式和系统部署,真正落地到一个能听话、会解释、守规矩、敢自主的机器人身上。