加拿大Sanctuary 大语言模型「基于LLM的机器人系统与控制方法解析」专利

文摘   2024-10-31 19:10   北京  

描述了一种机器人控制系统、方法、控制模块和计算机程序产品,利用一个或多个大型语言模型(LLMs)实现一定程度的自主性。机器人控制参数和/或指令可以通过自然语言(NL)指定,并通过递归的自然语言提示或查询与LLM进行通信。随后,LLM生成的相应自然语言响应可被转换为机器人控制参数和/或指令。通过这种方式,机器人控制系统可以利用LLM增强各种操作和/或功能的自主性,包括但不限于任务规划、运动规划、人机交互和/或对环境的推理。翻译而来供参考,亦可加入知识星球阅读英文原版、中文译本(见文末)

图1是一个流程图,展示了这种自动化任务规划器作为方法100的示例实现。一个大型语言模型(LLM)101(例如但不限于OpenAI™的text-davinci-003)与以下内容提供或结合使用:1)通过机器人系统的感知系统生成的当前场景描述102;2)由参数化的可复用工作原语或机器人系统可执行的指令组成的指令集描述103;3)将自然语言短语纳入提示的包装器104。此组合可以自动生成任务规划105,然后由机器人系统执行以实现自然语言输入的意图。

尽管图1将场景描述102和指令集103显示为“在”机器人内(即,在表示机器人的虚线框内),而将自然语言提示104、LLM 101和任务规划105(以及到机器人控制信号的转换)显示为“在”机器人外(即,在表示机器人的虚线框外),这并非意图限制,而只是出于说明目的。虽然在某些实现中,自然语言提示104、LLM 101和/或任务规划105(以及到机器人控制信号的转换)可能位于机器人外部(或非板载或远程位置)存储、生成、访问或存在,但在其他实现中,自然语言提示104、LLM 101和/或任务规划105(以及到机器人控制信号的转换)可以在机器人内部(或板载)存储、生成、访问或存在。

在某些实现中,基于LLM的自动化任务规划器(如图1所描述的高层级实现)可以接收或处理自然语言声明,并使用递归过程生成任务规划。例如,一个任务可以被分解为步骤,然后这些步骤可以进一步分解为指令。具体来说,可以要求LLM生成实现任务的初步计划(即,迭代1),并使用不超过NO个步骤,其中NO为任意正整数,例如5。返回这NO个步骤后(即,任务规划的第一轮迭代),然后可以要求LLM将每一步骤进一步分解为N1个步骤(其中N1为任意正整数,例如5)。这一过程可以重复多次。在每一级抽象返回的每个步骤上,可以要求LLM生成一个计划(例如“子计划”),使用不超过M个指令集元素(其中M为正整数,例如5)完成该步骤。如果找到包含M个或更少指令的计划,则该任务规划树的该“分支”完成,不需要进一步递归。此过程可以持续进行,直到任务规划的所有分支都基于指令集的基本构建模块。这种递归过程可以用来将任务规划分解为对应于机器人能够自主执行的基本操作原语的基本构建模块。

图2展示了一种方法200,它提供了上述基于递归LLM的任务规划器的示例。方法200大体上展示了机器人系统与一个LLM模块或存储在设备上的LLM协同操作的一种方法。总体而言,在本说明书和附加权利要求中,机器人系统的操作方法是指至少部分(如果不是全部)由机器人系统执行的各种操作。例如,机器人系统的操作方法的某些操作可能由与机器人系统的非易失性处理器可读存储介质(统称为机器人系统的控制器)通信连接的至少一个处理器或处理单元(以下简称“处理器”)执行。在某些实现中,机器人系统的操作方法的某些操作可能由与至少一个处理器通信连接的外围组件(如可物理执行动作的组件:手臂、腿、末端执行器、抓取器、手),一个或多个传感器(如光学传感器、音频传感器、触觉传感器、触控传感器)、移动系统(如轮子、腿)、通信和网络硬件(如接收器、发射器、收发器)等)执行。机器人系统的非易失性处理器可读存储介质可以存储数据(包括例如至少一个可复用工作原语库和至少一个相关知觉库)和/或处理器可执行指令,当由至少一个处理器执行时,使机器人系统执行该方法和/或使至少一个处理器执行该方法的那些操作。机器人系统可以通过与机器人系统的至少一个处理器通信连接的通信和网络硬件与远程系统和/或远程非易失性处理器可读存储介质进行通信。因此,除非特定上下文另有要求,否则对机器人系统的非易失性处理器可读存储介质的引用,以及存储在非易失性处理器可读存储介质中的数据和/或处理器可执行指令,不意在限制非易失性处理器可读存储介质相对于机器人系统的至少一个处理器和其他硬件的位置。换句话说,机器人系统的非易失性处理器可读存储介质可以包括位于机器人主体上的非易失性处理器可读存储介质和/或位于远程的非易失性处理器可读存储介质,除非特定上下文另有要求。此外,机器人系统的操作方法(如方法200或本文讨论的其他方法)可以作为机器人控制模块或计算机程序产品实现。这样的控制模块或计算机程序产品包含处理器可执行指令或数据,当控制模块或计算机程序产品存储在机器人系统的非易失性处理器可读存储介质上,并由机器人系统的至少一个处理器执行时,该控制模块或计算机程序产品(或其处理器可执行指令或数据)会使机器人系统执行该方法的操作。在某些实现中,这样的处理器可执行指令可以自主执行,使得机器人系统能够自主执行该方法。

回到图2,方法200如图所示包括递归/迭代过程,每个递归/迭代循环包含操作211、212、213、214和215。本领域技术人员将理解,在替代实现中,某些操作可能被省略和/或添加额外操作。本领域技术人员还将理解,所示操作顺序仅为示例,可能在其他实现中发生变化。

方法200的第一次迭代被分组为210。在该迭代210中,在操作211中,LLM模块尝试生成包含不多于阈值“M”的指令的任务计划。在此示例中,“指令”是指指令集中的指令(例如,可复用的工作原语),通常对应于机器人可以执行的动作。在操作212中,如果操作211中的任务计划生成成功,则方法进入操作213,在此处返回任务计划(例如,由LLM模块输出)。在操作212中,如果生成任务计划失败(即任务计划需要过多指令),方法进入操作214。在操作214中,LLM模块生成包含N(数量)个概念步骤的任务计划。在某些实现中,阈值M等于N步的数量,而在其他实现中,阈值M不同于N步的数量。

在操作214生成包含N个概念步骤的任务计划后,方法200进入操作215,开始递归循环的下一次迭代。具体来说,对于N步中的每一步,执行操作211和212,并根据212的结果选择执行操作213或操作214和215。在图2中,对于任务计划的第一个概念步骤N,执行操作组220。对于任务计划的第二个概念步骤N,执行操作组230。对于任务计划的第n个概念步骤N_n,执行操作组230。对于其他介于N和N_n之间的概念步骤,也可以执行相应的操作组。每个操作组(220、230或其他)包括相应的操作211、212、213、214和215(基于相应操作212的结果选择性执行)。通过这种方式,对于递归循环的第一次迭代中生成的每个步骤N,生成相应的子任务计划。在某些情况下,这可能足以完成基于指令集的任务计划,即包含机器人可执行的动作的任务计划。在其他情况下,对于在相应操作214中生成的子任务计划,该递归循环进一步执行,直到任务计划的每个分支都可以被分解为包含不超过阈值M的指令的任务计划。

以下是使用上述递归过程的LLM模块查询和响应对话的具体示例。此对话为方便起见,称为“对话1”。

对话1:

    查询1:

    桌上有白棋卒1号、白棋卒2号、黑棋卒1号、黑棋卒2号、黑棋象和两个蓝色桶,还有一个人站在我对面。我的目标是执行那个人的指示。那个人说:“把所有白色棋子放入右手边的桶,把所有黑色棋子放入左手边的桶”。基于可用的指令,我可以执行以下动作:

    1. 抓取物体

    2. 将物体放置在物体上

    3. 观察物体

    4. 切割物体

    5. 对人说“你好”

    6. 将物体放入物体中

其中“物体”应替换为桌上的适当物体。以下是我应执行的四个或更少的动作列表,以完成我的目标:

    响应1:

    我无法生成完成目标的四个或更少动作列表。

    查询2:

    生成三个或更少的概念步骤列表来完成你的目标,不限于上述动作。

    响应2:

    步骤1:将白棋子移到右手边的桶中。

    步骤2:将黑棋子移到左手边的桶中。

    查询3:

    将步骤1分解为四个或更少的上述动作,将步骤2分解为四个或更少的上述动作。

    响应3:

    对于步骤1:

    i. 抓取白棋卒1号

    ii. 将白棋卒1号放入右手边的桶中

    iii. 抓取白棋卒2号

    iv. 将白棋卒2号放入右手边的桶中

    对于步骤2,我无法生成四个或更少的动作列表。

    查询4:

    将步骤2分解为三个或更少的概念步骤,不限于上述动作。

    响应4:

    步骤A:将黑棋卒1号移到左手边的桶中。

    步骤B:将黑棋卒2号移到左手边的桶中。

    步骤C:将黑棋象移到左手边的桶中。

    查询5:

    将步骤A分解为四个或更少的上述动作,将步骤B分解为四个或更少的上述动作,并将步骤C分解为四个或更少的上述动作。

    响应5:

    对于步骤A:

    v. 抓取黑棋卒1号

    vi. 将黑棋卒1号放入左手边的桶中

    对于步骤B:

    vii. 抓取黑棋卒2号

    viii. 将黑棋卒2号放入左手边的桶中

    对于步骤C:

    ix. 抓取黑棋象

    x. 将黑棋象放入左手边的桶中

    结束

将各种响应整合成一个连贯的任务计划(将在后文中更详细讨论),生成的最终任务计划可由机器人系统执行,其中包括以下动作(或在执行时导致机器人系统执行这些动作的指令):

    i. 抓取白棋卒1号

    ii. 将白棋卒1号放入右手边的桶中

    iii. 抓取白棋卒2号

    iv. 将白棋卒2号放入右手边的桶中

    v. 抓取黑棋卒1号

    vi. 将黑棋卒1号放入左手边的桶中

    vii. 抓取黑棋卒2号

    viii. 将黑棋卒2号放入左手边的桶中

    ix. 抓取黑棋象

    x. 将黑棋象放入左手边的桶中

如果机器人系统执行了最终任务计划中指定的指令序列,则通过查询1以自然语言指定的任务将由机器人系统成功完成。在本披露中,术语“运动计划”可以替代“任务计划”。在这方面,任务计划(或运动计划)中指定的指令序列可以包括使机器人进行一系列运动或移动的指令。

图3是一个流程图,说明了一个机器人系统操作的示例方法300。图3中的方法300在某些方面与图2中的方法200类似。总体上,图3中的方法300描述了实现图2中方法200的详细实现方式。方法300是一个机器人系统的操作方法(例如,参见图7中讨论的机器人系统700),在此方面,方法200的描述完全适用于方法300,此处为简洁起见不再重复。此外,像方法300(或本文讨论的其他方法)这样的机器人系统操作方法可以实现为一个机器人控制模块或计算机程序产品。这样的控制模块或计算机程序产品包含处理器可执行的指令或数据,当控制模块或计算机程序产品存储在机器人系统的非易失处理器可读存储介质上时,并且控制模块或计算机程序产品由机器人系统的至少一个处理器执行时,控制模块或计算机程序产品(或其处理器可执行的指令或数据)会使机器人系统执行该方法的动作。在一些实现中,这些处理器可执行的指令可以自动执行,使得机器人系统能够自动执行该方法。

回到图3,如图所示,方法300包括动作302、304、306、308、310、312,和包含动作322、324、330、332、334、336、340和342的递归循环,以及动作350。技术领域内的专业人员会理解,在替代实现中可以省略某些动作和/或添加额外的动作。专业人员还会理解,所示动作的顺序仅为示例,替代实现中可能会有所不同。

上面详述的对话1展示了方法300的一个应用示例。技术领域内的专业人员会理解,方法300可以应用于更多示例。

在动作302中,捕获表示机器人系统的机器人主体环境信息的传感器数据。为此,机器人主体可以携带至少一个示例传感器来捕获传感器数据,稍后将参见图7进行讨论。在一些实现中,捕获的传感器数据可以是全面的,提供了关于机器人环境的详细且相对完整的表示(例如,机器人主体周围一定距离范围内的全视角视野,包含环境中机器人主体周围物体或特征的详细表示)。然而,这种详细的传感器数据并不是必须的。在其他实现中,传感器数据可能仅代表机器人主体环境中的一部分(例如,机器人主体图像传感器可见的有限视角)。在其他一些实现中,传感器数据可能更加有限,例如仅表示环境中的一个单一物体或特征。传感器数据表示的环境信息的具体详细程度可以根据特定应用需求确定。

在动作304中,机器人系统的至少一个处理器基于传感器数据生成环境的至少一个方面的自然语言(NL)描述。该自然语言描述在图1的102中被引用为场景描述。环境的至少一个方面的自然语言描述不需要描述传感器数据中存在的每一个特征或物体,而是可以专注于一个或多个特别相关的特征或物体。

在一个示例实现中,至少一个处理器执行一个物体或特征检测模型(例如YOLO模型的分类模块,或其他合适的模型),该模型识别环境中的物体或特征(如传感器数据所表示的),并为这些特征或物体分配文本标签。此类文本标签可以是“机器人语言”。在本说明中,“机器人语言”或类似术语指的是在机器人或程序化上下文中使用的语言,而不是人类用于相互交流的自然语言。参考前面提到的国际象棋套件示例,一个特定的国际象棋兵可能在机器人语言中被标识为“chess_pawn_54677”。这是机器人语言的一个示例,其中使用了下划线而非空格,并且棋兵的数值标识远高于人类在正常上下文中使用的数字。

尽管如此,机器人语言和人类语言之间存在一些有用的共性(尤其是常用词汇)。在“chess_pawn_54677”的例子中,“chess”和“pawn”这两个词同样用于人类自然语言中。为了生成环境中至少一个方面的自然语言描述,至少一个处理器可以执行文本字符串匹配模块,该模块将机器人语言文本标签中的文本匹配到自然语言词汇。例如,“chess_pawn_54677”的自然语言描述可以生成为“chess pawn 1”。此外,环境中的识别物体或特征也可以关联元数据,这些元数据可以用于生成环境的自然语言描述。例如,标签“chess_pawn_54677”可以关联指示棋兵颜色(通常为“白”或“黑”)的元数据。至少一个处理器可以使用这些元数据生成“chess_pawn_54677”的自然语言描述为“white chess pawn 1”。然而,包含元数据并不是必需的。例如,标签也可以直接指示这些信息(例如“white_chess_pawn_54677”)。

还可以生成环境中其他方面的额外自然语言(NL)描述。参考上面讨论的示例提示,为多个不同的棋子、垃圾桶、人和桌子生成了自然语言描述。这些自然语言描述可以以类似的方式生成。

此外,生成环境的自然语言描述不一定仅限于描述环境中的物体或特征。在一些实现中,还可以描述这些物体或特征的位置或摆放方式。参考上面讨论的D对话 1中的提问 1,这句话:“有白色棋子1号,白色棋子2号,黑色棋子1号,黑色棋子2号,一个黑色象棋和两个蓝色的垃圾桶在桌子上,一个人站在我对面。”描述了环境中的多个物体及其位置。至少一个处理器可以通过,例如填充模板描述物体列表,以生成这样的自然语言描述。

在动作306中,向大语言模型(LLM)模块提供第一个自然语言查询。在一些实现中,LLM模块是存储在系统的至少一个非易失性处理器可读存储介质上的软件或数据模块(可以在机器人主体或远程机器人控制器上)。在这样的实现中,机器人系统的至少一个处理器可以准备并将第一个自然语言查询作为输入提供给LLM模块。在其他实现中,LLM模块可以是存储在独立设备的非易失性处理器可读存储介质上的软件或数据模块。在又一些实现中,LLM模块可以指硬件模块,该硬件模块接收输入提示并在输入上执行LLM模块。在这些实现中,机器人系统的至少一个处理器可以准备第一个自然语言查询,并通过机器人系统的通信接口将其提供到LLM模块所在的设备。例如,LLM模块可以存储在远程服务器上,并通过网站、表单或适当的API接受提示或查询作为输入。机器人系统的至少一个处理器可以将第一个自然语言查询准备成适当的格式,并通过机器人系统的通信接口发送该查询。

提供给LLM模块的第一个自然语言查询包含在动作304中生成的至少一个方面的环境自然语言描述。此外,第一个自然语言查询包含一个工作目标的自然语言描述、一个指令集的自然语言描述(包括机器人系统可选择执行的多个指令)、一个与指令集指令顺序对应的任务计划的自然语言请求,以及一个任务计划指令阈值的自然语言指示,用于设定指令顺序中的最大指令数。每个自然语言描述将在下文中详细说明。前面讨论的话 1中的提问 1是方法300的动作306中的第一个自然语言查询的示例。

如前所述,工作目标通常指具有特定目标和可确定结果的任务、工作、分配或应用。这样的工作目标的自然语言描述是以人类自然的格式表达的工作目标。参考前面讨论的 1, 1中包含短语“我的目标是完成这个人说的事情。”这本身可以被视为工作目标的自然语言描述,但进一步的输入提供了机器人系统应完成的具体目标。在该示例中, 1还包括短语“这个人说‘把所有白色棋子放在右边的垃圾桶里,把所有黑色棋子放在左边的垃圾桶里’。”这也可以被视为工作目标的自然语言描述,并提供了机器人系统预期执行的具体任务。在一些实现中,工作目标的自然语言描述包括了这两个短语的完整内容“我的目标是完成这个人说的事情。这个人说‘把所有白色棋子放在右边的垃圾桶里,把所有黑色棋子放在左边的垃圾桶里’。”

工作目标的自然语言描述可以基于各种信息或数据。在一些实现中,工作目标的指示可以明确提供给机器人系统(例如,从管理设备或服务器发送到机器人系统,或存储在机器人系统的至少一个非易失性处理器可读存储介质上)。工作目标的指示可以以自然语言格式提供给机器人系统,这样至少一个处理器只需访问工作目标的指示并将其提供给LLM模块。在这种情况下,机器人系统的至少一个处理器不必生成工作目标的自然语言描述,而是可以提供已有的工作目标的自然语言描述给LLM模块。或者,工作目标的指示可能不是自然语言格式(例如,可能是机器人语言格式),机器人系统的至少一个处理器可以基于工作目标的指示生成工作目标的自然语言描述(例如,通过执行机器人语言转换模块,如与后面讨论的文本字符串匹配模块类似)。在其他实现中,机器人系统的至少一个处理器可以基于其他信息生成工作目标的自然语言描述,例如机器人部署的角色。在这种情况下,“角色”通常指的是机器人在相关环境中可以执行的一类任务。例如,清洁机器人可以担任清洁某个区域或设施的角色。在这种情况下,参考前面的国际象棋套件整理示例,至少一个处理器可以生成工作目标的自然语言描述,如“清理散落的棋子并放入适当的垃圾桶中”。

可以基于任何适当的额外信息生成工作目标的自然语言描述。在另一个例子中,在生成工作目标的自然语言描述时,可以考虑机器人系统的能力。例如,如果机器人主体缺乏运动功能,只能完成其周围区域的工作目标。

如前所述,机器人系统可执行的指令集可以是可复用的工作原语库,例如“抓取物体”、“将物体放在物体上”或其他适当的操作。这些操作(或指令)可以由机器人系统选择性执行(即,可以选择并独立于其他指令执行给定的指令或操作)。这些示例以自然语言形式呈现,但可以以机器人语言形式存储和访问,例如“grasp(object)”或“place(object1, object2)”(作为非限制性示例)。在前面讨论的 1中的 1示例中,“选项”1、2、3、4、5和6代表了机器人系统可执行指令集的自然语言描述。 1的示例还包含限定语句“我可以基于可用指令执行以下操作:”和“应将‘物体’替换为桌面上的适当物体。”,这些语句向LLM模块提供了关于如何解释、使用或应用指令集自然语言描述的额外信息。这些限定语句可以根据给定应用和指令集的需求添加、删除或修改。进一步可以将这些限定语句包含在自然语言查询中,例如通过包含在自然语言查询所基于的模板中,稍后将详细讨论。

在一些实现中,指令集的自然语言描述可以预生成并加载到机器人系统中,使机器人系统能够在动作306中将该预生成的指令集自然语言描述提供给LLM模块。例如,管理设备、服务器或配置设备可以生成指令集的自然语言描述,并将其存储在机器人系统的非易失性处理器可读存储介质上,以便后续访问(例如,在机器人系统配置或部署过程中)。作为具体示例,可复用的工作原语“place(object1, object2)”可以与该工作原语的自然语言描述“将物体放在物体上”的元数据一起存储。这样的指令自然语言描述可以由人类手动提供,也可以由至少一个处理器生成(并可能由人类审查和/或修改以确保准确性)。

在一些实现中,机器人系统可以生成指令集的自然语言描述。无论指令集自然语言描述的生成位置(在生成由至少一个处理器完成的示例中),执行生成的至少一个处理器可以执行机器人语言转换模块,该模块根据指令集中的指令所表达的机器人语言生成每个指令的自然语言描述。与前面讨论的类似,这样的机器人语言转换模块可以包含一个文本字符串匹配模块,该模块可比较指令集中的机器人语言指令与代表机器人系统可执行动作的自然语言词汇。匹配的文本字符串可以识别并包含在指令集的自然语言描述中。例如,对于指令“grasp(object)”,文本字符串匹配模块可以识别“grasp”和“object”与自然语言词汇相对应。此外,至少一个处理器可以基于程序化功能的一般结构推断该指令的目的是让机器人“抓取”输入的“物体”。为此,可以为该指令生成自然语言描述“抓取物体”。再如,对于指令“place(object1, object2)”,文本字符串匹配模块可以识别“place”和“object”与自然语言词汇相对应。此外,至少一个处理器可以基于程序化功能的一般结构推断该指令的目的是让机器人将输入“object1”放在输入“object2”上。为此,可以为该指令生成自然语言描述“将物体放在物体上”。

与指令集中的指令序列对应的任务计划自然语言请求通常指的是一句话或短语,旨在告知LLM模块如何处理自然语言查询中的其他信息。参考 1的示例, 1包含短语“以下是我应执行的四个或更少的操作,以完成我的目标:”。在该示例中,这句话的目的是告知LLM模块,它应从指令集中生成一个操作列表,以完成指定的目标(即前面讨论的工作目标)。任务计划的自然语言请求可以由机器人系统的至少一个处理器基于请求模板生成。另一个例子是,自然语言请求可以包含在用于结构化或格式化自然语言查询的自然语言查询模板中,如下所述。此外, 1中的短语“以下是我应执行的四个或更少的操作,以完成我的目标”也包含了任务计划指令阈值的自然语言指示,以设定指令序列中的最大指令数,因为该短语指示列表应包含四个或更少的操作(或指令)。在该示例中,任务计划指令阈值是四个操作(或指令),但对于不同应用,任何适当的任务计划指令阈值大小都可以实现。方法300中的任务计划指令阈值对应于图2中方法200的“M”。

在一些实现中,机器人系统的至少一个非易失性处理器可读存储介质中存储了至少一个预生成的自然语言模板。这样的自然语言模板可以包含以下任何或所有方面的模板:环境的至少一个方面的自然语言描述、工作目标的自然语言描述、指令集的自然语言描述、任务计划的自然语言请求和/或任务计划指令阈值的自然语言指示。下面将讨论一个示例模板,参考在 1中围棋棋子整理示例中生成的 1。然而,不同场景中可以使用其他示例模板来生成不同的自然语言查询。以下非限制性示例自然语言模板可能为:

“有[object_array_1]在[position_1][()(和)][object_array_2]在[position_2]…[和][object_array_j]在[position_j]。我的目标是[work_objective]。我可以基于可用指令执行以下操作:

1.) [reusable_work_primitive_1(变量)]|

k.) [reusable_work primitive_k(变量)]|

其中,[变量]应替换为[position_1]…[position_j]处的适当物体。以下是我应执行的[M]个或更少的上述操作,以完成我的目标:”

在上面的模板中,方括号中的元素可以由至少一个处理器插入适当的自然语言描述来填充。特别是,object_array_1代表position_1处的至少一个物体数组(例如,桌子上的棋子数组)。在该示例中,至少一个处理器可以将文本[object_array_1]替换为棋子的自然语言描述,将文本[position_1]替换为桌子的自然语言描述。进一步在示例中,object_array_2代表一个站在机器人主体对面的position_2处的人。在该示例中,至少一个处理器可以将文本[object_array_2]替换为人的自然语言描述,将文本[position_2]替换为人的位置描述。此外,从文本[(,)(和)]中,至少一个处理器可以选择“,”或“和”来自然地连接object_array_1和object_array_2的文本(基于是否存在object_array_3)。在示例中,没有其他物体数组(无object_array_3或object_array_j),因此至少一个处理器选择连接文本“和”。此外,因为没有其他物体数组,至少一个处理器删除或忽略(例如替换为空文本)文本“[object_array_j]在[position_j]”。另外,[M]可以填充为任务计划指令阈值的数字。

经过上述步骤后,基于模板生成的第一个自然语言查询的第一句可以是“有白色棋子1号、白色棋子2号、黑色棋子1号、黑色棋子2号、一个黑色象棋和两个蓝色垃圾桶在桌子上,对面站着一个人。”这与前面讨论的 1示例类似,但将棋子描述为“在桌子上”而非“在桌面上”。为了改善自然语言查询的生成,模板可以包含“在”或“上”之类的过渡或位置词选项,以便至少一个处理器可以选择最适合场景的词。

回到上述模板,至少一个处理器可以将文本[work_objective]替换为机器人系统的工作目标的自然语言描述。在该示例中,至少一个处理器可以替换文本[work_objective],使得第一个自然语言查询的第二句话为“我的目标是完成这个人说的事情。这个人说‘把所有白色棋子放在右手边的垃圾桶里,把所有黑色棋子放在左手边的垃圾桶里’。”,与前面讨论的 1中的 1示例相似。

此外,至少一个处理器可以将可用指令“1.)[reusable_work_primitive_l(变量)]…k.)[reusable_work primitive_k(变量)]”的文本替换为每个可用复用工作原语的自然语言描述。在示例场景中,可用指令的文本可以替换为“1.)抓取物体”、“2.)将物体放置在物体上”、“3.)查看物体”、“4.)切割物体”、“5.)向人问好”和“6.)将物体放入物体中”,如前面讨论的 1示例。

在该示例中,每个可复用工作原语的“变量”会被替换为“物体”或“人”的适当文本,具体取决于给定的工作原语适用于什么。此外,模板倒数第二句中的文本[variable]和[position_1]…[position_j]也会被替换为“物体”及物体的相关位置的适当文本。在这种情况下,生成的自然语言查询的倒数第二句为“物体应替换为桌子上的适当物体”,如前面在 1中展示的 1示例中所示。

综合以上,通过在预生成的模板中替换或输入选定的元素,可以生成适合提供给LLM模块的第一个自然语言查询。

虽然上文描述了自然语言模板是文本,某些元素被“替换”或“输入”,但在实现上这并非绝对必要。例如,替代“替换”文字的字面意义,自然语言模板也可以实现为一组指令或功能(例如程序或脚本),分步拼接基础句子与相关元素。在这种示例中,第一个自然语言查询是作为片段“组装”而成,而不是字面上“替换”元素。从这个意义上讲,所提供的自然语言模板旨在成为元素如何拼接的逻辑表示,而不是实际生成文本的严格过程。

回到图3中的方法300,如果LLM模块成功生成了包含指令数不超过任务计划指令阈值的任务计划,则机器人系统将从LLM模块接收该任务计划。也就是说,在306向LLM模块提供第一个自然语言查询后,LLM模块会生成任务计划(用自然语言表达),并将生成的任务计划提供给机器人系统。

另一方面,如果LLM模块未能生成包含指令数不超过任务计划指令阈值的任务计划,则在308,机器人系统会接收到来自LLM模块的指示,表明生成包含指令数不超过任务计划指令阈值的任务计划失败。也就是说,在306向LLM模块提供第一个自然语言查询后,LLM模块根据提供的参数尝试生成任务计划,失败后在308返回此类失败的指示。在前面讨论的 1中,响应 1就是这种指示,表明“我无法生成四个或更少的操作以完成我的目标”。

在310,机器人系统向LLM模块提供第二个自然语言查询。第二个自然语言查询包括一个请求,要求提供一个不超过任务计划步骤阈值的概念步骤集的任务计划。第一个自然语言查询和第二个自然语言查询之间有几个重要区别。

首先,第二个自然语言查询请求的是“概念步骤”,而第一个自然语言查询请求的是“指令”或“动作”。请注意,第一个和第二个查询不需要使用此字面语言,而只需符合获取概念步骤或指令的总体目标。“指令”指的是机器人系统可执行的具体操作,对应于指令集中指定的内容(例如可复用的工作原语)。即使指令是由LLM以自然语言表达的,它们应易于转换为机器人语言(或机器人系统可以直接使用自然语言)以促使机器人系统相对直接地执行指定的指令。而“概念步骤”更广泛地指向完成工作目标的操作,即使没有具体到机器人系统可直接执行的操作或指令的详细程度。

其次,第一个自然语言查询表示任务计划指令阈值的最大指令数(图2中的M),而第二个自然语言查询表示任务计划步骤阈值的最大步骤数(图2中的N)。在某些实现中,任务计划指令阈值和任务计划步骤阈值可能相等,而在其他实现中则可能不相等。

第三,第一个自然语言查询指定的信息比第二个自然语言查询所需的更多(例如环境的自然语言描述、工作目标的自然语言描述和指令集的自然语言描述)。虽然第二个自然语言查询可以指定这些信息,但这并非绝对必要。因为与LLM的交互可以构建为对话或“聊天”,因此LLM会保留前一次查询中的信息。因此,第一个自然语言查询中提供的信息在第二个自然语言查询时依然可用。

在上文讨论的 1中, 2展示了符合动作310的第二个自然语言查询示例。特别是, 2写道:“生成不超过三个概念步骤的列表,以完成您的目标,不限于上述操作。”在此示例中,任务计划步骤阈值为3,但可以根据不同应用需求设定不同阈值。此示例还展示了任务计划指令阈值(4)不等于任务计划步骤阈值(3)的情况。也就是说,对于图2的上下文中的该示例,M=4且N=3。

在312,机器人系统从LLM模块接收到任务计划,以自然语言表示为一组概念步骤。在上文讨论的 1中,响应 2展示了符合动作312的任务计划。特别是,任务计划被表示为两个高层次步骤:将白色棋子移到右边的垃圾桶,将黑色棋子移到左边的垃圾桶。

在320,多个子动作322、324、332、334、336和342被分组为一个递归循环,对每个概念步骤执行(包括在递归循环中生成的新概念步骤),直到任务计划仅包含在指令集中指定的指令(即任务计划中不再包含概念步骤)。

在322,向LLM模块提供各个自然语言分解查询。各个自然语言分解查询包含一个自然语言请求,要求将任务计划的概念步骤分解为来自指令集的多个指令。参考前面讨论的 1, 3是符合子动作322的各个自然语言分解查询的示例。特别是, 3写道:“将步骤1分解为四个或更少的上述操作”,这是对312接收到的步骤1的自然语言分解查询。在示例中, 3还写道“将步骤2分解为四个或更少的上述操作”,这是对312接收到的步骤2的自然语言分解查询。在此情况下,虽然在单一查询中打包了多个分解查询,但对每个在312接收到的概念步骤提供了各个自然语言分解查询。在替代实现中,各个分解查询可以单独作为独立查询打包,并分别提供给LLM。此外,在示例中,分解查询包含任务计划指令阈值的指示(四个或更少的上述操作),但这并非绝对必要。在一些实现中,可以在第一个自然语言查询中引用提供的任务计划指令阈值(在各个分解查询中,和/或由LLM模块在生成分解查询响应时引用)。

LLM接收各个自然语言分解查询(或多个自然语言分解查询)并生成响应。在324,机器人系统接收该响应。该响应包含来自LLM模块的指示,表明生成不超过任务计划指令阈值的多个指令失败(在方法300中显示为330),或来自LLM模块的多个指令的自然语言描述(在方法300中显示为340)。

在前面讨论的 1中, 3对应于在324接收到的响应。此外,由于示例中的 3包含两个各自的自然语言分解查询, 3包含了对各个自然语言分解查询的两个不同响应。特别是, 3将步骤1分解为四个不同指令的自然语言描述(i、ii、iii和iv),符合方法300中的动作340。在342,将多个指令(i、ii、iii和iv)整合到任务计划中。关于将指令整合到任务计划中的示例将在后文讨论。

进一步而言, 3包含一个指示,表明生成步骤2的多个指令未能满足任务计划指令阈值的要求,这符合方法300中的330(“对于步骤2,我无法生成不超过四个操作的列表”)。在330接收到该指示后,方法300继续执行到332。

在332,向LLM模块提供了进一步的自然语言分解查询。进一步的自然语言分解查询包含一个请求,要求将概念步骤进一步分解为不超过任务计划步骤阈值的多个概念步骤。在前面讨论的 1中, 4对应于进一步的自然语言分解查询,内容为“将步骤2分解为不超过三个概念步骤的列表,不限于上述操作”。在该示例中,进一步的自然语言分解查询明确表示了任务计划步骤阈值,但这并非绝对必要。在某些实现中,LLM可以访问先前在动作310中提供的任务计划步骤阈值(例如,在聊天记录中)。

在332提供进一步的自然语言分解查询后,LLM模块生成了进一步的概念步骤集。机器人系统在334接收了这些进一步的概念步骤集。在前面讨论的 1中, 4对应于进一步的概念步骤集,特别地将步骤2分解为步骤A、B和C。注意,不同步骤和指令标签(例如,步骤编号、指令罗马数字和步骤字母)的使用仅是为了方便讨论,以明确具体引用了哪些步骤或指令。可以根据具体应用需要使用任何适当的标签。

在336,进一步的概念步骤被整合到任务计划中。关于将步骤整合到任务计划中的示例将在后文讨论。

动作320(递归循环)再次对任务计划中的剩余概念步骤执行(包括在334接收的进一步概念步骤并在336整合到任务计划中的部分)。

再次在322,对每个概念步骤向LLM提供各个自然语言分解查询。在 1的示例中, 5对应于该迭代的各个自然语言分解查询。特别是, 5包含各个语句,将步骤A、步骤B和步骤C分别分解为不超过四个操作的列表。

再次在324,对于每个各自的分解查询,机器人系统接收来自LLM模块的响应,该响应要么表明生成的多个指令未能满足任务计划指令阈值(如在330中显示),要么为来自LLM模块的对应于各个步骤的多个指令的自然语言描述(如在340中显示)。在 1的示例中, 5对应于在324接收到的响应。在 5中,分别接收到与步骤A(指令v和vi)、步骤B(指令vii和viii)以及步骤C(指令ix和x)对应的多个指令的自然语言描述。方法300然后继续到342,在此将340中接收到的多个指令( 5中的指令)整合到任务计划中。将指令整合到任务计划中的示例将在后文讨论。一旦任务计划仅包含指令集中的指令(即所有概念步骤已解析为指令),则320的递归循环完成,方法300继续到350。

在350,机器人系统执行任务计划。例如,机器人控制器的至少一个处理器可以促使至少一个元素(例如,可操作的元素)执行任务计划中指定的任何操作(通过指令)。

如上所述,LLM模块提供的任务计划以自然语言表示。例如,任务计划可以指示至少一个机器人系统可执行的操作(或至少一个指令),以自然语言表示。为了使机器人系统执行任务计划,至少一个处理器可以首先基于自然语言表达的任务计划生成机器人语言的任务计划。在此实现中,执行任务计划的350动作包括执行机器人语言的任务计划。机器人语言的任务计划可以包含一组机器人控制指令,当由至少一个处理器执行时,会使机器人系统执行任务计划中指示的至少一个操作(或执行至少一个指令)。例如,机器人控制指令集可以包含机器人系统可执行的至少一个可复用的工作原语。此外,以自然语言表达的任务计划中指示的至少一个操作可以包含特定可复用工作原语的自然语言描述(例如,抓取国际象棋兵1),而机器人语言的任务计划中的机器人控制指令可以包含自然语言任务计划中的操作(指令),但以机器人系统可使用的语言格式指定(例如,grasp(chess_pawn_54677))。

类似于前面描述的,生成机器人语言的任务计划可以包括执行一个机器人语言转换模块,该模块将以自然语言表达的机器人系统可执行的至少一个操作转换为机器人系统可执行的指令集中的至少一个可复用工作原语(指令)。参考其中自然语言任务计划包含一个以自然语言表达的操作“抓取国际象棋兵1”的示例,机器人语言转换模块可以将自然语言中操作的文本字符串与机器人系统可用的可复用工作原语(指令)中的文本字符串匹配(例如grasp(object)),或匹配机器人系统可以交互的环境中的物体(例如chess_pawn_54677)。因此,至少一个处理器可以生成机器人语言指令,例如grasp(chess_pawn_54677)。

在方法300的背景下,机器人系统可以存储一个可编辑的任务计划(例如,存储在后面将参考图7讨论的非易失性处理器可读介质740上),并在方法300的过程中不断更新。具体而言,可以存储包含在312接收到的概念步骤的初始任务计划,并在320的多次迭代中编辑该初始任务计划,直到获得最终任务计划(仅包含指令集中的指令)。参考上文中的 1示例,进行存储和更新任务计划:

在接收到 2后,存储的初始任务计划包括:

    步骤1. 将白色棋子移到右手边的垃圾桶。

    步骤2. 将黑色棋子移到左手边的垃圾桶。

在接收到 3后,将在340接收到的与步骤1对应的自然语言指令列表(步骤1的分解指令)整合到任务计划中。在此示例中,将与步骤1对应的指令列表整合到任务计划中即是用指令列表替换步骤1。因此,任务计划更新为:

    i. 抓取白色棋子1号

    ii. 将白色棋子1号放入右手边的垃圾桶

    iii. 抓取白色棋子2号

    iv. 将白色棋子2号放入右手边的垃圾桶

    步骤2. 将黑色棋子移到左手边的垃圾桶。

在接收到 4后,将在334接收到的与步骤2对应的进一步概念步骤集整合到任务计划中。在此示例中,将与步骤2对应的进一步概念步骤集整合到任务计划中即是用进一步的概念步骤集替换步骤2。因此,任务计划更新为:

    i. 抓取白色棋子1号

    ii. 将白色棋子1号放入右手边的垃圾桶

    iii. 抓取白色棋子2号

    iv. 将白色棋子2号放入右手边的垃圾桶

        A. 将黑色棋子1号移到左手边的垃圾桶。

        B. 将黑色棋子2号移到左手边的垃圾桶。

        C. 将黑色象棋移到左手边的垃圾桶。

在接收到R 5后,将在340接收到的分别对应于步骤A、步骤B和步骤C的自然语言指令列表整合到任务计划中。在此示例中,将与步骤A对应的指令列表整合到任务计划中即是用相应的指令列表替换步骤A;将与步骤B对应的指令列表整合到任务计划中即是用相应的指令列表替换步骤B;将与步骤C对应的指令列表整合到任务计划中即是用相应的指令列表替换步骤C。因此,任务计划更新为:

    i. 抓取白色棋子1号

    ii. 将白色棋子1号放入右手边的垃圾桶

    iii. 抓取白色棋子2号

    iv. 将白色棋子2号放入右手边的垃圾桶

    v. 抓取黑色棋子1号

    vi. 将黑色棋子1号放入左手边的垃圾桶

    vii. 抓取黑色棋子2号

    viii. 将黑色棋子2号放入左手边的垃圾桶

    ix. 抓取黑色象棋

    x. 将黑色象棋放入左手边的垃圾桶

尽管方法300是基于 1中的示例进行说明的,但方法300适用于任何合适的场景和自然语言查询。除了图3中的方法300和上述 1的示例外,还可能存在其他递归生成任务计划的实现。以下是使用递归过程的与LLM模块的查询和响应对话的具体示例,该对话在后文中将参考图4进行讨论。为方便起见,此对话被称为 2。

     2:

     1:

桌子上有白色棋子1号、白色棋子2号、黑色棋子1号、黑色棋子2号、一个黑色象棋和两个蓝色垃圾桶,有一个人站在我对面。我的目标是完成这个人说的事情。这个人说:“把所有白色棋子放入右手边的垃圾桶,把所有黑色棋子放入左手边的垃圾桶。”我可以根据可用指令执行以下操作:

    1.) 抓取物体

    2.) 将物体放置在物体上

    3.) 查看物体

    4.) 切割物体

    5.) 向人问好

    6.) 将物体放入物体中

其中,物体应替换为桌子上的适当物体。以下是我应执行的三个或更少的步骤以完成我的目标:

     1:

    步骤1. 将白色棋子移到右手边的垃圾桶。

    步骤2. 将黑色棋子移到左手边的垃圾桶。

     2:

将步骤1分解为不超过三个步骤的列表,并将步骤2分解为不超过三个步骤的列表。

     2:

    对于步骤1:

    步骤A. 将白色棋子1号移到右手边的垃圾桶

    步骤B. 将白色棋子2号移到右手边的垃圾桶

    对于步骤2:

    步骤C. 将黑色棋子1号移到左手边的垃圾桶。

    步骤D. 将黑色棋子2号移到左手边的垃圾桶。

    步骤E. 将黑色象棋移到左手边的垃圾桶。

     3:

将步骤A分解为不超过三个步骤的列表,将步骤B分解为不超过三个步骤的列表,将步骤C分解为不超过三个步骤的列表,将步骤D分解为不超过三个步骤的列表,将步骤E分解为不超过三个步骤的列表。

     3:

对于步骤A:

    i. 抓取白色棋子1号

    ii. 将白色棋子1号放入右手边的垃圾桶

对于步骤B:

    iii. 抓取白色棋子2号

    iv. 将白色棋子2号放入右手边的垃圾桶

对于步骤C:

    v. 抓取黑色棋子1号

    vi. 将黑色棋子1号放入左手边的垃圾桶

对于步骤D:

    vii. 抓取黑色棋子2号

    viii. 将黑色棋子2号放入左手边的垃圾桶

对于步骤E:

    ix. 抓取黑色象棋

    x. 将黑色象棋放入左手边的垃圾桶

结束

将各种响应整合成连贯的任务计划(例如,通过用生成的组成步骤替换原步骤),最终得到机器人系统可执行的最终任务计划,其中包含以下动作(或指令):

    i. 抓取白色棋子1号

    ii. 将白色棋子1号放入右手边的垃圾桶

    iii. 抓取白色棋子2号

    iv. 将白色棋子2号放入右手边的垃圾桶

    v. 抓取黑色棋子1号

    vi. 将黑色棋子1号放入左手边的垃圾桶

    vii. 抓取黑色棋子2号

    viii. 将黑色棋子2号放入左手边的垃圾桶

    ix. 抓取黑色象棋

    x. 将黑色象棋放入左手边的垃圾桶

如果机器人系统执行最终任务计划中指定的指令序列,那么机器人系统将成功完成 1中用自然语言指定的任务。如前所述,任务计划(运动计划)中指定的指令序列可以包括促使机器人进行一系列动作或移动的指令。

图4是一个流程图,说明了机器人系统的一个示例操作方法400。图4中的方法400在某些方面与图2中的方法200和图3中的方法300类似。总体上,图4中的方法400描述了实现图2中方法200的详细实现方式。方法400是一个机器人系统的操作方法(例如,参考图7讨论的机器人系统700),在此方面,方法200的描述完全适用于方法400,为简洁起见,此处不再重复。此外,像方法400(或本文讨论的其他方法)这样的机器人系统操作方法可以实现为机器人控制模块或计算机程序产品。这样的控制模块或计算机程序产品包含处理器可执行的指令或数据,当控制模块或计算机程序产品存储在机器人系统的非易失性处理器可读存储介质上,并由机器人系统的至少一个处理器执行时,该控制模块或计算机程序产品(或其处理器可执行的指令或数据)会使机器人系统执行该方法的动作。在一些实现中,这些处理器可执行的指令可以自动执行,使得机器人系统能够自动执行该方法。

回到图4,如图所示,方法400包括动作402、404、406、412、414,以及包含动作422、424和426的递归循环420、动作430和动作450。技术领域内的专业人员会理解,在替代实现中可以省略某些动作和/或添加额外的动作。专业人员还会理解,所示的动作顺序仅为示例,在替代实现中可能会有所不同。

上述的对话 2展示了方法400的一个应用示例。技术领域内的专业人员会理解,方法400可以应用于更多的示例。

在动作402中,捕获表示机器人系统的机器人主体环境信息的传感器数据。方法400中的动作402与方法300中的动作302相似。动作302的描述完全适用于动作402,此处为简洁起见不再重复。

在动作404中,机器人系统的至少一个处理器基于传感器数据生成环境的至少一个方面的自然语言(NL)描述。方法400中的动作404与方法300中的动作304相似。动作304的描述完全适用于动作404,此处为简洁起见不再重复。

在动作406中,向大语言模型(LLM)模块提供第一个自然语言查询。方法400中的动作406与方法300中的动作306相似,提供给LLM模块的第一个自然语言查询亦然。除非上下文另有要求,否则动作306及LLM模块的描述完全适用于动作406,此处为简洁起见不再重复。在之前讨论的对话 2中,提问 1是方法400的动作406中第一个自然语言查询的示例。

在406向LLM模块提供的第一个自然语言查询包括在404中生成的环境的至少一个方面的自然语言描述。此外,第一个自然语言查询包括工作目标的自然语言描述、包含多个机器人系统可选择执行的指令的指令集的自然语言描述、任务计划的自然语言请求以及任务计划步骤阈值的自然语言指示,用于设定任务计划中的最大步骤数。工作目标的自然语言描述和指令集的自然语言描述(包括其生成)在前面参考方法300中的动作306进行了讨论;此讨论完全适用于此处,为简洁起见不再重复。

任务计划的自然语言请求通常指的是一句话或短语,旨在告知LLM模块如何处理自然语言查询中的其他信息。参考对话 2的示例,提问 1包含短语“以下是我应执行的三个或更少的步骤,以完成我的目标:”。在示例中,这句话的目的是告知LLM模块它应生成一个步骤列表,以实现所述目标(如前面讨论的工作目标)。重要的是,在方法400的背景下,“步骤”的范围足够广泛,可以包含对应于指令集中特定或单一指令的步骤。此外,方法400中的“步骤”范围也足够广泛,可以包含前面讨论的“概念步骤”,即不一定对应于指令集中特定或单一指令的步骤。

任务计划的自然语言请求可以由机器人系统的至少一个处理器基于请求模板生成。此类模板在前面参考方法300中的动作306进行了讨论;此讨论完全适用于此处,为简洁起见不再重复。此外,提问 1中的短语“以下是我应执行的三个或更少的步骤,以完成我的目标”也包含了任务计划步骤阈值的自然语言指示,用于设定任务计划中的最大步骤数,因为该短语指示列表应包含三个或更少的步骤。在此示例中,任务计划步骤阈值为三步,但可根据不同应用需求实现任何适当大小的任务计划步骤阈值。

回到图4中的方法400,机器人系统在动作412中从LLM模块接收任务计划。也就是说,在406向LLM模块提供第一个自然语言查询后,LLM模块生成任务计划(以自然语言表示),并将生成的任务计划提供给机器人系统。在上文讨论的对话 2中,响应 1展示了符合动作412的任务计划。特别地,该任务计划表示为将白色棋子移到右手边的垃圾桶和将黑色棋子移到左手边的垃圾桶这两个概念步骤。

在414中,至少一个处理器可选择性地确定任务计划中的每个步骤是否对应于指令集中的单一指令。例如,至少一个处理器可以分析从LLM模块接收到的任务计划,例如通过尝试将任务计划中的每个步骤与指令集中的指令匹配,以识别是否有步骤不对应于单一指令。

动作414是可选的,因为在某些实现中,LLM模块提供的任务计划可能包含明确的指示,指明哪些步骤确实(或不)对应于指令集中的单一指令。

在420,多个子动作422、424和426被分组为一个递归循环,对任务计划中不对应于指令集中的单一指令的每个步骤执行,直到任务计划中的每个步骤都对应于指令集中的单一指令。

在422,向LLM模块提供了各个自然语言分解查询。各个自然语言分解查询包含一个自然语言请求,要求将任务计划的步骤分解为多个组成步骤。在整个说明书中,多个组成步骤也可以称为组成计划。参考之前讨论的对话 2,提问 2是符合子动作422的各个自然语言分解查询的示例。特别是,提问 2写道“将步骤1分解为不超过三个步骤的列表”,这是对在412接收到的步骤1的自然语言分解查询。在该示例中,提问 2还写道“将步骤2分解为不超过三个步骤的列表”,这是对在412接收到的步骤2的自然语言分解查询。在此情况下,虽然在单一查询中打包了多个分解查询,但对每个在412接收到的概念步骤提供了各个自然语言分解查询。在替代实现中,各个分解查询可以单独作为独立查询打包,并分别提供给LLM。此外,在示例中,分解查询包含任务计划步骤阈值的指示(不超过三个步骤),但这并非绝对必要。在某些实现中,可以在第一个自然语言查询中引用提供的任务计划步骤阈值(在各个分解查询中,和/或由LLM模块在生成分解查询响应时引用)。

在某些实现中,422中提供的各个分解查询可以包含组成计划步骤阈值的自然语言指示(表示组成步骤或组成计划中的最大步骤数的阈值)。该组成计划步骤阈值可以与在406提供的第一个自然语言查询中的任务计划步骤阈值相同。或者,组成计划步骤阈值可以不同于在406提供的第一个自然语言查询中的任务计划步骤阈值。如果在自然语言分解查询中包含了这样的组成计划步骤阈值,则在424接收到的多个组成步骤(也称为前面提到的组成计划)被限制为其步骤数不超过组成计划步骤阈值。

LLM接收各个自然语言分解查询(或多个自然语言分解查询),并生成响应。在424中,机器人系统接收该响应。该响应包含来自LLM模块的自然语言表达的请求的多个组成步骤。

在之前讨论的对话 2中,响应 2对应于在424接收到的响应。此外,由于示例中的提问 2包含两个各自的自然语言分解查询,响应 2包含了对各个自然语言分解查询的两个不同响应。特别是,响应 2将步骤1分解为包含步骤A和步骤B的自然语言描述,并将步骤2分解为步骤C、步骤D和步骤E。在426中,多个组成步骤被纳入任务计划。关于将指令纳入任务计划的示例将在后续部分进行讨论。

在动作430中,如果任务计划的每个步骤都对应于指令集中的单一指令(基于上述纳入的组成步骤),则递归循环420结束,方法400进入动作450,由机器人系统执行任务计划(稍后将详细描述)。然而,如果任务计划的每个步骤未对应于指令集中的单一指令,则递归循环420再次执行。在对话 2的示例中,响应 2仍然将任务计划表示为五个概念步骤:步骤A、步骤B、步骤C、步骤D和步骤E,其中没有任何一个步骤对应于指令集中的单一指令(这些步骤都不对应于提问 1中列出的操作1-6)。

在循环420的第二次迭代中,对于每个不对应于指令集中的单一指令的步骤,在动作422中向LLM模块提供各自的自然语言分解查询。该自然语言分解查询包括一个请求,要求将步骤分解为多个组成步骤。在前述的对话 2中,提问 3对应于该自然语言分解查询,其中提问 3请求将步骤A、步骤B、步骤C、步骤D和步骤E分别进行分解。在该示例中,自然语言分解查询明确指示了任务计划步骤阈值(三个或更少的步骤),但这并非绝对必要。在一些实现中,LLM模块可以访问早先在动作406中提供的任务计划步骤阈值(例如,在聊天记录中)。

在第二次迭代的动作422中提供的各自的自然语言分解查询之后,LLM模块生成多个组成步骤。机器人系统在第二次迭代的动作424中接收到这些组成步骤。在前述的对话 2中,响应 3对应于进一步的概念步骤集,特别地将步骤A分解为步骤i和ii,将步骤B分解为步骤iii和iv,将步骤C分解为步骤v和vi,将步骤D分解为步骤vii和viii,将步骤E分解为步骤ix和x。需要注意的是,使用不同的标签(例如步骤编号、罗马数字和字母)仅是为了便于讨论,以明确区分具体指的是哪些步骤。可以根据具体应用需求使用任何合适的标签。

在第二次迭代的动作426中,步骤i-x被纳入任务计划。关于将步骤纳入任务计划的示例将在后续部分讨论。

在第二次迭代的动作430中,每个步骤i、ii、iii、iv、v、vi、vii、viii、ix和x都对应于一个单一指令。因此,递归循环420完成,方法400进入动作450。

在动作450中,机器人系统执行任务计划。例如,机器人控制器的至少一个处理器可以使至少一个元件(例如可执行元件)执行任务计划中指定的任意操作(或执行任意指令)。

如上所述,LLM模块提供的任务计划以自然语言表达。例如,任务计划可以指示机器人系统以自然语言表达的至少一个可执行操作(或指令)。在前述的对话 2的示例中,最终任务计划的每个步骤表示为自然语言中的一个对应指令。为了使机器人系统执行任务计划,至少一个处理器可以首先根据以自然语言表达的任务计划生成一个机器人语言的任务计划。在这种实现中,在动作450中执行任务计划包括执行机器人语言的任务计划。机器人语言的任务计划可以包括一组机器人控制指令,当该组指令由至少一个处理器执行时,会使机器人系统执行任务计划中指示的至少一个操作(或指令)。例如,该组机器人控制指令可以包含至少一个机器人系统可执行的可重用工作基本指令库或集合。此外,任务计划中以自然语言表达的至少一个操作可以包含一个特定可重用工作基本指令的自然语言描述(例如“抓取白棋子1”),而机器人语言任务计划中的机器人控制指令可以包含自然语言任务计划的操作,但指定为机器人系统可用的语言格式(例如指令如“grasp(chess_pawn_54677)”)。

类似于前面所述,生成机器人语言任务计划可以包括执行一个机器人语言转换模块,该模块将机器人系统可执行的自然语言表达的操作转换为指令集中的至少一个可重用工作基本指令(指令)。参考包含自然语言表达的操作“抓取白棋子1”的示例,机器人语言转换模块可以将自然语言中表达的操作的文本字符串与机器人系统可用的可重用工作基本指令中的文本字符串(例如“grasp(object)”)或机器人系统可以与之交互的环境中的对象(例如“chess_pawn_54677”)进行匹配。因此,至少一个处理器可以生成机器人语言指令,如“grasp(chess_pawn_54677)”。

在方法400的背景下,机器人系统可以存储一个可编辑的任务计划(例如在稍后参考图7讨论的非易失性处理器可读介质740上),并在方法400的过程中不断更新该任务计划。特别地,可以存储一个包含在动作412中接收到的步骤的初始任务计划,并在循环420的迭代过程中对该初始任务计划进行编辑,直到获得最终任务计划(仅包含指令集中的指令)。参考上述的对话 2的示例,任务计划可以按以下方式存储并更新:

在接收到响应 1后,存储的初始任务计划包括:

    步骤1. 将白色棋子移动到右手边的垃圾桶。

    步骤2. 将黑色棋子移动到左手边的垃圾桶。

在接收到响应 2后,将在第一次迭代的动作424中接收到的对应于步骤1的多个组成步骤纳入任务计划。此示例中,将步骤1对应的组成步骤纳入任务计划包括将步骤1替换为步骤1的组成步骤。同样,将步骤2的组成步骤纳入任务计划包括将步骤2替换为步骤2的组成步骤。因此,任务计划更新为:

    步骤A. 将白色棋子1移动到右手边的垃圾桶。

    步骤B. 将白色棋子2移动到右手边的垃圾桶。

    步骤C. 将黑色棋子1移动到左手边的垃圾桶。

    步骤D. 将黑色棋子2移动到左手边的垃圾桶。

    步骤E. 将黑色象棋移动到左手边的垃圾桶。

在接收到响应 3后,将在动作424的第二次迭代中收到的与步骤A、B、C、D和E相对应的进一步组成步骤纳入任务计划的动作426。在此示例中,将进一步的组成步骤纳入任务计划包括用组成步骤i和ii替换步骤A,用组成步骤iii和iv替换步骤B,用组成步骤v和vi替换步骤C,用组成步骤vii和viii替换步骤D,以及用组成步骤ix和x替换步骤E。任务计划因此更新为:

    i. 抓取白色棋子1

    ii. 将白色棋子1放入右手边的垃圾桶

    iii. 抓取白色棋子2

    iv. 将白色棋子2放入右手边的垃圾桶

    v. 抓取黑色棋子1

    vi. 将黑色棋子1放入左手边的垃圾桶

    vii. 抓取黑色棋子2

    viii. 将黑色棋子2放入左手边的垃圾桶

    ix. 抓取黑色象棋

    x. 将黑色象棋放入左手边的垃圾桶

在某些实现中,LLM模块可以用于自动故障排除任务计划。例如,如果任务计划执行失败(即,未通过验证,未能完成或遇到错误),可以将包含所有成功执行或验证的任务计划部分的自然语言提示发送(回)给LLM模块,并附上描述失败原因的附加信息,询问LLM模块下一步该怎么做。此外,外部检查器可以审查或验证提议的计划,并出于某些原因拒绝该计划。外部检查器可以是基于逻辑的系统或推理引擎,例如Cycorp Inc.的CYC®机器推理AI平台。推理引擎可以利用逻辑规则、声明、术语、知识片段或类似的库,并基于这些内容得出逻辑结论。因此,可以通过将任务计划与推理引擎部分指定的规则(或类似内容)进行比较,由推理引擎验证方法200中的任务计划。这意味着可以将推理引擎的至少一部分逻辑应用于任务计划,以验证其逻辑合理性,并/或识别其中的逻辑不一致或不可行性。例如,拒绝的原因可能是违反了机器人安全或人类或其他生物的安全。在拒绝的情况下,可以将修改后的自然语言提示发送回LLM模块,以避免计划在外部检查中失败。

在某些实现中,LLM可以帮助在机器人控制系统中为泛化和/或参数化的对象自动分配参数或定义。例如,在上述棋子整理示例中,LLM可以为参数化的工作基本指令或“指令”分配参数。另一个示例是,如果任务计划成功执行,可以将成功的任务计划存储并重新参数化,使其泛化。当机器人在未来遇到类似任务实例时,可以回调存储的成功任务计划,并请求LLM模块(例如,通过简单的自然语言提示)用当前任务计划特定的对象替换先前成功任务计划中的参数化对象。例如,如果某计划已成功用于分类两种特定类型的对象,机器人可以通过请求LLM将这些对象替换为不同的对象来重复使用该计划。

本系统、方法、控制模块和计算机程序产品的各种实现涉及使用自然语言表达(描述)(例如,通过自然语言提示或查询,可以由用户直接以文本输入,或由用户口头输入并通过语音转文本系统转换为文本)来控制机器人的功能和操作,其中LLM模块可以在自然语言表达和机器人控制系统之间提供接口。这种框架在机器人控制架构的某些元素采用可以用自然语言表达的编程和/或指令时特别有优势。一个适合的示例是前述的指令集。例如,如前所述,LLM模块输出的任务计划可以由机器人控制系统自动解析,例如通过在指令集中寻找词语匹配,指令集的参数可以通过输入自然语言提示中的字符串匹配来找到(例如,通过前述的文本字符串匹配模块)。在某些实现中,可以在机器人控制系统使用的参数和自然语言变体之间生成一对一映射,以提高LLM模块正确处理文本的几率。例如,即使在机器人控制系统中某个对象表示为chess_pawn_54677,它在自然语言提示中可以被称为“chess pawn 1”。在这种情况下,如果返回的任务计划包含“抓取chess pawn 1”的短语,可以将其匹配到指令集中的“抓取”和对象“chess pawn 1”,从而将该短语映射为grasp(chess_pawn_54677)。此类解析和/或词语匹配(例如文本字符串匹配模块)可以在所有涉及将机器人语言转换为自然语言或反之的情况下使用。

在某些实现中,机器人控制系统可以生成和/或使用描述机器人环境的场景图,并应用函数作用于该场景图,以生成描述从机器人视角看到的场景的自然语言提示或描述(例如,在方法300的动作304或方法400的动作404的上下文中)。该自动生成的自然语言提示或描述可以用作LLM模块的输入,以便促进各种操作,例如推理、事实核查和任务规划。

在某些实现中,任务计划的质量可能至少部分取决于机器人对其环境的认知,因此机器人控制系统可能会定期在后台检查和比较其场景图和内在世界模型。根据本系统、方法、控制模块和计算机程序产品的规定,这种检查和比较场景图(例如,来自机器人外部环境的实际数据)和内在世界模型(例如,机器人对其外部环境的模拟)可以通过自动生成的自然语言提示或描述来完成,并将这些自然语言提示或描述输入到LLM模块中。

在某些实现中,被用作任务规划器的LLM模块可以被机器人控制系统频繁调用,以回答“我(机器人)现在/在这里可以做什么?”的问题。例如,机器人控制系统可以自动生成其环境(场景图)和能力(指令集)的自然语言描述,并将这些自然语言描述与查询一同输入到LLM模块中:“我能做什么?”或“我该做什么?”(或类似变体,如“我可以做的最有用的事情是什么?”、“我可以做的有意义的事情是什么?”等)。然后,可以对这些问题的每个答案生成任务计划(例如,如上所述参考图3中的方法300或图4中的方法400),以实现每个目标。这些任务计划可以与一组约束或原则进行检查(例如,通过推理引擎验证),通过检查的任务现在成为机器人系统可以自发执行的操作。这种类型的行为是一种代理性,因为机器人系统中使用的具身人工通用智能(AGI)能够自主创建其任务计划并执行。在某些实现中,机器人系统会以自然语言输出描述其计划执行的内容,以询问人类(或飞行员/监督员)是否允许执行该计划。可以使用独立的推理系统(例如Cyc®)来解释计划中的每个步骤。计划可以在任意抽象级别提供,其中最高级别可能是人类监督员判断是否应执行计划的最有用描述。LLM模块还可以用于检查计划是否符合某些标准,例如通过自然语言提示来询问最高级计划是否符合一系列期望的约束条件。

某些任务计划可能包含无法解析为指令集元素且本质上是计算性的步骤。例如,任务计划可能需要计算积分或其他计算过程,而这些过程在特定指令集中可能不可实现。在这些情况下,机器人系统可以将这些任务计划步骤发送给基于LLM的系统或LLM模块,要求生成一段代码,例如Python脚本,用于生成执行该任务的函数。在某些实现中,该脚本可以存储在“代码库”中,供人类工程师查看由背景“我在这里可以做什么?”过程自动生成的所有脚本,并检查它们是否按预期工作。LLM设备或模块生成的此类脚本可以提供新的指令集元素,可调用这些元素来“解锁”被缺少适当指令阻碍的任务计划,或使其可供机器人系统在任务计划中合并和使用。

在某些实现中,LLM模块可以存储并在机器人外部执行(例如在云中),并由机器人系统调用或访问(如图5示例所示)。特别地,图5展示了机器人主体500的示意图,其通过云510访问LLM模块520(使得LLM模块与包含机器人主体500的机器人系统分离)。在其他实现中,LLM模块可以本地存储并在机器人系统上作为机器人的控制系统的组成部分执行(如图6示例所示)。特别地,图6展示了机器人主体600的示意图,LLM模块620本地存储于机器人主体600的非易失性处理器可读存储介质上。这两种实现均称为“具有LLM访问权限的机器人”。

本文描述的各种实现包括用于在机器人控制系统中利用一个或多个LLM的系统、方法、控制模块和计算机程序产品,例如在LLM与机器人控制系统之间建立自然语言接口,并调用LLM帮助自主指示机器人该做什么。此方法的示例应用包括任务规划、运动规划、对机器人环境的推理(例如“我现在可以做什么?”)等。这样的实现特别适合于至少一些控制参数和/或指令(例如之前描述的指令集)能够用自然语言指定的机器人控制系统。因此,一些实现可能包括将机器人控制指令和/或参数转换或翻译为自然语言,以便通过自然语言接口与LLM通信。

图7是示例性机器人系统700的示意图,包含了当前系统、机器人、方法、控制模块和计算机程序产品所描述的各种功能和组件。例如,机器人系统701可以执行方法300和/或方法400以及之前讨论的相关动作(为简洁起见不再重复)。机器人系统700包括一个机器人主体701,具有机械连接到主体701的第一个物理可操作组件702a和第二个物理可操作组件702b。在所示实现中,第一个和第二个物理可操作组件702a和702b分别对应一个机器人手,尽管技术人员会意识到在其他实现中物理可操作组件可以采取其他形式(例如手臂或腿、非手形末端执行器如切割器或吸管,或适合机器人特定应用的任何其他形式)。机器人手702a仿人手设计,包括多个手指721a、722a、723a和724a以及对拇指725a。机器人手702b类似于机器人手702a的镜像,但为了减少混乱未对702b的相应细节进行标注。机器人手702a和702b可以通过多种不同的方式进行物理操作,包括机电驱动、缆线驱动、磁流变液驱动和/或液压驱动。描述了可能用于物理操作机器人手702a和702b的驱动技术的示例细节见美国专利申请序列号17/491,577和序列号17/749,536,均全文引用纳入本文。

机器人主体701还包括至少一个传感器703,用于检测和/或收集有关机器人系统700环境和/或对象(例如,包括人,如客户)的信息。在所示实现中,传感器703对应于传感器系统,包括相机、麦克风和一个包含三个正交加速度计、一个磁力计和一个指南针的初始测量单元。然而,至少一个传感器703中可以包含或排除任何合适的传感器,以适应特定应用。例如,可以通过传感器703捕获在方法200的动作202、方法300的动作302或方法400的动作402中捕获的传感器数据。

出于说明的目的,图7包括了某些示例性组件的详细信息,这些组件在当前系统、机器人、方法、控制模块和计算机程序产品的情况下由机器人主体701携带或包含。这些组件包括至少一个处理器730和一个非易失性处理器可读存储介质或“内存”740,与处理器730通信连接。内存740存储数据741和处理器可执行指令742(例如,作为机器人控制模块或计算机程序产品一起存储),当由处理器730执行时,使机器人主体701(包括适用的可操作组件如机器人手702a和/或702b)执行与当前系统、方法、控制模块和计算机程序产品相关的动作和/或功能。至少一个处理器730和一个非易失性处理器可读存储介质740可以共同被视为机器人控制器。

在某些实现中,动作或过程可以完全在机器人主体701上本地执行。例如,在某些实现中,方法300的全部内容可以本地在机器人主体701上执行。在这种实现中,至少一个传感器703捕获动作302中的传感器数据,且至少一个处理器730生成动作304中的环境至少一个方面的自然语言描述。至少一个处理器730还可以生成第一自然语言查询中包含的任何其他自然语言描述,如之前讨论的。进一步在这种实现中,内存740还存储一个LLM模块,第一自然语言查询在动作306中被提供给该模块。在这种情况下,提供第一个自然语言查询可以指至少一个处理器730执行LLM模块,并以第一个自然语言查询为输入。此外,动作308中从LLM模块接收指示可能包括至少一个处理器730接收由LLM模块输出的指示。动作310中提供第二个自然语言查询可以指至少一个处理器730执行LLM模块,并以第二个自然语言查询为输入。此外,在方法300的动作312中从LLM接收任务计划可以包括至少一个处理器730接收由LLM模块输出的任务计划。循环320的子动作可以由至少一个处理器730执行,通过向LLM模块提供自然语言分解查询、从LLM模块接收指示和描述,至少一个处理器730和/或内存740将步骤或指令合并到任务计划中。在此示例中,动作350中执行任务计划包括至少一个处理器730执行指令,指示机器人主体701执行任务计划中指定的操作。

作为另一个示例,在某些实现中,方法400的全部内容可以本地在机器人主体701上执行。在这种实现中,至少一个传感器703在动作402中捕获传感器数据,至少一个处理器730在动作404中生成环境至少一个方面的自然语言描述。至少一个处理器730还可以生成第一自然语言查询中包含的任何其他自然语言描述,如之前讨论的。在这种实现中,内存740还存储LLM模块,第一自然语言查询在动作406中被提供给该模块。在这种情况下,提供第一个自然语言查询可以指至少一个处理器730执行LLM模块,并以第一个自然语言查询为输入。此外,在方法400的动作412中从LLM接收任务计划可以包括至少一个处理器730接收由LLM模块输出的任务计划。动作414中确定任务计划的每个步骤是否对应于单个指令可以由至少一个处理器730执行。循环420的子动作可以由至少一个处理器730执行,通过向LLM模块提供自然语言分解查询、接收LLM模块返回的组件步骤,并且至少一个处理器730和/或内存740将组件步骤合并到任务计划中。在此示例中,动作450中执行任务计划包括至少一个处理器730执行指令,使机器人主体701执行任务计划中指定的操作。

在某些实现中,动作或过程可以在机器人主体701本地执行,也可以由独立于机器人主体701的设备执行。在这方面,至少一个处理器730还与无线收发器750通信耦合,机器人主体701通过无线收发器750发送和接收无线通信信号770。

图7还包括了一个独立设备780,它是机器人系统700的一部分,但在物理上与机器人主体701分离。作为非限制性示例,独立设备780可以是与机器人主体701接近的处理单元(例如在同一个房间内),也可以是与机器人主体701相距较远的服务器。独立设备780包括一个无线收发器781,通过该无线收发器,独立设备780可以发送和接收无线通信信号770。无线收发器750和无线收发器781可以被称为通信接口(一起或分别)用于机器人主体701与独立设备780的通信。此外,收发器750和781不一定要直接通信(尽管可以);例如,收发器750和781可以通过网络或互联网相互通信。进一步来说,收发器750和781不必为无线的;在某些实现中,任一收发器都可以被有线通信接口代替。在一些实现中,如果LLM模块未存储在内存740中,机器人主体701可以通过收发器750和781通过无线信号770访问LLM模块。

具体来说,独立设备780还包括至少一个处理器782,与无线收发器781通信耦合,并至少一个非易失性处理器可读存储介质790(或“内存”790),该内存与处理器782通信耦合。内存790存储数据791和处理器可执行指令792(例如,作为机器人控制模块或计算机程序产品一起存储),当处理器782执行时,使得独立设备780(或其组件)能够执行与当前系统、机器人、方法、机器人控制模块和计算机程序产品相关的动作和/或功能。内存790还可以存储一个LLM模块。或者,独立设备780可以访问存储在另一设备(例如基于云或互联网的LLM模块)上的LLM模块。

本文讨论的方法或过程(例如图3中的方法300或图4中的方法400)可以由机器人主体701和独立设备780组合执行。在一个示例实现中,参考图3中的方法300,至少一个传感器703在动作302中捕获传感器数据,至少一个处理器730在动作304中生成环境的至少一个方面的自然语言描述。至少一个处理器730还可以生成之前讨论的第一自然语言查询中包含的任何其他自然语言描述。在此示例实现中,独立设备780的内存790存储一个LLM模块,该模块在动作306中被提供第一个自然语言查询。在此示例中,提供第一个自然语言查询指的是机器人主体701通过收发器750和781(通信接口)将第一个自然语言查询传输到独立设备。然后至少一个处理器782执行LLM模块,以第一个自然语言查询作为输入。此外,在动作308中接收来自LLM模块的指示可能包括机器人主体701通过收发器750和781接收由LLM模块输出的指示。动作310中提供第二个自然语言查询可以指机器人主体701通过收发器750和781将第二个自然语言查询传输到独立设备。然后至少一个处理器782执行LLM模块,以第二个自然语言查询作为输入。此外,在方法300的动作312中从LLM接收任务计划包含机器人主体701接收由LLM模块输出的任务计划,通过收发器750和781从独立设备780传输过来,并由机器人控制器(或至少一个处理器730)接收。与提供自然语言分解查询相关的循环320的子动作可以由机器人主体701通过收发器750和781将自然语言分解查询传输到独立设备执行。与接收指示或自然语言描述或概念步骤相关的循环320的子动作可以包含机器人主体701通过收发器750和781接收由LLM模块输出的指示、描述或概念步骤。与将步骤或指令合并到任务计划中相关的循环320的子动作可以包括至少一个处理器730和/或内存740将步骤或指令合并到任务计划中。在动作350中执行任务计划包含至少一个处理器730执行指令,使机器人主体701执行任务计划中指定的操作。

在另一个示例实现中,参考图4中的方法400,至少一个传感器703在动作402中捕获传感器数据,至少一个处理器730在动作404中生成环境的至少一个方面的自然语言描述。至少一个处理器730还可以生成之前讨论的第一自然语言查询中包含的任何其他自然语言描述。在此示例实现中,独立设备780的内存790存储一个LLM模块,在动作406中被提供第一个自然语言查询。在此示例中,提供第一个自然语言查询指的是机器人主体701通过收发器750和781(通信接口)将第一个自然语言查询传输到独立设备。然后至少一个处理器782执行LLM模块,以第一个自然语言查询作为输入。此外,在方法400的动作412中从LLM接收任务计划包含机器人主体701接收由LLM模块输出的任务计划,通过收发器750和781从独立设备780传输过来,并由机器人控制器(或至少一个处理器730)接收。动作414中确定任务计划的每个步骤是否对应于单个指令可以由至少一个处理器730执行。与提供自然语言分解查询相关的循环420的子动作可以由机器人主体701通过收发器750和781将自然语言分解查询传输到独立设备780。循环420中与接收组件步骤相关的子动作可以包含机器人主体701通过收发器750和781接收由LLM模块输出的指示、描述或概念步骤。循环420中与将组件步骤合并到任务计划中相关的子动作可以包括至少一个处理器730和/或内存740将组件步骤合并到任务计划中。在动作350中执行任务计划包含至少一个处理器730执行指令,使机器人主体701执行任务计划中指定的操作。

篇幅所限,以上仅摘录部分内容,

如需获取英文原版、中文译文请加入知识星球,

并搜索编号“A243”获取详细资料。


另在知识星球新增了一篇非公开资料

基于具身智能的多模态感知与人机交互研究(S149

AI工业
树立大江大海大格局,练基础基层基本功。共同打造落地的、一流的工业智能产品。
 最新文章