xx
RobotGPT: Robot Manipulation Learning From ChatGPT
- 文章概括
- 摘要
- I. 介绍
- II. 相关工作
- III. 方法论
- A. ChatGPT 提示机器人操作
- B. 机器人学习
- IV. 实验
- A. 衡量标准
- B. 实验设置
- C. 模拟实验
- D. 真实机器人实验
- E. AB测试
- V. 结论
文章概括
引用:
@article{jin2024robotgpt,
title={Robotgpt: Robot manipulation learning from chatgpt},
author={Jin, Yixiang and Li, Dingzhe and Yong, A and Shi, Jun and Hao, Peng and Sun, Fuchun and Zhang, Jianwei and Fang, Bin},
journal={IEEE Robotics and Automation Letters},
year={2024},
publisher={IEEE}
}
Jin, Y., Li, D., Yong, A., Shi, J., Hao, P., Sun, F., Zhang, J. and Fang, B., 2024. Robotgpt: Robot manipulation learning from chatgpt. IEEE Robotics and Automation Letters.
原文:https://ieeexplore.ieee.org/abstract/document/10412086/
代码、数据和视频:暂无
系列文章:
请在
《
《
《文章
》
》
》 专栏中查找
摘要
我们提出了 RobotGPT,这是一个用于机器人操纵的创新决策框架,它将稳定性和安全性放在首位。由 ChatGPT 生成的执行代码无法保证系统的稳定性和安全性。ChatGPT 可能会对同一任务给出不同的答案,从而导致不可预知性。这种不稳定性阻碍了将 ChatGPT 直接集成到机器人操纵回路中。虽然将温度设置为 0 可以产生更一致的输出,但可能会导致 ChatGPT 失去多样性和创造性。我们的目标是利用 ChatGPT 在机器人操纵中解决问题的能力,训练出一个可靠的代理。该框架包括有效的提示结构和稳健的学习模型。此外,我们还引入了衡量任务难度的指标,以评估 ChatGPT 在机器人操纵中的表现。此外,我们还在模拟和真实环境中对 RobotGPT 进行了评估。与直接使用 ChatGPT 生成代码相比,我们的框架显著提高了任务成功率,平均成功率从 38.5% 提高到 91.5%。因此,与直接使用 ChatGPT 作为任务规划器相比,利用 ChatGPT 作为专家来训练 RobotGPT 是一种更稳定的方法。
索引词条——人工智能机器人、从演示中学习、操纵规划。
I. 介绍
大型语言模型(LLM)在各种任务中都取得了令人瞩目的成就,包括但不限于文本生成、机器翻译和代码合成。最近,越来越多的工作[1]、[2]试图将 LLM 纳入机器人系统。之前的工作表明,LLM 能够以零点方式进行机器人系统规划。然而,迄今为止,还没有任何研究能够全面探讨 LLM 能够解决哪些任务。
此外,LLM 的快速发展也对人机交互(HRI)产生了重大影响。人机交互研究涉及更广泛的领域,如虚拟现实、智能空间等。为了提高面向用户的普及率,让人们更舒适、更方便地使用机器人,自然交互是关键技术之一。目前,自然语言交互的探索已经取得了一些进展[3],但也存在很多不足。
然而,在使用场景的通用性和语言模型的理解方面仍略显不足。最近出现的 ChatGPT 提高了人们对语言模型的期望。ChatGPT 凭借其强大的代码模型生成能力和会话灵活性,在各种语言模型中脱颖而出,展现了惊人的理解能力,让用户能以更自然的方式与机器人进行交互。现有的代表作品利用 ChatGPT 生成可直接部署在机器人上的代码,事先描述任务目标和 ChatGPT 可用的函数库,然后利用 ChatGPT 操纵不同的机器人执行功能,如无人机导航、机器人在连续循环反馈后用自然语言抓取物体等。ChatGPT 能够从自然对话中解析用户意图,并从自然对话中生成解决问题的代码,这揭示了 ChatGPT 在机器人领域应用的巨大潜力[1]。
在这封信中,我们对 ChatGPT 在机器人操纵领域的应用进行了深入研究。我们的目标是推动 ChatGPT 在机器人领域的实际应用。通过 ChatGPT,我们实现了一个将环境和任务转化为自然语言的框架。随后,ChatGPT 生成具体的行动指令代码,用于训练代理 RobotGPT,使其充分利用 ChatGPT 的问题解决能力。机器人可以间接地使用自然语言与外界互动,从而设计合理的动作序列并实现相应的功能(如拾取和放置)。我们还对与 ChatGPT 的对话提出了一些建议,即如何构建提示语,以便 ChatGPT 能更准确、更深入地理解。此外,我们还指出了这种交互的局限性和安全风险,以及解决问题的简单思路。总的来说,我们的主要贡献如下:
\quad
1) 我们探索了一种带有自我纠正模块的有效提示结构,并在不同难度的任务上进行了实验,以探索 ChatGPT 在机器人任务上的能力边界。
\quad
2) 我们为 ChatGPT 在机器人领域的应用提出了一个新颖的框架。我们的系统并不直接执行 ChatGPT 生成的代码。相反,我们采用一个代理来学习 ChatGPT 生成的规划策略,从而提高系统的稳定性。虽然微调可以提高精度[4],但训练数据很难获得。
II. 相关工作
- 用于机器人技术的 LLMs: 通过语言控制机器人能为非专家带来更自然的交互[5]。使用语言控制机器人需要考虑稳定性和通用性 [4]。有关这一问题的文献很多,总体上分为高级解释(如语义解析、规划)[6]和低级策略(如基于模型、模仿学习或强化学习)[7]。大型语言模型(LLM)具有强大的通用智能能力。与此同时,用于机器人的大型语言模型也受到了广泛关注[8]。与我们的研究工作相关的典型文献如下。[9]提出 LLMs 可以有效地将高层任务分解为中层计划,而无需任何进一步的训练。[2]基于 LLMs 构建几何可行计划。 [10]使用价值函数来评估 LLMs 生成的每一步,并选择最佳轨迹。[11] 基于 LLMs 建立系统,学习特定人的偏好。[4] 使用 LLMs 生成以机器人为中心的程序。然而,LLMs 输出的稳定性仍值得探索。
- 机器人学习: 为了利用机器人与现实世界交互的能力,机器人学习已成为研究热点[12]。当状态包括图像时,深度学习推进了机器人学习的发展[13]。机器人学习的算法有很多。不过,基于强化学习和模仿学习的算法仍是主流[14]、[15]。为了比较不同的强化学习算法,人们提出了许多基准。其中,[16]针对的是单一任务(如开门、家具组装、徒手灵巧操作)。[17]、[18] 有各种不同的环境,但缺乏长视距任务。相对全面的基准是 RLBench [19] 和 BulletArm [20]。虽然基准提供了框架,但如何获取机器人学习的数据仍然是个问题。
III. 方法论
ChatGPT 无法解析视觉输入并自行操作机器人。在这封信中,我们利用模拟环境和基于自然语言的机器人应用程序接口来释放 ChatGPT 解决一般问题的能力。因此,我们希望训练有素的代理 RobotGPT 能在任务规划层面吸收 ChatGPT 的知识。值得注意的是,我们的框架很容易扩展到已经拥有所需对象的新模拟环境中。
A. ChatGPT 提示机器人操作
最近,人们对使用大型语言模型(如 ChatGPT)通过生成高级动作来直接控制机器人越来越感兴趣。然而,由于以下几个原因,这种方法可能并不合适。首先,ChatGPT 生成的动作可能不安全或不稳定,因为它们没有考虑到机器人的物理约束和限制。 其次,ChatGPT 缺乏对因果关系和时间依赖关系的推理能力,而这对于控制复杂的机器人系统至关重要。因此,我们提出了一种基于机器人学习的替代方法,即用 ChatGPT 生成用于训练机器人的演示。通过充分利用语言模型和机器人学习的优势,我们的目标是开发出更安全、更强大的机器人系统。在本节中,我们将详细介绍与 ChatGPT 交互生成演示的框架。
我们提出了一个与 ChatGPT 交互的框架,它由两部分组成:代码生成和纠错。在代码生成阶段,用户描述任务并提供示例来指导 ChatGPT 的响应。这有助于确保 ChatGPT 生成适当的相关输出,以满足用户的要求。在纠错阶段,运行时错误和任务失败都被认为是正确的。
\quad 1) 提示描述: 有效的提示方法对于提高 ChatGPT 在各个领域的性能至关重要。Vemprala 等人[1]指出了当前为机器人操作提示 LLM 所面临的挑战: 1) 需要对问题进行完整而准确的描述; 2) 允许使用自然语言描述的应用程序接口; 3)偏向答案结构。在本节中,我们将详细介绍用于机器人操作的有效提示方法。我们提出了一种由背景描述、对象信息、环境信息、任务信息和示例五个部分组成的提示方法。在背景描述部分,我们描述了环境的基本信息,如环境的目的、布局和相关实体。在对象信息部分,我们列出了所有对象的名称、形状、姿势和其他有用信息,例如它们的属性以及与其他对象的关系。在环境信息部分,我们描述了 ChatGPT 可以用来执行任务的机器人和 API 功能。在任务信息部分,我们给出了 ChatGPT 的具体任务,通常是为给定任务生成 Python 代码。最后,在示例部分,我们提供了一些例子,以便更好地理解环境和 API 的使用。根据 OpenAI 的建议[21],我们在 ChatGPT API 中设置了背景信息和 RobotAPI 信息作为系统信息,以获得令人满意的回复。通过使用这种全面、结构化的提示方法,我们希望提高 ChatGPT 在各种任务和领域中的准确性和效率。
\quad
2) 自我更正: 在生成复杂任务的回复时,ChatGPT 可能偶尔会出现一些小错误或语法错误,需要进行纠正。这封信介绍了一种纠正 ChatGPT 响应的交互式方法。为了采用这种方法,我们首先在模拟器中执行生成的代码并评估结果。
生成的代码将逐行执行,当出现运行时错误时,代码错误捕捉模块将捕捉运行时错误,包括错误信息及其位置。然后,这些数据会被发回 ChatGPT 决策机器人进行进一步分析。在结果为失败的情况下,校正机器人可以根据提示分析失败的潜在原因,并生成回复解释任务失败的原因。最后,原 ChatGPT 决策机器人将根据纠正机器人的失败分析重新生成代码。利用这些反馈,ChatGPT 会修正其响应并生成准确的代码。这一互动过程最多可重复三次。我们的目标是提高 ChatGPT 响应的精确度和可靠性,使其在各个领域的相关性不断增强。
\quad 3) 生成代码评估: 根据 ChatGPT 生成的代码完成的任务应满足要求。为此,一个自动、高效、精确的任务评估模块势在必行。
如图 1 所示,我们使用了一个名为评估机器人的 ChatGPT 来生成评估代码。评估机器人的提示与决策机器人有一些不同。如图 2 所示,提示的结构保持不变,但背景描述和机器人 API 的内容有所不同。评价机器人生成的函数 is_task_success() 将作为判断整个任务是否成功的标准。人类的作用是反复检查生成的评估代码是否正确。如果生成了错误的评估代码,人类将介入进行纠正。这种设计可以最大限度地减轻人类的负担。
图 1. 我们系统的架构。ChatGPT 在其中扮演三个角色,即决策机器人、评估机器人和纠正机器人。操作员指示机器人完成任务,然后根据环境信息和人类指令生成自然语言提示。决策机器人将根据提供的提示生成相应的可执行代码。接下来,生成的代码将被逐行执行。如果出现运行时错误,将向决策机器人提供错误原因和发生错误的代码行,供其修改,直到代码成功运行。然后,可执行代码将由评估机器人生成的评估代码模型进行测试。如果可执行代码无法通过 Eval Code 测试,校正机器人将分析结果失败的潜在原因,并将这些失败原因反馈给决策机器人进行修正。之后,满足评估条件的代码将用于生成演示数据。训练完成后,经过训练的代理就可以完美地部署真正的机器人了。
图 2. ChatGPT 的提示。
B. 机器人学习
依靠 ChatGPT 执行一般机器人任务并不可靠,因为 ChatGPT 的输出是随机的,这夸大了机器人工作的风险。虽然将温度设置为零可以以降低多样性和创造性为代价产生一致的结果,但也可能导致任务持续失败。为了解决这个问题,我们期望机器人学习机器人策略,吸收 ChatGPT 解决一般任务的知识。在机器人学习方面,我们利用最先进的开源机器人操纵基准和学习框架 BulletArm [20],从 ChatGPT 生成的演示中训练代理。
\quad 1) 行动、状态空间和奖励:由 ChatGPT 支持的专家演示是在模拟环境中生成的,该环境由一个panda robot组成,工作区顶部安装有摄像头。状态空间由自上而下的高度图 H H H、手持图像 I I I 和抓手状态 g ∈ { H O L D I N G , E M P T Y } g∈\{HOLDING,EMPTY\} g∈{HOLDING,EMPTY} 组成。动作空间包括机器人技能 A s ∈ { P I C K , P L A C E } A_s ∈\{PICK,PLACE\} As∈{PICK,PLACE} 和目标姿势 A p ∈ A x y θ A_p ∈A^{xyθ} Ap∈Axyθ. 其中, x x x 和 y y y 表示末端执行器的 XY \text{XY} XY 坐标, θ θ θ 表示沿 Z 轴的旋转。奖励设置为稀疏奖励函数,其中,当所有状态-动作对都达到目标状态时,奖励为 1,否则为 0。
\quad 2) 算法: BulletArm [20] 显示,SDQfD [22] 的性能优于 DQN [23]、ADET [24] 和 DQfD[25]。在网络结构方面,Equivariant ASR[14]在所有环境中表现最佳,然后是 Rot FCN[26]和 CNN ASR[22],最后是 FCN[27]。如图 3 所示,本文采用 SDQfD 算法[22],利用等变 ASR 网络[14]完成机器人学习任务。损失函数为 n 步 TD 损失与严格大余量损失之和。
图 3. 机器人学习网络架构。
IV. 实验
在本节中,我们将在模拟环境和真实环境中对所提系统进行评估。表 I 和图 4 详细描述了我们的实验设置。更具体地说,我们将重点解释以下问题:
图4. 我们实验中使用的八个任务。
-
Robot-GPT能否高效且安全地收集示范数据,并在现实世界中部署,从而缩小模拟与现实之间的差距?
-
我们的基于大型语言模型的机器人能否解决手动编码和非大型语言模型未能很好处理的问题?
A. 衡量标准
为了创建一个评分系统,我们考虑以下三个方面:物体数量o、物体类别c以及任务步骤数s。这三个因素是通过对32名机器人和计算机视觉领域的专家和工程师进行调查而确定的,主要影响机器人桌面抓取任务的难度。问卷由两个主要部分组成:第一部分是列出影响机器人操作难度的三个主要因素;第二部分是对本实验的八个场景进行评分。结果如表II所示。
在这三个因素中,物体数量对难度的影响最大,因此我们在评分中加大了它的权重。因此,任务难度的评分可以通过以下公式计算:
s c o r e = o + o ∗ c + s (1) score = o + o * c +s \tag{1} score=o+o∗c+s(1)
得分在0到10之间的任务被视为简单,得分在11到20之间的任务被认为是中等,而得分超过20的任务被定义为困难任务。表II展示了实验中使用的任务及其对应的难度等级。从公式(1)计算的难度与问卷调查获得的主观结果基本一致,除了“装箱”任务,这表明该评估系统具有一般适用性。“装箱”任务的主观结果较简单,是因为未考虑优化放置位置以填满箱子而不让物体掉落。
在接下来的定量实验中,我们将为每个任务生成25个随机场景,并统计成功尝试的数量。
B. 实验设置
图5展示了我们在模拟和现实环境中的实验设置。我们将RGB-D传感器直接安装在工作区上方,以提供场景的清晰高度图。在模拟环境中,机器人依靠PyBullet引擎进行运动控制;而在现实世界中,机器人则使用MoveIt和ros_franka进行运动规划和执行。
图 5. 实验设置
C. 模拟实验
表III展示了八个实验的定量结果。尽管每次输入相同的提示,生成的代码和输出仍存在显著差异,因为决策机器人的温度设定为1.0。此外,ChatGPT生成的代码可能包含语法或逻辑错误。虽然我们的自我纠正模块可以修正一些语法错误,但在大多数情况下,如果ChatGPT初始生成的代码未能成功,则很难在这个实验中实现成功。
图6展示了由ChatGPT生成的错误规划导致的三种最常见失败情况。图6(a)显示了由于对任务要求的误解而导致的失败,瓶子摆放任务要求将瓶子整齐地放置在托盘上,而不是随意放置。图6(b)呈现了错误的动作顺序规划,其中机器人在抓取图中叠放的积木。这是不合理的,因为机器人应当抓取尚未堆叠的物体。在图6©中,明显可以看出机器人的放置位置偏离了预期。因此,ChatGPT可以为相同的提示提供不同的解决方案,其中一些是正确的,而另一些则是错误的。这就是我们提出RobotGPT框架作为一种更稳定的方法的原因。
图 6. ChatGPT 生成的失败任务规划。
图7展示了三个难度等级的成功率。对于ChatGPT,随着任务难度的增加,成功率显著下降,简单、中等和困难任务的成功率分别为0.88、0.39和0.21。相比之下,我们的RobotGPT模型在所有任务级别上都表现出稳健性,平均成功率可达到0.915,表现良好。
图 7. 三种难度下的成功率
D. 真实机器人实验
RobotGPT的最终目标是利用ChatGPT的智能来帮助解决现实世界的问题。因此,我们在与模拟环境相同的真实环境中部署了训练好的智能体。为了克服模拟与现实之间的差距,原始深度图将通过物体分割和去噪处理进行预处理,然后转换为高度图。此外,为了确保机器人抓取和放置的连续过程,在真实机器人测试中,机器人在抓取动作后不会返回观察位置以捕获新的深度图,而是基于夹持状态从之前的高度图中裁剪出当前高度图。在真实机器人实验中,我们选择了如图8所示的六个场景,每个实验进行了十次。最终,表IV报告了我们的真实机器人测试结果。
图 8. 真实机器人实验结果。
从表IV可以看出,执行步骤较少的任务往往成功尝试的次数较多。失败的主要原因并不是由于智能体的错误预测,而是由于在放置过程中精度不足,导致任务失败。因此,探索在闭环循环中使用大型语言模型以实现更精确的任务执行,将是未来值得研究的方向。
E. AB测试
为了调查我们的基于大型语言模型的机器人在解决非大型语言模型方法未能很好处理的问题的能力,我们引入了两个开放式实验,如图9所示。第一个实验是一个整理房间的挑战,要求整理40个定制的家居物品;第二个实验是一个拼单词游戏,旨在使用给定的字母集A-L拼写出最长的单词。此外,我们还邀请人类参与者完成相同的任务。
图 9. 两个开放式实验
实验协议:我们邀请了十名参与者进行AB测试实验。其中七名参与者具有机器人开发经验,三名参与者有图像处理经验。我们设定了70分钟的时间限制。参与者通过与RobotGPT相同的提示了解开发要求。他们被要求通过编程完成表V中列出的10个任务。每位参与者可以自主决定尝试任务的顺序。
评估指标:我们通过五个指标评估性能:完成状态(CS),对于人类参与者,我们计算完成的数量;对于RobotGPT,则是是否完成任务;代码质量(CQ)指的是生成代码的评分范围为0到1,由Python静态代码分析工具Pylint进行分析;时间使用(TU)表示从阅读任务要求到在模拟中实现任务所耗费的时间(以秒为单位);外部帮助(EH)指参与者是否在互联网上搜索信息;对于人类测试,CQ、TU和EH表示完成任务的个体数据的平均值。
结果与分析:表V展示了AB测试的结果。与手动编码相比,RobotGPT在代码质量和时间消耗方面均表现出优势,得分分别为0.762和221.8秒,而人类的得分为0.70和554.9秒。只有五名参与者在70分钟内完成所有任务,因此即使对于编程背景强的工程师,通过手动编码生成机器人示范数据也是非常耗时的。
此外,RobotGPT在两个开放式任务——整理房间和拼单词游戏中明显优于人类。这主要得益于大型语言模型的知识库。在整理实验中,RobotGPT将物体分为十组,标签包括厨房用品、水果、零食、媒体、鞋类、办公用品、电子产品、个人护理产品、存储和饮料,耗时412秒,这一结果令人满意。如果物体数量从40增加到400,LLM驱动机器人将展现出更明显的优势。在拼单词游戏中,RobotGPT提供的结果是9个字母的单词“backfield”,而人类的最佳结果是7个字母的单词“blacked”。更重要的是,参与者需要在线搜索信息以完成这两个开放式任务,表明LLM拥有比人类更全面的知识。
V. 结论
在这封信中,我们首先开发了一个有效的提示结构,以增强ChatGPT对机器人环境和需要执行任务的理解。接下来,我们介绍了一个名为RobotGPT的框架,该框架利用ChatGPT的问题解决能力,实现更稳定的任务执行。在实验中,我们建立了一种衡量任务难度的指标,并观察到随着任务难度的增加,ChatGPT的执行成功率下降。相比之下,RobotGPT的任务执行成功率达到了91.5%,展现出更稳定的性能。更重要的是,这一智能体已在现实环境中运行。因此,利用ChatGPT作为专家训练RobotGPT是一种比直接使用ChatGPT作为任务规划者更稳定的方法。此外,AB测试显示,我们的基于大型语言模型的机器人在两个开放式任务中显著优于手动编码,这归功于大型语言模型的大量先验知识库。总体而言,机器人技术与大型语言模型的结合仍处于起步阶段。我们的工作只是初步探索,我们相信未来在这一领域的研究将致力于探索如何在机器人领域合理利用ChatGPT的能力。最近,研究提出了一种从约200个人类示范生成大规模数据集的方法,但仅适用于18个任务。通过结合大型模型扩展人类示范的规模和任务类型将是一个有趣的方向。