【论文笔记】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

  1. 研究背景:人类指令 → \rightarrow ChatGPT → \rightarrow 机器人执行代码 → \rightarrow 机器人执行

  2. 关键科学/技术问题

    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+1st,,s0) ,并用海量数据集超大规模神经网络拟合这个概率分布。概率分布天生蕴含不确定性,因此直接把预测 token 的结果部署到系统机器人上会造成 “同一个问题会有多种答案” 的现象,导致决策系统很不可靠。

    OpenAI 系的模型带有一个温度参数 temperature ,把 temperature 调成 0 确实可以增强稳定性,但是决策的多样性降低了,可能会表现得 “傻” 一点。我自己实践也是得出这样的结论,低的温度参数会在 “蕴含” 性语义上表现一板,显得比较木讷。

  3. 研究思路

    Our objective is to leverage ChatGPT’s problem-solving capabilities in robot manipulation and train a reliable agent.

    使用 ChatGPT 的问题解决能力来训练一个可靠的智能体。

  4. 具体技术路线

    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 的解决问题能力;
  5. 实验设置

    仿真 + 实物

  6. 实验结论

    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 操纵执行无人机导航、机器人抓取等任务。


作者的工作如下:

  1. 设计一种带有自我修正模块的有效提示结构,并对不同难度的任务进行了实验,以探索 ChatGPT 在机器人任务上的能力边界。设计了提示词框架,将环境信息、任务信息都翻译成自然语言。
  2. 设计一个系统,不直接执行 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 直接用于决策不好的原因:

  1. 首先,没有考虑机器人的物理约束和限制。
  2. ChatGPT 缺乏推理因果关系和时间依赖性的能力。

2

提出了一个与 ChatGPT 交互的框架,该框架由两部分组成:代码生成和纠错。

  • 在代码生成阶段,用户描述任务并提供示例来指导 ChatGPT 的响应(few-shot prompt)。
  • 在纠错阶段,运行时错误和任务失败都被认为是待纠正的。
(1) Prompting Description

5

提出了一种五部分提示方法,包括背景描述、物体信息、环境信息、任务信息和示例。

  • 背景描述:环境的基本信息,如环境的用途、布局、相关实体等。
  • 物体信息:所有对象的名称、形状、姿势和其他有用信息,例如它们的属性以及与其他对象的关系。
  • 环境信息:向 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

4

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} ApAxyθ 。其中 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

6

Task NameDescription
move cubeMove small cube above onto big cube.
stackingStack the given blocks together.
pyramid_stackingStack the given three blocks into a pyramid shape.
house_building_1Construct a tall building using the given three blocks and a triangle shape.
house_building_2Construct a bungalow using the given two cubes and a triangle shape.
house_building_3Construct a house using the given two cubes (red) ,a brick (blue) and a triangle shape.
bottle_arrangementArrange the given six bottles neatly on a tray.
bin_packingPick 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 。然后用比较简单的多项式来尝试拟合专家和工程师的评分。

7

于是就有了接下来的 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

8

在工作空间上方安装一个 RGB-D 传感器,以提供清晰的场景高度地图。在模拟环境中,机器人依靠 PyBullet 引擎进行运动控制。而在现实世界中,机器人则利用 MoveIt 和 ros_franka 来进行运动规划和执行。

3. Simulation Experiment

9

左边纯 gpt-3.5 和自己提出的 robot-gpt 做对比。作者分析了纯 gpt-3.5 效果不好的原因。

  1. Decision bot 的温度是 1.0 ,尽管每次都输入相同的提示,但生成的代码和结果的输出总是有显著的差异。
  2. 由 ChatGPT 生成的代码还包含语法或逻辑错误。虽然提出的自校正模块可以修改一些语法错误,但在大多数情况下,如果 ChatGPT 最初不能生成成功的代码,那么在这个实验中就很难获得成功。

ChatGPT 自己直接生成代码存在哪些错误?

10

  1. 由于误解了任务需求而导致的故障。
  2. 错误的动作序列规划,即机器人抓取图像中堆叠的块。这不合理,因为机器人应该是在抓取尚未堆叠的物体。
  3. 机器人的放置位置有偏差。

11

随着任务增加,ChatGPT 的成功率逐渐下降;而 RobotGPT 的成功率保持稳定。

4. Real Robot Experiment

12

  • 为了克服 sim2real 差距,在转换为高度图之前,将通过对象分割和去噪对原始深度图进行预处理;
  • 在真实的机器人测试中,机器人在进行拾取动作后,不会返回到观察位置来捕捉一个新的深度图

13

可以观察到,执行步骤较少的任务往往会有更多的成功尝试。

失败案例的主要原因不是由于智能体的错误预测,而是由于在放置过程中的精度不足,从而导致任务失败。

在闭环中探究如何让 LLMs 实现更精确的任务执行是值得研究的。

5. AB test

14

第一个实验涉及一个整理房间的挑战,需要组织 40 个自定义家居用品;

第二个实验是一个拼写单词游戏,旨在使用给定的一组字母 A-L 拼写最长的单词。

邀请人类受试者完成相同的任务。


我们通过五个指标来评价性能:

  • 完成状态(Completion State, CS),对于人类参与,计算完成次数;对于 RobotGPT 计算是否完成;
  • 代码质量(Code Quality, CQ)是指生成的代码从 0 到 1 ,由 Python 静态代码分析工具 Pylint 分析;
  • 时间使用(Time Usage, TU),从阅读任务要求实现任务模拟单位秒;
  • 外部帮助(External Help, EH)是指参与者是否在互联网上搜索信息;

对于人体测试, CQ 、 TU 和 EH 代表已经完成任务的个人数据的平均值。

15

在整理实验中,RobotGPT 将物体分为十组,分别标记为厨具、水果、零食、媒体、鞋类、办公用品、电子产品、个人护理产品、存储设备和饮料,耗时 412 秒。这是一个非常令人满意的结果。考虑到如果有 400 个物体而不是 40 个, LLMs 驱动的机器人的优势将变得更加明显。

在拼写游戏中,RobotGPT 提供的结果是一个 9 个字母的单词 “后场(backfield)” ,而人类反应的最佳结果是一个 7 个字母的单词 “被黑了(blacked)” 。更重要的是,参与者需要在线搜索信息来完成两项开放式的任务,这表明 LLMs 驱动的机器人比人类拥有更全面的知识。

V. CONCLUSION

最近提出了一种方法,从大约 200 个人类演示中生成大规模数据集,但仅用于 18 个任务。

通过合并大型模型来从人类演示中扩展任务的规模和类型将是一个有趣的方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/287937.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【leetcode】双“指针”

标题:【leetcode】双指针 水墨不写bug 我认为 讲清楚为什么要用双指针 比讲怎么用双指针更重要! (一)快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数…

我们常用Linux命令总结

Linux作为一种自由和开放源代码的操作系统,广泛应用于各种计算机系统中,尤其是服务器环境。在Linux系统中,命令行是管理和操作系统的主要方式之一,熟练掌握常用的Linux命令对于系统管理员、开发人员和其他使用者来说都是至关重要的…

HDLBits刷题Day28,3.2.5.14 3.2.5.14 one-hot FSM

3.2.5.14 one-hot FSM 问题描述 给定以下具有 1 个输入和 2 个输出的状态机: 假设此状态机使用 one-hot 编码,其中state[0]到state[9]分别对应于状态 S0 到 S9。除非另有说明,否则输出为零。 仅实现状态机的状态转换逻辑和输出逻辑部分。您在…

Jsonpath - 数据中快速查找和提取的强大工具

JSON(JavaScript Object Notation)在现代应用程序中广泛使用,但是如何在复杂的JSON数据中 查找和提取所需的信息呢? JSONPath是一种功能强大的查询语言,可以通过简单的表达式来快速准确地定位和提取JSON数据。本文将介…

Spring boot2.X 配置https

背景 最近项目组说要将 http 升级成 https 访问,证书也给到我们这边了,当然我们这边用的是个二级域名,采用的是通配符访问的方式,比如一级域名是这样(com.chinaunicom.cn),我们的则是&#xff0…

css预处理器scss的使用如何全局引入

目录 scss 基本功能 1、嵌套 2、变量 $ 3、mixin 和 include 4、extend 5、import scss 在项目中的使用 1、存放 scss 文件 2、引入 variables 和 mixins 2-1、局部引入 2-2、全局引入 3、入口文件中引入其他文件 项目中使用 css 预处理器,可以提高 cs…

【面试】Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?

Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法? Elasticsearch是一个分布式搜索和分析引擎,它在Linux环境下的性能和稳定性可以通过一些优化方法进行提升。以下是一些针对Linux环境下Elasticsearch部署的优化方法: 1. 内…

一文搞懂大疆机场kmz航线和图新地球导出的kmz的区别

0序: 近期有用户问“ 把KML文件放到图新后,想转出来KMZ(大疆的机场用的格式)但是转出来的KMZ显示格式不对 ” 之前只是知道大疆的航线规划采用的是kml规范,但具体是什么样并不清楚。就这这个问题把这个事情给弄明白。…

京东电商数据采集的三种方式|电商数据API接口实时数据采集

要实现电商的数据分析,电商数据采集是很重要的一环。电商数据采集要分几个步骤完成?每个步骤的意义是什么?每个步骤分别需要怎样的技能?今天这篇文章告诉你。 电商的数据通常需要通过数据采集的方式获得。电商数据采集方法共分为…

Java入门之数据类型

一、数据类型 基本数据类型 (1)如果要定义“long类型的变量要在数值后面加一个L作为后缀” (2)如果要定义float类型的变量的时候数据值也要加一个作为后缀 小结: 练习 内容: 姓名:巴巴托斯 &…

软件测试技术之登录页面测试用例的设计方法

相信大家都有过写登录测试用例的经验,相较于开发人员编写代码而言,测试人员编写用例同样重要。本文作者总结了一些关于登录用例的经验。 一、功能测试用例设计: 1、正常登录场景 测试用例1:输入正确的用户名和密码,验证…

JVM(五)——类加载阶段

一、类加载阶段 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resol…

Docker构建多平台(x86,arm64)构架镜像

这里写自定义目录标题 背景配置buildx开启experimental重启检查 打包 背景 docker镜像需要支持不同平台架构 配置buildx 开启experimental vi /etc/docker/daemon.json {"experimental": true }或者 重启检查 # 验证buildx版本 docker buildx version# 重启do…

Oracle参数文件详解

1、参数文件的作用 参数文件用于存放实例所需要的初始化参数,因为多数初始化参数都具有默认值,所以参数文件实际存放了非默认的初始化参数。 2、参数文件类型 1)服务端参数文件,又称为 spfile 二进制的文件,命名规则…

Set和Map数据结构

Set和Map数据结构理解 Set: 1、es6新的数据结构,类似数组,但成员唯一 2、实例属性:Set.prototype.size返回Set实例的成员总数 3、操作方法:add、delete、has、clear 4、遍历操作:forEach、keys、values、en…

前端 CSS 经典:grid 栅格布局

前言:Grid 布局是将容器划分成"行"和"列",产生单元格,然后将"项目"分配给划分好的单元格,因为有行和列,可以看作是二维布局。 一 术语 1. 容器 采用网格布局的区域,也就是…

MySQL使用教程:数据库、表操作

目录 1. 免密码登录MySQL1.1 免密码配置1.2 登录选项介绍 2. MySQL基础配置:my.cnf3. 开机自启动设置(可选设置)4. 查看存储引擎5. 查看系统的编码规则和校验规则6. 数据库的操作6.1 查看数据库6.2 创建数据库 create database6.3 删除数据库…

航空实时监控

1、从Kafka中读取飞机数据,并进行清洗 此步骤在前面的“使用Spark清洗统计业务数据并保存到数据库中”任务阶段应该已经完成。如果没有完成,请参考源代码自行完成。核心类主要有三个:SparkStreamingApplication类、SparkUtil类和MapManager类…

3.1 SQL概述

SQL(Structured Query Language) 结构化查询语言,是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言 功能:查询,数据库模式创建,数据库数据的插入与修改,数据库完整性、安全…

pytest之fixture结合conftest.py文件使用+断言实战

pytest之fixture结合conftest.py文件使用 conftest.py--存放固件固件的优先级pytest执行流程pytest之断言实战pytest结合allure-pytest插件生成美观的报告 conftest.py–存放固件 在一个项目的测试中,大多数情况下会有多个类、模块、或者包要使用相同的测试夹具。这…