【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT
【论文笔记】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 个任务。
通过合并大型模型来从人类演示中扩展任务的规模和类型将是一个有趣的方向。
相关文章:

【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT
【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPT 文章目录 【论文笔记】RobotGPT: Robot Manipulation Learning From ChatGPTAbstractI. INTRODUCTIONII. RELATED WORK1. LLMs for Robotics2. Robot Learning III. METHODOLOGY1. ChatGPT Prompts for Robot …...

深度学习 Lecture 4 Adam算法、全连接层与卷积层的区别、图计算和反向传播
一、Adam算法(自适应矩估计) 全名:Adapative Moment Estimation 目的:最小化代价函数(和梯度下降一样) 本质:根据更新学习率后的情况自动更新学习率的值(可能是自动增大,也可能是…...

uniApp中使用小程序XR-Frame创建3D场景(1)环境搭建
1.XR-Frame简介 XR-Frame作为微信小程序官方推出的3D框架,是目前所有小程序平台中3D效果最好的一个,由于其本身针对微信小程序做了优化,在性能方面比其他第三方库都要高很多。 2.与Three.js的区别 做3D小程序的同学们对Three.js一定不陌生…...

AI基础知识(4)--贝叶斯分类器
1.什么是贝叶斯判定准则(Bayes decision rule)?什么是贝叶斯最优分类器(Bayes optimal classifier)? 贝叶斯判定准则:为最小化总体风险,只需在每个样本上选择那个能使条件风险最小的…...

填补市场空白,Apache TsFile 如何重新定义时序数据管理
欢迎全球开发者参与到 Apache TsFile 项目中。 刚刚过去的 2023 年,国产开源技术再次获得国际认可。 2023 年 11 月 15 日,经全球最大的开源软件基金会 ASF 董事会投票决议,时序数据文件格式 TsFile 正式通过,直接晋升为 Apache T…...

Docker 笔记(七)--打包软件生成镜像
目录 1. 背景2. 参考3. 文档3.1 使用docker container commit命令构建镜像3.1.1 [Docker官方文档-docker container commit](https://docs.docker.com/reference/cli/docker/container/commit/)Description(概述)Options(选项)Exa…...

图论06-飞地的数量(Java)
6.飞地的数量 题目描述 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。 返回网格中 无法…...
Java设计模式之单例设计模式
单例设计模式就是保证整个软件系统中,某个类只能存在一个对象实例,并且该类只提供一个取得该对象的方法。 单例设计模式包括两种:饿汉式和懒汉式。 饿汉式: 含义: 在类加载时就创建并初始化单例对象。这种方式确保了…...

多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测
多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测 目录 多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.M…...
深入了解Android垃圾回收机制
文章目录 一、内存分配二、垃圾回收触发条件三、GC算法3.1 Dalvik虚拟机的GC算法3.2 ART的GC算法 四、优化GC性能五、监控GC耗时情况六、总结 在Android应用开发中,内存管理和垃圾回收(GC)对于应用性能和稳定性至关重要。理解GC机制有助于我们…...
如何学好Python语言
学习Python:一场充满探索与实践的编程之旅 Python,作为一种解释型、交互式和面向对象的编程语言,近年来在数据科学、人工智能、Web开发等多个领域得到了广泛的应用。掌握Python,不仅可以提升个人的编程技能,还能够为未…...

计算机408网课评测+资料分享
408当然有比较好的网课推荐,比如王道的视频课 现在大部分人备战408基本都用王道的讲义,然后再搭配王道408的课程来听,可以学的很好。 其中408视频课中,我认为讲的比较好的是数据结构,和操作系统,计算机组…...

使用 ZipArchiveInputStream 读取压缩包内文件总数
读取压缩包内文件总数 简介 ZipArchiveInputStream 是 Apache Commons Compress 库中的一个类,用于读取 ZIP 格式的压缩文件。在处理 ZIP 文件时,编码格式是一个重要的问题,因为它决定了如何解释文件中的字符数据。通常情况下,Z…...
JavaScript对象修饰教程
在JavaScript中,对象修饰是一种常见的编程模式,用于动态地向对象添加新的功能或修改现有功能,同时保持对象的原始结构不变。对象修饰可以帮助我们实现代码的复用、扩展和维护,让代码更加灵活和可扩展。本文将深入探讨JavaScript对…...

转置卷积(transposed-conv)
一、什么是转置卷积 1、转置卷积的背景 通常,对图像进行多次卷积运算后,特征图的尺寸会不断缩小。而对于某些特定任务 (如图像分割和图像生成等),需将图像恢复到原尺寸再操作。这个将图像由小分辨率映射到大分辨率的尺寸恢复操作,…...
P1481 魔族密码
P1481 魔族密码 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 字典树 在插入字符串 s s s时,不断记录 s 0... k s_{0...k} s0...k的个数取最大即可。 #include <bits/stdc.h> using namespace std; const int N 1e5 21; int cnt[N], tr[N][30], idx,…...

无人机/飞控--ArduPilot、PX4学习记录(2)
这是一篇碎碎念,零零碎碎的记录了环境配置过程,仅供本人记录学习历程和参考。(记录的挺乱的,但是文章链接里的博客写的是真好) 本章主要完成的目标: 安装PX4 并 成功运行出3D无人机界面。 参考文章: 搭建PX4环境&…...

【Arxml专题】-29-使用Cantools将CAN Matrix Arxml自动生成C语言代码
目录 1 安装Python和Cantools 1.1 查看Python已安装的Package包 1.2 在Python中安装Cantools插件包 1.3 获取更多Cantools工具的更新动态 2 CAN Matrix Arxml自动生成C语言代码 2.1 批处理文件CAN_Matrix_Arxml_To_C.bat内容说明 2.2 CAN Matrix Arxml文件要求 2.3 如何…...
【id:21】【20分】E. 抄袭查找(结构体+指针+函数)
题目描述 已知一群学生的考试试卷,要求对试卷内容进行对比,查找是否有抄袭。 每张试卷包含:学号(整数类型)、题目1答案(字符串类型)、题目2答案(字符串类型)、题目3答案…...
ASP.NET-常用控件总结
一、ASP.NET基础控件 1、asp:TextBox (输入框) ASP.NET TextBox 控件用于接收用户输入。 <asp:TextBox ID"txtInput" runat"server"></asp:TextBox>2、asp:DropDownList (下拉框) ASP.NET DropDownList 控件用于提供一个下拉列表供用户选择…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...