myCobot机器人ChatGPT应用:设计原则和模型能力

news2024/11/23 21:58:02

我们将 ChatGPT 的功能扩展到机器人,并通过语言直观地控制机器人手臂、无人机和家庭助理机器人等多个平台。

你有没有想过用你自己的话告诉机器人该怎么做,就像你对人类一样?只是告诉你的家庭助理机器人:“请加热我的午餐”,然后让它自己找到微波炉,这不是很神奇吗?尽管语言是我们表达意图的最直观方式,但我们仍然严重依赖手写代码来控制机器人。我们的团队一直在探索如何改变这一现实,并使用OpenAI的新AI语言模型ChatGPT实现自然的人机交互。

ChatGPT 是一种在大量文本和人类交互语料库上训练的语言模型,使其能够对各种提示和问题生成连贯且语法正确的响应。我们这项研究的目标是看看ChatGPT是否可以超越文本思考,并推理物理世界来帮助完成机器人任务。我们希望帮助人们更轻松地与机器人互动,而无需学习复杂的编程语言或有关机器人系统的详细信息。这里的关键挑战是教 ChatGPT 如何解决考虑物理定律、操作环境背景以及机器人的物理动作如何改变世界状态的问题。

事实证明,ChatGPT 可以自己做很多事情,但它仍然需要一些帮助。我们的技术论文描述了一系列设计原则,可用于指导语言模型解决机器人任务。这些包括但不限于特殊的提示结构、高级 API 和通过文本的人工反馈。我们相信,我们的工作只是我们开发机器人系统方式转变的开始,我们希望激励其他研究人员进入这个令人兴奋的领域。继续阅读有关我们的方法和想法的更多技术细节。

当今机器人技术面临的挑战,以及 ChatGPT 如何提供帮助

当前的机器人管道始于工程师或技术用户,他们需要将任务的要求转换为系统代码。工程师坐在循环中,这意味着他们需要编写新的代码和规范来纠正机器人的行为。总的来说,这个过程很慢(用户需要编写低级代码),昂贵(需要具有深厚机器人知识的高技能用户)和低效(需要多次交互才能使事情正常工作)。

ChatGPT 解锁了一种新的机器人范式,并允许(潜在的非技术)用户坐在循环中,在监控机器人性能的同时向大型语言模型 (LLM) 提供高级反馈。通过遵循我们的设计原则,ChatGPT 可以为机器人场景生成代码。无需任何微调,我们就利用LLM的知识来控制各种任务的不同机器人外形。在我们的工作中,我们展示了ChatGPT解决机器人难题的多个示例,以及在操纵,空中和导航领域的复杂机器人部署。

使用ChatGPT的机器人技术:设计原则

催生法学硕士是一门高度实证的科学。通过反复试验,我们构建了一种方法和一套设计原则,用于编写机器人任务的提示:

1. 首先,我们定义一组高级机器人 API 或函数库。该库可以特定于特定的机器人,并且应映射到机器人的控制堆栈或感知库中的现有低级实现。为高级 API 使用描述性名称非常重要,这样 ChatGPT 就可以推理它们的行为;

2. 接下来,我们为 ChatGPT 编写一个文本提示,描述任务目标,同时明确说明高级库中的哪些函数可用。提示还可以包含有关任务约束的信息,

3. 或者 ChatGPT 应该如何形成它的答案(特定的编码语言,使用辅助解析元素);用户通过直接检查或使用模拟器来评估 ChatGPT 的代码输出。如果需要,用户使用自然语言向 ChatGPT 提供有关答案质量和安全性的反馈。

4.当用户对解决方案感到满意时,可以将最终代码部署到机器人上。

理论够了...ChatGPT到底能做什么?

让我们看一个例子...您可以在我们的代码存储库中找到更多案例研究。

(这里我们只举例一个比较有趣的例子,原文中还有其他机器人的例子)

循环用户:当复杂任务需要对话时

接下来,我们在机器人手臂的操作场景中使用了 ChatGPT。我们使用对话反馈来教模型如何将最初提供的 API 组合成更复杂的高级函数:ChatGPT 自己编码。使用基于课程的策略,该模型能够将这些学到的技能逻辑地链接在一起,以执行堆叠块等操作。

此外,该模型还展示了一个有趣的示例,即在用木块构建Microsoft徽标时桥接文本域和物理域。它不仅能够从其内部知识库中调用徽标,还能够“绘制”徽标(作为SVG代码),然后使用上面学到的技能来确定哪些现有的机器人动作可以构成其物理形式。

以下是与chatGPT关于如何控制机器人手臂以制作具有Microsoft徽标颜色的SVG文件的对话。

用户:

想象一下,我们正在使用一个机械手机器人。这是一个具有 6 个自由度的机械臂,其末端执行器上连接着一个抽吸泵。我希望你能协助我向这个机器人发送命令,给定一个场景和一个任务。

在任何时候,您都可以访问以下功能:

grab():打开抽吸泵抓取物体

release():关闭抽吸泵以释放物体

get_position(对象):给定一个对象名称的字符串,返回真空泵接触对象顶部的坐标和方向 [X, Y, Z, Y, 偏航, 俯仰, 滚动]

move_to(位置):它将抽吸泵移动到给定位置 [X, Y, Z, 偏航, 俯仰, 横滚]。

您可以使用这些函数创建新函数,但不允许使用任何其他假设函数。

保持解决方案简单明了。位置以毫米为单位,角度以度为单位。您也可以使用标签“问题 - ”提出澄清问题。下面是一个示例方案,演示了如何提出澄清问题。

假设一个场景包含两个球体。

聊天:

问题 - 有两个领域。你想让我拿哪一个?

用户:

球体 1,请。使用 python 代码来表达您的解决方案。准备好了吗?

聊天:

是的,我准备好了。请描述场景和任务。

用户:

场景中有以下对象:白垫、方框、蓝方块、黄色方块、绿色方块、红色方块、棕色方块 1、棕色方块 2。这些积木是高度为 40 毫米的立方体,位于 80 毫米深的盒子内。这些块只能从盒子的顶部到达。我想让你学习捡起一个物体并握住它的技巧。为此,您需要在物体上方移动安全距离(100 毫米),到达物体,抓住它并将其提起。

聊天:

理解。这是一个 Python 函数,它采用对象的名称,将机器人手臂移动到对象上方,抓住它,然后将对象移动到对象上方 100 毫米的安全距离。请注意,该函数假定机器人手臂最初处于安全的起始位置。

import timedef pick_up_object(object_name):# get the position of the objectobject_pos = get_position(object_name)# move the robot arm to a safe position above the objectsafe_pos = [object_pos[0], object_pos[1], object_pos[2]+100, object_pos[3], object_pos[4], object_pos[5]]move_to(safe_pos)# move the robot arm to the object's positionmove_to(object_pos)# grab the objectgrab()time.sleep(1) # wait for the object to be firmly attached# move the robot arm back to the safe position above the objectmove_to(safe_pos)

复制

要使用此功能,只需调用pick_up_object并以字符串形式提供要拾取的对象的名称,例如 pick_up_object(“红色块”)。

用户:

伟大!现在我想让你学习如何在一个位置放置和反对。考虑到您拿着一个通用对象,您首先需要移动到目标位置上方的安全位置,将对象放下,然后释放它。

聊天:

理解。这是一个Python函数,它占据了应该放置物体的位置,将机器人手臂移动到该位置上方,将物体放下,然后释放它。请注意,该函数假定机器人手臂正在握住一个物体。

def place_object(position):# move the robot arm to a safe position above the target locationsafe_pos = [position[0], position[1], position[2]+100, position[3], position[4], position[5]]move_to(safe_pos)# move the robot arm to the target locationmove_to(position)# release the objectrelease()# move the robot arm back to the safe position above the target locationmove_to(safe_pos)

复制

要使用此功能,只需调用 place_object 并将目标位置作为 6 个数字的列表提供,例如 place_object([100, 200, 50, 0, 0, 0])。请注意,位置的单位以毫米为单位,方向角以度为单位。

用户:

伟大!现在我希望你使用这些技能来捡起绿色块并放在白色垫子上。所有块的高度均为 40 毫米。

聊天:

确定!这是Python代码,用于拾取绿色块并将其放在白色垫上:

# get the positions of the green block and white padgreen_pos = get_position("green block")white_pos = get_position("white pad")# pick up the green blockpick_up_object("green block")# calculate the position to place the block on the white padplace_pos = [white_pos[0], white_pos[1], white_pos[2]+40, 0, 0, 0]# place the block on the white padplace_object(place_pos)

复制

此代码使用 get_position 函数获取绿色块和白垫的位置,使用我们之前定义的pick_up_object函数拾取绿色块,计算将块放置在白垫上的位置,并使用我们之前定义的place_object函数将块放置在白垫上。请注意,我们将块的高度(40 mm)添加到白色垫子的高度上,以确保块放置在垫子的顶部。

用户:

伟大!现在我希望你把两个棕色块堆叠在绿色块的顶部。

聊天:

确定!以下是将两个棕色块堆叠在绿色块顶部的 Python 代码:

# get the positions of the green block and both brown blocksgreen_pos = get_position("green block")brown1_pos = get_position("brown block 1")brown2_pos = get_position("brown block 2")# pick up the first brown blockpick_up_object("brown block 1")# calculate the position to place the block on top of the green blockplace_pos = [green_pos[0], green_pos[1], green_pos[2]+40, 0, 0, 0]# place the first brown block on top of the green blockplace_object(place_pos)# pick up the second brown blockpick_up_object("brown block 2")# calculate the position to place the block on top of the first brown blockplace_pos = [green_pos[0], green_pos[1], green_pos[2]+80, 0, 0, 0]# place the second brown block on top of the first brown blockplace_object(place_pos) 

复制

此代码使用 get_position 函数获取绿色块和两个棕色块的位置,使用我们之前定义的 pick_up_object 函数拾取第一个棕色块,计算将第一个棕色块放置在绿色块顶部的位置,并使用我们之前定义的place_object函数将第一个棕色块放在绿色块的顶部。然后,它拾取第二个棕色块,计算将第二个棕色块放置在第一个棕色块之上的位置,并使用我们之前定义的place_object函数将第二个棕色块放在第一个棕色块的顶部。请注意,我们将绿色块的高度(40 mm)添加到前一个块的高度上,以确保该块放置在前一个块的顶部。

用户:

棒!我现在想使用这些块在白垫上构建微软的徽标。它由四种颜色组成,形成一个正方形,左下角为蓝色,右下角为黄色,左上角为红色,右上角为绿色。

聊天:

确定!以下是使用块在白色垫上构建Microsoft徽标的Python代码:

# get the positions of the blocks and the white padwhite_pad_pos = get_position("white pad")blue_pos = get_position("blue block")yellow_pos = get_position("yellow block")red_pos = get_position("red block")green_pos = get_position("green block")# pick up the blue blockpick_up_object("blue block")# calculate the position to place the blue blockplace_pos = [white_pad_pos[0]-20, white_pad_pos[1]-20, white_pad_pos[2]+40, 0, 0, 0]# place the blue block on the white padplace_object(place_pos)# pick up the yellow blockpick_up_object("yellow block")# calculate the position to place the yellow blockplace_pos = [white_pad_pos[0]+20, white_pad_pos[1]-20, white_pad_pos[2]+40, 0, 0, 0]# place the yellow block on the white padplace_object(place_pos)# pick up the red blockpick_up_object("red block")# calculate the position to place the red blockplace_pos = [white_pad_pos[0]-20, white_pad_pos[1]+20, white_pad_pos[2]+40, 0, 0, 0]# place the red block on the white padplace_object(place_pos)# pick up the green blockpick_up_object("green block")# calculate the position to place the green blockplace_pos = [white_pad_pos[0]+20, white_pad_pos[1]+20, white_pad_pos[2]+40, 0, 0, 0]# place the green block on the white padplace_object(place_pos)

此代码使用 get_position 函数获取白垫和所有四个块的位置,使用我们之前定义的pick_up_object函数依次拾取每个块,计算将块放置在白垫上的位置,并使用我们之前定义的place_object函数将块放在白垫上。我们使用块颜色来确保正确构建徽标。我们将蓝色块放在左下角位置,黄色块放在右下位置,红色块放在左上角位置,绿色块放在右上角位置,如提示中指定。

将机器人技术带出实验室,走向世界

我们很高兴发布这些技术,旨在将机器人技术带给更广泛的受众。我们相信,基于语言的机器人控制将是将机器人技术带出科学实验室并交到日常用户手中的基础。

也就是说,我们确实强调,ChatGPT 的输出并不意味着在没有仔细分析的情况下直接部署在机器人上。我们鼓励用户利用仿真的强大功能,以便在潜在的实际部署之前评估这些算法,并始终采取必要的安全预防措施。我们的工作只代表了机器人领域大型语言模型交叉点的一小部分,我们希望激发未来的大部分工作。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot+ Dubbo + Mybatis + Nacos +Seata整合来实现Dubbo分布式事务

1.简介 “ 本文主要介绍SpringBoot2.1.5 Dubbo 2.7.3 Mybatis 3.4.2 Nacos 1.1.3 Seata 0.8.0整合来实现Dubbo分布式事务管理,使用Nacos 作为 Dubbo和Seata的注册中心和配置中心,使用 MySQL 数据库和 MyBatis来操作数据。 ” 如果你还对SpringBoot、Dubbo、Nacos…

数据湖真的能取代数据仓库吗?【SNP SAP数据转型 】

数据湖和数据仓库的存在并不冲突,也并不是取代的关系,而是相互的融合关系。 数据湖是近两年中比较新的技术在大数据领域中,对于一个真正的数据湖应该是什么样子,现在对数据湖认知还是处在探索的阶段,像现在代表的开源产…

(五)复函数积分的定义与性质

本文内容主要如下: 1. 复积分的概念1.1. 复积分的定义1.2. 复积分的存在性与计算1.3. 一个圆周上的重要积分公式1.4. 复积分的基本性质 1. 复积分的概念 1.1. 复积分的定义 定义: 如图,C为平面上一条光滑的简单曲线: z z ( t ) x ( t )…

GAD7980/CL1680/AD7980详解与开发说明

目录 1 概述2 GAD7980简介3 用法时序4 参数计算与参数解释4.1 采样率4.2 转换时间4.3 采集时间5 采样数值折算6 设计注意事项7 代码demo 1 概述 本文用于讲述GAD7980的功能与用法,以及其中一些参数的计算方法,用法时序,输出数值等等&#xf…

chatglm+langchain

目录 chatglmlangchain 1.1. 主要功能: 1.2. Langchain中提供的模块 1.3. Langchain应用场景 2.1. chatglm应用: 1.1. 基于单一文档问答的实现原理 chatglmlangchain GitHub - imClumsyPanda/langchain-ChatGLM: langchain-ChatGLM, local knowledge bas…

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 在线考试管理系统的设计与实现

一.项目介绍 学生在线考试系统分为三类角色 超管、老师、学生 超级管理员:维护考试管理、提供管理、成绩查询、学生管理以及教师管理 老师:维护考试管理、提供管理、成绩查询以及学生管理 学生:我的试卷…

Linux入门介绍-CentOS和VMware虚拟机下载安装

Linux 学自尚硅谷武晟然老师,结合老师课堂内容和自己笔记所写博文。 文章目录 Linux入门篇Linux概述Linux vs WindowsLinux安装CentOS的版本选择和下载VMware下载VMware安装创建虚拟机安装CentOS 入门篇 Linux概述 Linux是一个操作系统,一切皆文件&…

SpringMVC 程序开发:为什么要学SpringMVC?如何学SpringMVC?

文章目录 🎇前言1.MVC1.1 MVC 的定义1.2 MVC 与 Spring MVC的关系 2.为嘛要学Spring MVC?3.如何学习 Spring MVC?3.1 Spring MVC 创建和连接3.1.1 RequestMapping 注解介绍3.1.2 使用RequestMapping的参数修改请求方法3.1.3 GetMapping 和 Po…

C中的open函数,write函数,read函数

1.创建新文件并保存数据。 #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> void error_handling(char * message);int main(void) {int fd;char buf[]"Lets go!\n";fdopen("data.txt",O_CREAT…

Java实现邮箱验证码

目录&#xff1a; 前言 一、POM依赖 二、获取验证码 三、配置文件 四、业务代码 1.service接口 2.service实现类 3.相关工具类Util 4.查询Redis数据库 5.接收邮件 前言 邮箱验证码是一个常见的功能&#xff0c;常用于邮箱绑定、修改密码等操作上&#xff0c;本篇博客只要…

vue-i18n 实现国际化,支持切换不同语言

需求&#xff1a;后台管理系统&#xff0c;可以实现语言切换 实现过程&#xff1a;用的i18n来实现的语言切换&#xff0c;网上能看到好多模板&#xff0c;根据自己的需求&#xff0c;修改一下即可使用&#xff0c;大概都是差不多的&#xff0c;因为涉及到后端&#xff0c;所以…

如何在 javascript 中交换数组元素

文章目录 在 JavaScript 中使用临时变量交换数组元素使用 ES6 析构函数赋值在 JavaScript 中交换数组元素使用按位异或和数组迭代在 JavaScript 中交换数组元素 交换两个元素的传统方法是使用临时变量。 在 JavaScript 中&#xff0c;我们可以轻松地将数组对象重新分配给默认设…

实验一(7 3)

实验分析&#xff1a; 1.使用合理IP地址规划网络&#xff0c;各自创建环回接口&#xff0c;R1-R2-R3-R4-R5 RIP 100运行版本2&#xff0c;R6-R7 RIP 200 运行版本1 方法&#xff1a;要使得两个不同rip版本互通&#xff0c;需要在r4连通r6&#xff08;或r6连通r4&#xff09;的…

android 如何分析应用的内存(十)——malloc统计和libmemunreachable

android 如何分析应用的内存&#xff08;十&#xff09; 接下来介绍native heap内存的第四个板块————malloc统计和libmemunreachable malloc统计 malloc统计是标准c库提供的接口。他有两个调用接口如下&#xff1a; #include <malloc.h>struct mallinfo mallinfo…

敏捷开发Scrum

目录 1 Scrum概览1.2 理论基础1.2.1 透明性&#xff08;Transparency&#xff09;1.2.2 检验&#xff08;Inspection&#xff09;1.2.3 适应&#xff08;Adaptation&#xff09; 2 三个角色2.1 产品负责人&#xff08;Product Owner&#xff09;2.1.1 职责2.1.2 人选 2.2 流程管…

JDK多版本管理工具jenv

JENV mac jdk版本管理工具 Mac 安装jenv可以使用brew brew install jenv配置jenv zsh配置方式&#xff1a; echo export PATH"$HOME/.jenv/bin:$PATH" >> ~/.zshrc echo eval "$(jenv init -)" >> ~/.zshrcbash配置方式&#xff1a; ech…

海上明月共潮生【InsCode Stable Diffusion 美图活动一期】

一、 Stable Diffusion 模型在线使用地址&#xff1a; https://inscode.csdn.net/inscode/Stable-Diffusion 购买 右下角点击 Stable Diffusion WebUI 进入工作界面 二、模型相关版本和参数配置&#xff1a; 模型&#xff1a;chilloutmix_NiPrunerdFp32Fix.safetensors…

解决Python的SyntaxError: Non-UTF-8 code starting with ‘\xbb‘问题

文章目录 一、报错二、分析三、解决3.1 方法一3.2 方法二3.3 方法三 一、报错 在程序中&#xff0c;line 8为含有中文的注释&#xff0c;编译后出现了SyntaxError: Non-UTF-8 code starting with \xbb的报错&#xff0c;具体如下图。 二、分析 这个错误是由于Python解释器无…

教你如何快速批量添加滚动文字水印

在视频中添加滚动的文字水印可以增加视频的专业感和吸引力&#xff0c;但手动给大量视频添加滚动文字水印是一项费时费力的任务。下面是一个快速批量给大量视频添加滚动文字水印的方法&#xff0c;有需要的小伙伴们可以进来学习一下&#xff01; 今天分享的方法会使用到一个剪辑…

IDEA 中 gradle面板显示重复工程

使用 IDEA 构建多模块工程时&#xff0c;每新建一个模块&#xff0c;gradle 构建后&#xff0c;面板上就会出现一个重复的根工程&#xff0c;如下图红框部分&#xff0c;怎么处理下