近期三星电子中国研究院与中国工程院外籍院士张建伟教授、孙富春教授和方斌教授合作,提出RobotGPT,探讨了ChatGPT在机器人操控应用中的应用,旨在推进相关实际实施,使ChatGPT能够为智能体(Agent)训练生成动作代码。该系统赋予机器人使用自然语言进行理性互动的能力,便于执行如拾取和放置等任务。
RobotGPT论文链接:https://ieeexplore.ieee.org/document/10412086
概要
RobotGPT是⼀种优先考虑稳定性和安全性的机器⼈操作创新决策框架。 ChatGPT⽣成的执⾏代码不能保证系统的稳定性和安全性。 ChatGPT 可能会为同⼀任务提供不同的答案, 从⽽导致不可预测性。 这种不稳定性阻碍了 ChatGPT 直接集成到机器⼈操作循环中。 虽然将Temperature设置为 0 可以⽣成更⼀致的输出, 但可能会导致 ChatGPT 失去多样性和创造⼒。 RobotGPT的目标是利⽤ ChatGPT 在机器⼈操作⽅⾯解决问题的能⼒并训练可靠的代理。该框架包括有效的提示结构和强大的学习模型。 此外,RobotGPT引入了衡量任务难度的指标, 以评估 ChatGPT 在机器⼈操作⽅⾯的性能。与直接使⽤ChatGPT ⽣成代码相比,RobotGPT的框架显着提供了任务成功率, 平均从 38.5% 提⾼到 91.5%。 因此,与直接使用 ChatGPT 作为任务规划器相比,利⽤ ChatGPT 作为专家来训练 RobotGPT 是⼀种更稳定的⽅法。
详细介绍
大型语言模型 (LLM) 在各种任务中取得了令人印象深刻的成就,包括但不限于文本生成、机器翻译和代码合成。最近,研究界有很多尝试将LLM纳入机器人系统。然而,迄今为止,还没有研究全面探讨LLM能够解决哪些任务。
此外,LLM的快速发展也对人机交互(HRI)产生了重大影响。HRI的研究涉及更广泛的领域,如虚拟现实、智能空间等。为了提高面向用户的普及度,让人们更加舒适、方便地使用机器人,自然交互是关键技术之一。目前,自然语言交互的研究已经取得了一些进展,但也存在很多不足。
尽管如此,在使用场景的泛化和语言模型的理解上仍然略有欠缺。ChatGPT 最近的出现提高了人们对LLM的期望。ChatGPT 因其强大的代码模型生成能力和会话灵活性而在各种语言模型中脱颖而出,表现出惊人的理解力,让用户能够以更自然的方式与机器人交互。现有的代表作品利用ChatGPT生成可以直接部署在机器人上的代码,提前描述任务的目标以及ChatGPT可用的功能库,然后利用ChatGPT操纵不同的机器人来执行无人机导航和机器人等功能经过不断的循环反馈后,用自然语言来抓取物体。ChatGPT 能够从自然对话中解析用户意图并从自然对话中生成解决问题的代码,这揭示了 ChatGPT 在机器人技术应用中的巨大潜力。
本文对ChatGPT在机器人操控领域的应用进行了深入研究,目标是推进 ChatGPT 在机器人技术中的实际应用。通过 ChatGPT,我们实现了一个将环境和任务转换为自然语言的框架。随后,ChatGPT 生成特定的操作命令代码,用于训练代理 RobotGPT,以利用 ChatGPT 的问题解决能力。机器人可以间接地使用自然语言与外界交互,从而设计合理的动作序列并实现相应的功能(例如拾取和放置)。我们还有一些与ChatGPT对话的建议,即如何构造prompt,以便ChatGPT能够更准确、更深入地理解。此外,我们还指出了此类交互的局限性和安全风险,以及解决问题的简单思路。总的来说,我们的主要贡献如下:
- 我们探索了一种带有自我修正模块的有效提示结构,并对不同难度的任务进行了实验,以探索 ChatGPT 在机器人任务上的能力边界。
- 为 ChatGPT 在机器人领域的应用提出了一个新颖的框架。RobotGPT不直接执行ChatGPT生成的代码。相反,它采用一个agent来学习 ChatGPT 生成的规划策略,从而增强系统的稳定性。
在此架构中,ChatGPT 扮演了三个角色,即决策机器人、评估机器人和校正机器人。操作员发出指令让机器人完成任务,然后根据环境信息和人类指令生成自然语言提示。决策机器人将根据提供的提示生成相应的可执行代码。接下来,生成的代码将被逐行执行。如果发生运行时错误,则会提供该错误的原因以及发生错误的代码行以供决策机器人进行修改,直到代码可以成功运行。然后,可执行代码将通过评估机器人生成的评估代码模型进行测试。如果可执行代码无法通过评估代码,纠正机器人将分析结果失败的潜在原因,并将这些失败原因发送回决策机器人进行纠正。之后,满足评估条件的代码将用于生成演示数据。经过训练后,经过训练的智能体可以完美部署真实的机器人。
实现方法
ChatGPT 无法解析视觉输入并自行操作机器人。在本文中,我们利用模拟环境和基于自然语言的机器人 API 来释放 ChatGPT 的一般问题解决能力。因此,我们期望经过训练的智能体 RobotGPT 能够在任务规划层面吸收 ChatGPT 的知识。
ChatGPT 提示机器人操作
最近,人们对使用 ChatGPT 等大型语言模型通过生成高级动作来直接控制机器人越来越感兴趣。然而,由于多种原因,这种方法可能不适合。首先,ChatGPT 生成的动作可能不安全或稳定,因为它们没有考虑机器人的物理约束和限制。其次,ChatGPT 缺乏推理因果关系和时间依赖性的能力,而这对于控制复杂的机器人系统至关重要。因此,我们提出了一种基于机器人学习的替代方法,其中 ChatGPT 用于生成用于训练机器人的演示。通过利用语言模型和机器人学习的优势,我们的目标是开发更安全、更强大的机器人系统。在本节中,我们将详细介绍与 ChatGPT 交互以生成演示的框架。
RobotGPT提出了一个与 ChatGPT 交互的框架,该框架由两部分组成:代码生成和纠错。在代码生成阶段,用户描述任务并提供示例来指导 ChatGPT 的响应。这有助于确保 ChatGPT 生成满足用户要求的适当且相关的输出。在纠错阶段,运行时错误和任务失败都被认为是正确的。
提示词描述(prompt description)
有效的prompt描述对于提高ChatGPT在各个领域的性能至关重要。当前使用LLM进行机器人操作的主要挑战是:1)要求对问题进行完整、准确的描述;2)允许的自然语言描述的 API;3)答案结构产生偏差。
在本节中,我们详细介绍了机器人操作的有效的prompt方法,共有五个部分,包括背景描述、对象信息、环境信息、任务信息和示例。背景描述部分描述了环境的基本信息,如环境的用途、布局、相关实体等。在对象信息部分,我们列出了所有对象的名称、形状、姿势和其他有用信息,例如它们的属性以及与其他对象的关系。在环境信息部分,我们描述了 ChatGPT 可用于执行任务的机器人和 API 函数。在任务信息部分,我们给出了 ChatGPT 的具体任务,通常是为给定的作业生成 Python 代码。最后,在示例部分,我们提供了一些示例,以方便更好地理解环境和 API 使用。遵循 OpenAI 的建议,我们将背景信息和RobotAPI信息设置为ChatGPT API中的系统消息,以获得满意的响应。通过使用这种全面且结构化的提示方法,我们的目标是提高 ChatGPT 在各种任务和领域中的准确性和效率。
自我修正(self correction)
在为复杂任务生成响应时,ChatGPT 可能偶尔会产生需要纠正的小错误或语法错误。RobotGPT引入了一种纠正 ChatGPT 响应的交互式方法。为了采用这种方法,我们首先在模拟器中执行生成的代码并评估结果。
生成的代码将逐行执行,当发生运行时错误时,代码错误捕获模块将捕获运行时错误,包括错误消息及其位置。然后,该数据被发送回 ChatGPT 决策机器人以进行进一步分析。在结果失败的情况下,校正机器人可以根据提示分析失败的潜在原因,并生成解释任务失败原因的响应。最后,原始 ChatGPT 决策机器人将根据校正机器人的故障分析重新生成代码。ChatGPT 利用此反馈修改其响应并生成准确的代码。这个交互过程最多可以迭代三次。我们的目标是提高 ChatGPT 响应的准确性和可靠性,使其在一系列领域中越来越相关。
生成的代码评估
根据ChatGPT生成的代码完成的任务应该完成指定的动作。为此,一个自动、高效、精准的任务评估模块势在必行。
如图1所示,我们使用名为评估机器人的 ChatGPT 来生成评估代码。评估机器人的提示与决策机器人有一些不同。提示的结构保持不变,但背景描述和机器人API的内容有所不同,如图2所示。评估机器人生成的函数 is_task_success() 将作为确定整个任务成功的标准。人类的作用是仔细检查生成的评估代码是否正确。如果生成了错误的评估代码,人类将介入进行纠正。这样的设计可以最大限度地减轻人类的负担。
机器人学习
依靠 ChatGPT 来执行一般的机器人任务是不可靠的,因为 ChatGPT 的输出是随机的,这增加了机器人工作的风险。尽管将temperature设置为零可以产生一致的结果,但代价是减少多样性和创造力,而且它也可能导致任务持续失败。为了解决这个问题,我们期望机器人能够学习机器人策略来吸收 ChatGPT 解决一般任务的知识。对于机器人学习,我们利用最先进的开源机器人操作基准和学习框架 BulletArm 从 ChatGPT 生成的演示中训练代理。
行动(action)、状态空间(state space)和奖励(reward)
ChatGPT 支持的专家演示是在模拟环境中生成的,该环境包括一个 Panda 机器人,其工作空间顶部安装有摄像头。状态空间包括自上而下的高度图(height-map)H,机械臂末端视角的图像 I 和夹具(gripper)状态 g 。对于动作空间,它包括机器人技能和目标姿态。其中 x 和 y 代表末端执行器的 XY 坐标,theta记录沿 z 轴的旋转。奖励被设置为稀疏奖励函数,其中当所有状态-动作对达到目标状态时奖励为1,否则奖励为0。
算法
BulletArm显示 SDQfD比 DQN,ADET 和 DQfD 表现更好。对于网络架构,等变ASR在所有环境中具有最佳性能,然后是 Rot FCN 和 CNN ASR ,最后是 FCN 。在本文中,SDQfD 算法采用等变ASR网络进行机器人学习任务如图3所示。损失函数是n步TD损失和严格大边距损失之和。
实验
在本节中,我们在模拟和真实环境中对所提出的系统进行评估。更准确地说,我们重点解释以下问题:
- Robot-GPT 能否高效、安全地收集演示数据并将其部署到现实世界中,从而弥合模拟与真实领域的差距?
- LLM驱动的机器人能否解决手工编码和非LLM无法很好解决的问题?
表一:推理比较
任务名称 | 描述 |
---|---|
移动立方体 | 将上面的小立方体移到大立方体上 |
堆叠 | 将给定的块堆叠在一起。 |
金字塔堆叠 | 将给定的三个块堆叠成金字塔形状。 |
house_building_1 | 使用给定的三个块和一个三角形建造一座高层建筑。 |
house_building_2 | 使用给定的两个立方体和一个三角形构造一座平房。 |
house_building_3 | 使用给定的两个立方体(红色)、一块砖(蓝色)和一个三角形建造一座房子。 |
瓶子排列 | 将给定的六瓶整齐地放在托盘上。 |
装箱 | 拿起桌子上的块并放在托盘上。 |
指标
创建评分系统时,我们考虑以下三个方面: 对象的数量 o、对象类别 c 以及任务的步骤数 s 。通过对 32 位机器人和计算机视觉领域的专家和工程师进行的调查发现,这三个因素是影响机器人桌面抓取任务难度的首要因素。调查问卷由两个主要部分组成。第一部分是写出影响机器人操纵难度的前三个因素。第二部分是为本实验的八个场景打分。结果如表2所示。
在这三个因素中,对象的数量影响最大,我们放大了它在分数中的权重。因此,任务难度分数可以使用以下公式计算:
分数在 0 到 10 之间的任务被认为是简单的,分数在 11 到 20 之间的任务被认为是中等的,分数高于 20 的任务被定义为困难的任务。表2显示了实验中使用的任务及其相应的难度级别。由公式1计算出的难度与除了bin_packing任务之外的调查问卷得到的主观结果相同,这表明该评价体系具有普遍的适用性。bin_packing 任务的主观结果导致简单结果的原因是由于忽略了优化放置位置以填充垃圾箱而不导致物体掉落。
表二:实验任务及其相应的难度。“难度 1”表示根据指标计算的结果,“难度 2”是从调查回复中获得的主观评分。
Task Name | o | c | s | Score | Difficulty1 | Difficulty2 |
move cube | 2 | 1 | 2 | 6 | E | E |
block stacking | 4 | 1 | 6 | 16 | M | M |
pyramid stacking | 3 | 1 | 6 | 15 | M | M |
house building 1 | 4 | 2 | 6 | 20 | M | M |
house building 2 | 3 | 2 | 4 | 15 | M | M |
house building 3 | 4 | 3 | 6 | 28 | H | H |
bottle arrangement | 6 | 1 | 12 | 30 | H | H |
bin packing | 8 | 1 | 16 | 40 | H | E |
在下面的定量实验中,我们将为每个任务生成 25 个随机场景,并统计成功尝试的次数。
实验设置
图5显示了我们在模拟和真实环境中的实验设置。我们将 RGB-D 传感器直接安装在工作空间上方,以提供清晰的场景高度图。在模拟环境中,机器人依靠PyBullet引擎进行运动控制。而在现实世界中,机器人利用 MoveIt 和 ros_franka 进行运动规划和执行。
模拟实验
表3列出了八个实验的定量结果。尽管每次输入相同的提示,生成的代码和结果输出始终存在显着差异,因为决策机器人的temperature设为 1.0。此外,ChatGPT生成的代码包含语法或逻辑错误。虽然我们的自我修正模块可以修正一些语法错误,但在大多数情况下,如果ChatGPT最初无法生成成功的代码,那么这个实验就很难取得成功。
图6说明了由 ChatGPT 生成的错误规划导致的三种最常见的故障。(a)显示了由于对任务需求的误解而导致的失败。Bottle_arrangement任务需要将瓶子整齐地放在托盘上,而不是随意将其扔到托盘上。(b)展示了错误的动作序列规划,其中机器人正在抓取图像中堆叠的块。这显然是不合理的,因为机器人应该抓取尚未堆叠的物体。在(c)中,可以明显看出机器人的放置位置存在偏差。因此,ChatGPT 可以针对相同的提示提供不同的解决方案,其中有些是正确的,有些是不正确的。这就是为什么我们提出 RobotGPT 框架作为一种更稳定的方法。
图7显示了三个难度级别的成功率。对于ChatGPT,很明显,随着任务难度的增加,成功率显着下降。简单、中等和困难任务的成功率分别为 0.88、0.39 和 0.21。相比之下,我们的 RobotGPT 模型在各个级别的任务中都表现出了鲁棒性,保持了良好的性能,平均可以达到 0.915。
表三:使用gpt-3.5-turbo-0301模型的实验计数结果
真实的机器人实验
RobotGPT的最终目标是利用ChatGPT的智能来协助解决现实世界的问题。因此,我们将训练好的代理部署在真实环境中,这与模拟相同。为了克服从模拟环境到真实环境差距,在转换为高度图之前,将通过对象分割和去噪对原始深度图进行预处理。此外,为了确保机器人拾放过程的连续性,与模拟器中不同的是,在实际机器人测试中,机器人在拾取动作后不会返回观察位置以捕获新的深度图。相反,当前高度图是根据夹具保持状态从前一个高度图中裁剪出来的。对于真实的机器人实验,我们选择了图8所示的6个场景,每个实验进行10次。最后,表4报告了我们的真实机器人测试结果。
表四:真实机器人实验的计数结果
Task Name | Success | Fail | Total | AP |
---|---|---|---|---|
move cube(E) | 8 | 2 | 10 | 0.8 |
block stacking(M) | 6 | 4 | 10 | 0.6 |
pyramid stacking(M) | 7 | 3 | 10 | 0.7 |
house building 1(M) | 9 | 1 | 10 | 0.9 |
house building 2(M) | 6 | 4 | 10 | 0.6 |
bin packing(H) | 7 | 3 | 10 | 0.7 |
从表4可以看出,执行步骤较少的任务往往有较高的成功尝试次数。失败案例的主要原因并不是智能体预测错误,而是放置时精度不够,导致任务失败。因此,在闭环循环中探索LLM以实现更精确的任务执行将是未来值得研究的课题。
AB测试
为了研究LLM驱动的机器人解决非LLM方法无法很好解决的问题的能力,我们引入了两个开放式实验,如图9所示。第一个实验涉及整理房间挑战,需要整理 40 个定制家居用品,而第二个实验是拼写单词游戏,旨在使用给定的字母表 AL 组拼写最长的单词。此外,我们邀请人类受试者完成相同的任务。
实验方案: 我们邀请 10 名参与者进行 AB 测试实验。其中七人具有机器人开发经验,三人具有图像处理经验。我们设定的时间限制为 70 分钟。参与者通过与 RobotGPT 相同的提示来了解开发要求。他们被要求通过编程完成表5列出的 10 项任务。每个参与者都有自主权来确定他们尝试任务的顺序。
评估指标:我们通过五个指标来评估性能:完成状态(CS),对于人类参与者,我们统计完成的次数,对于RobotGPT来说是是否完成;代码质量(CQ)是指生成的代码从0到1的分数,由Python静态代码分析工具Pylint进行分析;时间使用(TU)指从读取任务需求到模拟执行任务所消耗的时间(以秒为单位);外部帮助(EH)是指参与者是否在互联网上搜索信息;对于人体测试,CQ、TU和EH代表成功完成任务的个体的数据平均值。
结果与分析:表5显示AB测试的结果。与手工编码相比,RobotGPT 在代码质量和时间消耗上都表现出优势,分别为 0.762 和 221.8 秒,而人类为 0.70 和 554.9 秒。只有五名参与者在70分钟内完成了所有任务,因此即使对于具有强大编程背景的工程师来说,通过手工编码生成机器人演示数据也非常耗时。
此外,RobotGPT 在两项开放式任务(整理房间和单词拼写游戏)上的表现显着优于人类。这主要得益于LLM的先验知识库。对于整理实验,RobotGPT 将物体分为十组,分别标记为厨具、水果、零食、媒体、鞋类、办公用品、电子产品、个人护理产品、存储和饮料,耗时 412 秒。这是一个非常令人满意的结果。考虑一下如果有 400 个物体而不是 40 个,LLM 驱动的机器人的优势就会变得更加明显。在拼写游戏中,RobotGPT 提供的结果是 9 个字母的单词“backfield”,而人类反应的最佳结果是 7 个字母的单词“blacked”。更重要的是,参与者需要在线搜索信息来完成两个开放式任务,这表明LLM拥有比人类更全面的知识。
表五:AB测试结果
结论
在本文中,我们首先开发了一种有效的prompt结构,以增强 ChatGPT 对机器人环境及其需要执行的任务的理解。接下来,我们介绍一个名为RobotGPT的框架,它利用ChatGPT的问题解决能力来实现更稳定的任务执行。在实验中,我们建立了一个指标来衡量任务难度,并观察到随着任务难度的增加,ChatGPT 执行的成功率会下降。相比之下,RobotGPT 可以以 91.5% 的成功率执行这些任务,表现出更稳定的性能。更重要的是,该agent也已部署在现实环境中运行。因此,与直接使用 ChatGPT 作为任务规划器相比,利用 ChatGPT 作为专家来训练 RobotGPT 是一种更稳定的方法。此外,AB 测试表明,由于 LLM 拥有大量先验知识库,我们的 LLM 驱动机器人在两个开放式任务上的表现显着优于手动编码。总体而言,机器人技术和LLM的整合仍处于起步阶段,我们的工作只是初步探索,我们相信未来该领域的研究大部分是探索如何在机器人领域正确利用 ChatGPT 的能力。