【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT
文章目录
- 【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT
- Abstract
- I. INTRODUCTION
- II. RELATED WORK
- 1. LLMs for Robotics
- 2. Robot Learning
- III. METHODOLOGY
- 1. ChatGPT Prompts for Robot Manipulation
- (1) Prompting Description
- (2) Self-Correction
- (3) Generated Code Evaluation
- 2. Robot Learning
- (1). Action, State Space and Reward
- (2). Algorithm
- IV. EXPERIMENTS
- 1. Metrics
- 2. Experiment Setup
- 3. Simulation Experiment
- 4. Real Robot Experiment
- 5. AB test
- V. CONCLUSION
Abstract
-
研究背景:人类指令 → \rightarrow → ChatGPT → \rightarrow → 机器人执行代码 → \rightarrow → 机器人执行
-
关键科学/技术问题:
The execution code generated by ChatGPT cannot guarantee the stability and safety of the system.
用 ChatGPT 生成的执行代码不能保证系统的稳定性和安全性。
大规模语言模型的本质是基于已知的 token 预测下一个/下几个 token 。目前把语言模型建模成了概率分布 p ( s t + 1 ∣ s t , ⋯ , s 0 ) p(s_{t+1}|s_{t},\cdots,s_{0}) p(st+1∣st,⋯,s0) ,并用海量数据集和超大规模神经网络拟合这个概率分布。概率分布天生蕴含不确定性,因此直接把预测 token 的结果部署到系统机器人上会造成 “同一个问题会有多种答案” 的现象,导致决策系统很不可靠。
OpenAI 系的模型带有一个温度参数
temperature
,把temperature
调成 0 确实可以增强稳定性,但是决策的多样性降低了,可能会表现得 “傻” 一点。我自己实践也是得出这样的结论,低的温度参数会在 “蕴含” 性语义上表现一板,显得比较木讷。 -
研究思路:
Our objective is to leverage ChatGPT’s problem-solving capabilities in robot manipulation and train a reliable agent.
使用 ChatGPT 的问题解决能力来训练一个可靠的智能体。
-
具体技术路线:
The framework includes an effective prompt structure and a robust learning model. Additionally, we introduce a metric for measuring task difficulty to evaluate ChatGPT’s performance in robot manipulation.
- 一个高效的提示学习框架 → \rightarrow → 使用 ChatGPT 解决问题;
- 一个鲁棒学习的模型 → \rightarrow → 训练一个可靠的智能体;
- 一个评估指标 → \rightarrow → 衡量任务的难度 → \rightarrow → 评测 ChatGPT 的解决问题能力;
-
实验设置:
仿真 + 实物
-
实验结论:
Compared to directly using ChatGPT to generate code, our framework signifificantly improves task success rates, with an average increase from 38.5 % \% % to 91.5 % \% %. Therefore, training a RobotGPT by utilizing ChatGPT as an expert is a more stable approach compared to directly using ChatGPT as a task planner.
任务成功率翻倍上升。与直接使用 ChatGPT 作为任务规划器相比,利用 ChatGPT 作为专家来训练 RobotGPT 模型是一种更稳定的方法。
I. INTRODUCTION
先前的工作,例如 Microsoft 技术报告,或者 Text2Motion 工作,都把 LLMs 当作 zero-shot 的行为规划器。但是截止到目前还是没有学者很清楚的解释、验证为什么 LLM 能实现 zero-shot 的行为规划,普遍理解在于 LLM 在预训练阶段的海量文本中蕴含了决策规划知识,然后在预训练中学进来了。
LLMs 的快速进步对人机交互也产生了重大影响。为了增强用户普及度和使用便利性,自然交互*(不需要使用额外的培训,可直接上手的交互)*是关键技术之一。目前在自然语言交互的研究已经取得了一些进展。
Spoken language interaction with robots: Recommendations for future research.
现存工作主流利用 ChatGPT 生成可以直接部署在机器人上的代码,需要提前用自然语言描述任务的目标以及 ChatGPT 可用的功能库,经过不断的循环反馈后,最终用 ChatGPT 操纵执行无人机导航、机器人抓取等任务。
作者的工作如下:
- 设计一种带有自我修正模块的有效提示结构,并对不同难度的任务进行了实验,以探索 ChatGPT 在机器人任务上的能力边界。设计了提示词框架,将环境信息、任务信息都翻译成自然语言。
- 设计一个系统,不直接执行 ChatGPT 生成的代码,而是采用一个智能体来学习 ChatGPT 生成的规划策略,从而增强系统的稳定性。
II. RELATED WORK
1. LLMs for Robotics
总体上分为高级解释(如语义解析、行为规划)和低级策略(如基于模型、模仿学习和强化学习)。
问题:LLMs 做规划决策的稳定性。
Text2Motion: From natural language instructions to feasible plans
Code as policies: Language model programs for embodied control
Robots that use language
Toward understanding natural language directions
Learning language-conditioned robot behavior from offline data and crowd-sourced annotation
Language models of code are few-shot commonsense learners
Language models as zero-shot planners: Extracting actionable knowledge for embodied agents
Do as I can, not as I say: Grounding language in robotic affordances
TidyBot: Personalized robot assistance with large language models
2. Robot Learning
主流框架还是强化学习和模仿学习。对比不同的强化学习算法,就需要不同的仿真环境 benchmark 。
问题:RL、IL 的数据收集问题。
III. METHODOLOGY
1. ChatGPT Prompts for Robot Manipulation
作者首先分析了 ChatGPT 直接用于决策不好的原因:
- 首先,没有考虑机器人的物理约束和限制。
- ChatGPT 缺乏推理因果关系和时间依赖性的能力。
提出了一个与 ChatGPT 交互的框架,该框架由两部分组成:代码生成和纠错。
- 在代码生成阶段,用户描述任务并提供示例来指导 ChatGPT 的响应(few-shot prompt)。
- 在纠错阶段,运行时错误和任务失败都被认为是待纠正的。
(1) Prompting Description
提出了一种五部分提示方法,包括背景描述、物体信息、环境信息、任务信息和示例。
- 背景描述:环境的基本信息,如环境的用途、布局、相关实体等。
- 物体信息:所有对象的名称、形状、姿势和其他有用信息,例如它们的属性以及与其他对象的关系。
- 环境信息:向 ChatGPT 描述可用于执行任务的机器人和 API 函数。
- 任务信息:向 ChatGPT 描述具体任务,通常是为给定的
ob
生成 Python 代码。 - 示例部分:向 ChatGPT 描述一些示例,以帮助更好地理解环境和 API 用法。
(2) Self-Correction
在为复杂任务生成响应时,ChatGPT 可能偶尔会产生需要纠正的小错误或语法错误。
介绍了一种纠正 ChatGPT 响应的交互式方法。为了采用这种方法,首先在模拟器中执行生成的代码并评估结果。
Step1. [Error Caption] 生成的代码将逐行执行,当发生运行时错误时,运行时错误(包括错误消息及其位置)将由 Code Error Catching 模块捕获。
Step2. [Rethink] 将这些数据发送回 ChatGPT 决策机器人进行进一步分析。在结果是失败的情况下,校正机器人可以根据提示分析失败的潜在原因,并生成响应,解释任务失败的原因。
Step3. [Regenerate] 原来的 ChatGPT 决策机器人会根据校正机器人的故障分析重新生成代码。
利用这些反馈,ChatGPT 修改其响应并生成准确的代码。此交互式过程最多可以迭代三次。
(3) Generated Code Evaluation
使用名为 evaluation bot 的 ChatGPT 来生成评估代码。使用 decision bot 的 ChatGPT 来做决策。
Evaluation bot 提示的结构保持不变,但背景描述和机器人 API 的内容有所不同。Evaluation bot 生成的函数 is_task_success()
将作为确定整个任务成功的标准。
人类的作用是仔细检查生成的评估代码是否正确。如果生成了错误的评估代码,人类将介入进行纠正。这样的设计可以最大限度地减轻人类的负担。
2. Robot Learning
机器人能够吸收 ChatGPT 解决一般任务的知识来学习策略。
对于机器人学习框架,利用最先进的开源机器人操作基准和学习框架 BulletArm 用 ChatGPT 生成演示训练。
(1). Action, State Space and Reward
ChatGPT 驱动的专家演示是在模拟环境中生成,该环境包括 Panda 机器人,其摄像头安装在工作空间顶部。
状态空间由自上而下的高度图 H H H、眼在手上图像 I I I 和抓手状态 g ∈ { H o l d i n g , E m p t y } g\in \{Holding, Empty\} g∈{Holding,Empty} 组成。
对于动作空间,它包括机器人技能 A s ∈ { P i c k , P l a c e } A_s \in \{Pick, Place\} As∈{Pick,Place} 和目标姿势 A p ∈ A x y θ A_p \in A^{xy\theta} Ap∈Axyθ 。其中 x x x 和 y y y 表示末端执行器的 X Y XY XY 坐标, θ θ θ 表示沿 z z z 轴旋转。
奖励被设置为稀疏奖励函数,其中当所有状态-动作对都达到目标状态时,奖励为 1 1 1 ,否则为 0 0 0 。
(2). Algorithm
SDQfD 算法 + Equivariant ASR 网络结构。
损失函数是 n n n 步TD损失和严格的大边际损失的总和。
IV. EXPERIMENTS
Task Name | Description |
---|---|
move cube | Move small cube above onto big cube. |
stacking | Stack the given blocks together. |
pyramid_stacking | Stack the given three blocks into a pyramid shape. |
house_building_1 | Construct a tall building using the given three blocks and a triangle shape. |
house_building_2 | Construct a bungalow using the given two cubes and a triangle shape. |
house_building_3 | Construct a house using the given two cubes (red) ,a brick (blue) and a triangle shape. |
bottle_arrangement | Arrange the given six bottles neatly on a tray. |
bin_packing | Pick up blocks on the table and place on tray. |
1. Metrics
对象的数量 o o o 、对象类别 c c c 和任务步骤的数量 s s s 。
这里提一下作者的思路:作者召集很多机器人的相关专家和工程师,对任务进行 “简单” 、 “复杂” 评分。然后统计了每个任务物体的数量 o o o 、类别 c c c 和任务步骤 s s s 。然后用比较简单的多项式来尝试拟合专家和工程师的评分。
于是就有了接下来的
s
c
o
r
e
score
score 分数。
s
c
o
r
e
=
o
+
o
×
c
+
s
score = o+o\times c +s
score=o+o×c+s
在接下来的定量实验中,将为每个任务生成 25 个随机场景,并计算成功的尝试次数。
2. Experiment Setup
在工作空间上方安装一个 RGB-D 传感器,以提供清晰的场景高度地图。在模拟环境中,机器人依靠 PyBullet 引擎进行运动控制。而在现实世界中,机器人则利用 MoveIt 和 ros_franka 来进行运动规划和执行。
3. Simulation Experiment
左边纯 gpt-3.5 和自己提出的 robot-gpt 做对比。作者分析了纯 gpt-3.5 效果不好的原因。
- Decision bot 的温度是 1.0 ,尽管每次都输入相同的提示,但生成的代码和结果的输出总是有显著的差异。
- 由 ChatGPT 生成的代码还包含语法或逻辑错误。虽然提出的自校正模块可以修改一些语法错误,但在大多数情况下,如果 ChatGPT 最初不能生成成功的代码,那么在这个实验中就很难获得成功。
ChatGPT 自己直接生成代码存在哪些错误?
- 由于误解了任务需求而导致的故障。
- 错误的动作序列规划,即机器人抓取图像中堆叠的块。这不合理,因为机器人应该是在抓取尚未堆叠的物体。
- 机器人的放置位置有偏差。
随着任务增加,ChatGPT 的成功率逐渐下降;而 RobotGPT 的成功率保持稳定。
4. Real Robot Experiment
- 为了克服 sim2real 差距,在转换为高度图之前,将通过对象分割和去噪对原始深度图进行预处理;
- 在真实的机器人测试中,机器人在进行拾取动作后,不会返回到观察位置来捕捉一个新的深度图
可以观察到,执行步骤较少的任务往往会有更多的成功尝试。
失败案例的主要原因不是由于智能体的错误预测,而是由于在放置过程中的精度不足,从而导致任务失败。
在闭环中探究如何让 LLMs 实现更精确的任务执行是值得研究的。
5. AB test
第一个实验涉及一个整理房间的挑战,需要组织 40 个自定义家居用品;
第二个实验是一个拼写单词游戏,旨在使用给定的一组字母 A-L 拼写最长的单词。
邀请人类受试者完成相同的任务。
我们通过五个指标来评价性能:
- 完成状态(Completion State, CS),对于人类参与,计算完成次数;对于 RobotGPT 计算是否完成;
- 代码质量(Code Quality, CQ)是指生成的代码从 0 到 1 ,由 Python 静态代码分析工具 Pylint 分析;
- 时间使用(Time Usage, TU),从阅读任务要求实现任务模拟单位秒;
- 外部帮助(External Help, EH)是指参与者是否在互联网上搜索信息;
对于人体测试, CQ 、 TU 和 EH 代表已经完成任务的个人数据的平均值。
在整理实验中,RobotGPT 将物体分为十组,分别标记为厨具、水果、零食、媒体、鞋类、办公用品、电子产品、个人护理产品、存储设备和饮料,耗时 412 秒。这是一个非常令人满意的结果。考虑到如果有 400 个物体而不是 40 个, LLMs 驱动的机器人的优势将变得更加明显。
在拼写游戏中,RobotGPT 提供的结果是一个 9 个字母的单词 “后场(backfield)” ,而人类反应的最佳结果是一个 7 个字母的单词 “被黑了(blacked)” 。更重要的是,参与者需要在线搜索信息来完成两项开放式的任务,这表明 LLMs 驱动的机器人比人类拥有更全面的知识。
V. CONCLUSION
最近提出了一种方法,从大约 200 个人类演示中生成大规模数据集,但仅用于 18 个任务。
通过合并大型模型来从人类演示中扩展任务的规模和类型将是一个有趣的方向。