经过代码补全训练的大语言模型 (LLM) ,已被证明能够从文档字符串合成简单的 Python 程序 [1]。这些编写代码的 LLM 可以重新用于编写机器人策略代码,只需提供自然语言命令即可。具体来说,策略代码可以表达处理感知输出(例如来自目标检测器 [2]、[3])和参数化控制原语 API 的函数或反馈循环。当提供几个示例语言命令(格式化为注释)作为输入时,然后提供相应的策略代码(通过少量提示),LLM 可以接收新命令并自主重新编写 API 调用,分别生成新策略代码。通过链接经典逻辑结构并引用第三方库(例如 NumPy、Shapely)来执行算术,以这种方式使用的 LLM 可以编写机器人策略,这些策略 (i) 展示空间几何推理,(ii) 推广到新指令,以及 (iii) 根据上下文(即行为常识)为模糊描述(“更快”)指定精确值(例如速度)。
本文介绍代码即策略(CaP):一种以机器人为中心的语言模型生成程序 (LMP) 公式,可以表示反应策略(例如阻抗控制器)以及基于路径点的策略(基于视觉的拾取-和-放置、基于轨迹的控制),已在多个真实机器人平台上进行演示。核心是提示分层代码生成(递归定义未定义的函数),它可以编写更复杂的代码,还可以提高现有技术水平,以解决 HumanEval [1] 基准上 39.8% 的问题。
如图所示:通过给定示例(通过少量提示),机器人可以使用编写代码的大语言模型 (LLM) 将自然语言命令转换为机器人策略代码,该代码处理感知输出、参数化控制原语、递归生成未定义函数的代码并推广到新任务。
术语“语言模型程序(LMP)”指代由语言模型生成并在系统上执行的任何程序。这项工作研究代码即策略,这是一类 LMP,它将语言指令映射到代码片段,这些代码片段 (i) 对感知输入做出反应(即来自传感器或传感器之上的模块),(ii) 参数化控制原语 API,以及 (iii) 直接在机器人上编译和执行,例如:
输入指令被格式化为注释(绿色),可以由人类提供或由另一个 LMP 编写。LLM 的预测输出(突出显示)应为有效的 Python 代码,由自回归生成 [11],[12]。LMP 是使用示例提示的少量样本,用于生成不同的子程序,这些子程序可能处理目标检测结果、构建轨迹或序列控制原语。可以通过组合已知函数(例如,使用感知模块的 get_obj_names())或调用其他 LMP 定义未定义的函数来分层生成 LMP:
对于新的具身,这些活动函数调用,可以用表示智体动作空间(例如 set_velocity)的可用控制 API 替换。具有详细变量名的分层代码生成,可以看作是通过函数式编程进行思维链提示 [47] 的变型。LMP 定义的函数可以随时间的推移逐渐积累,其中新的 LMP 可以引用以前构建的函数来扩展策略逻辑。
要执行 LMP,首先检查它是否可以安全运行,确保没有 import 语句、以 __ 开头的特殊变量或对 exec 和 eval 的调用。然后,调用 Python 的 exec 函数,使用代码作为输入字符串和两个字典构成该代码执行的范围:(i) global 变量,包含生成的代码可能调用的所有 API,以及 (ii) local 变量,一个空字典,它将填充在 exec 期间定义的变量和新函数。如果预计 LMP 将返回一个值,会在 exec 完成后从 local 变量中获取它。
如图所示代码即策略可以遵循不同领域和机器人的自然语言指令:桌面操作 (a)-(b)、2D 形状绘制 (c) 以及在厨房中使用 Everyday Robots 机器人进行移动操作 (d)。该方法使机器人能够使用现成的模型和少量提示进行空间几何推理、解析目标关系并形成多步行为,而无需额外训练。
在机器人策略的背景下,LMP 可以根据自然语言指令编写感知到控制的反馈逻辑,其中感知模型(状态)的高级输出可以通过编程方式进行操作,并用于通知低级控制 API(操作)的参数。有关可用感知和控制 API 的先前信息可以通过示例和提示进行引导。这些 API 将 LMP “接地”到现实世界的机器人系统,感知和控制算法的改进可以直接提高基于 LMP 的策略的能力。例如,真实世界实验中,用最近开发的、现成的、开放词汇目标检测模型(如 ViLD [3] 和 MDETR [2])来获取目标位置和边框。
基于 LMP 的策略有三方面的好处:(i) 可以将策略代码和参数调整为,由未见过自然语言指令指定的新任务和行为;(ii) 可以通过引导开放词汇感知系统和/或显着性(saliency)模型推广到新目标和环境;(iii) 不需要任何额外的数据收集或模型训练。生成的规划和策略也是可解释的,因为它们以代码表示,因此可以轻松修改和重用。使用 LMP 进行高级用户交互继承了 LLM 的优势,包括使用常识知识解析富有表现力的自然语言、考虑先前的上下文、多语言功能以及参与对话。
在真实世界桌面操控实验,UR5e 机器人的任务是根据自然语言指令操控桌面上的目标。该机器人配备了吸盘夹持器,只能执行由 2D 自上而下的拾取-和-放置位置参数化的拾取-和-放置动作。机器人还需要使用提供的感知 API 回答有关场景的问题(例如,有多少个块?)。在演示中,用 Google Cloud 的语音-转-文本和文本-转-语音 API,让用户通过语音命令与系统交互,并听到机器人对命令和问题的回答。目前,提示仅支持拥有一组唯一目标。这不是 CaP 的限制,而是感知系统的限制——没有很好的方法来在 VLM 检测中保留重复目标的身份。一个更复杂的跟踪感知世界状态的系统可以解决这个问题。
移动操控实验由 Everyday Robots 的机器人在现实世界的办公室厨房中导航和与目标交互而设置。该机器人有一个移动底座和一个 7DoF 臂。为了实现感知 API,主要使用机器人上的 RGBD 相机传感器。其中的机器人如图所示。
与现实世界的桌面领域类似,构建了一个模拟桌面环境,其中配备了 Robotiq 2F85 夹爪的 UR5e 机器人会收到自然语言指令来完成重新排列任务。这些物体包括 10 个不同颜色的积木和 10 个不同颜色的碗。拟议的 CaP 提供了 API,用于通过脚本化目标检测器访问当前目标及其位置的列表,以及通过坐标或目标名称参数化的拾取-和-放置运动原语。