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

news/2024/4/28 18:09:31/文章来源:https://blog.csdn.net/m0_71627844/article/details/131517207

我们将 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.luyixian.cn/news_show_325668.aspx

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

相关文章

MYSQL根据标签查询数据

场景条件: 1.根据用户id查询到该id绑定的标签(可能是多个标签也可能是单个标签) 2.根据标签的id查询到绑定标签id的信息表 SELECT labelID FROM LRrelation WHERE relationID 1 SELECT * FROM notification SELECT * FROM notification…

6.30学习-函数柯里化,回调解决异步多线程

6.30学习-函数柯里化,回调解决异步多线程 1.函数柯里化1.1 确定参数的函数柯里化1.2参数不确定的函数柯里化1.3 用法1.3.1 给setTimeout传递进来的函数添加参数 2.回调解决异步多线程 1.函数柯里化 函数柯里化,经常可能就面试的时候听说过,反…

如何在半导体行业运用IPD?

半导体产业链具体包括上游半导体原材料与设备供应、中游半导体产品制造和下游应用。其中,半导体材料处于上游供应环节,材料品类繁多,按制造流程可细分为前端制造材料和后端封装材料。半导体设备,即在芯片制造和封测流程中应用到的…

智谱AI-算法实习生(知识图谱方向)实习面试记录

岗位描述 没错和我的经历可以说是match得不能再match了,但是还是挂了hh。 面试内容 给我面试的是唐杰老师的博士生,方向是社交网络数据挖掘,知识图谱。不cue名了,态度很友好的 ,很赞。 date:6.28 Q1 自…

服务器解析漏洞与cms靶场搭建教程

文章目录 一、解析漏洞定义1.CVE-2017-157152.AddHandler3.IIS64.IIS75.nginx 二、Kali安装docker并搭建DVWA靶场1.安装docker2.启动docker3.安装docker的DVWA容器4.启动dvwa 三、kali搭建vulhub与CVE-2017-15715复现1.安装vulhub2.安装CVE-2017-15715漏洞利用靶场3.启动靶场4.…

液晶铝薄膜的干蚀特性

引言 对于先进的薄膜晶体管液晶显示器(TFT-LCD)制造工艺来说,薄膜层已逐渐取代传统的湿法蚀刻工艺。对于栅电极,一般使用铝(Al),在Al中加入一些金属,除了可以保持低电阻率和增强Al薄膜的耐腐蚀性外,还可以防止在后退火…

spfa求负环

1.虫洞 Wormholes&#xff08;裸spfa判断负环问题&#xff09; 信息学奥赛一本通&#xff08;C版&#xff09;在线评测系统 (ssoier.cn)http://ybt.ssoier.cn:8088/problem_show.php?pid1507 #include<bits/stdc.h> using namespace std; const int N510,M5210; int d…

判断数组中所有元素是否均为实数对象 numpy.isrealobj()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断数组中所有元素 是否均为实数对象 numpy.isrealobj() [太阳]选择题 请问关于以下代码的说法错误的是&#xff1f; import numpy as np a np.array([1, 2, 3]) b np.array([1, 1 2j, …

docker学习(七)docker daemon

1.Docker 的CS模式 1.1.Docker 的C/S模式介绍 在 Docker Client 中来运行 Docker 的各种命令&#xff0c;这些命令会传送给在 Docker 的宿主机上运行的 Docker 守护进程。而 Docker 守护进程是负责实现 Docker 各种功能的。 如图所示&#xff0c;Docker 守护进程运行在宿主机…

第四章 数组

前言 学习方法 可以多看几遍视频把上课的代码&#xff0c;自己加加注释&#xff0c;在自己写之前&#xff0c;可以画一个流程图照着流程图把代码自己实现一遍 不要怀疑自己&#xff0c;不要遇到困难就觉得自己不行&#xff0c;遇到困难就解决困难&#xff0c;编程初学者都是…

SSH连接vmware 虚拟机 centos

检查虚拟机设置的网络连接是否为NAT模式 点击左上角“编辑” -> “虚拟网络编辑器” 在虚拟网络编辑器中查看IP地址 &#xff0c;点击NAT模式后&#xff0c;点击“NAT设置 记住自己的网关,下面在服务器中配置需要 进入服务器的 /etc/sysconfig/network-scripts/ 编辑 i…

浑元太极马老师和小薇-UMLChina建模知识竞赛第4赛季第7轮[更新]

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 第7轮一直无人得分&#xff0c;再次更换题目。 因有的题目之前已经出过&#xff0c;本轮需要最先答对全…

Android View 事件派发流程

原文链接 Android View 事件派发流程 自从乔帮主横空出世推出了iPhone以来&#xff0c;触控式的操作便成了21世纪智能设备的标准输入方式。对于同是智能操作系统的Android来说&#xff0c;也不例外。事件&#xff0c;特别是触控事件对于移动应用程序开发来说是一个非常重要的&…

软件DevOps云化发展的趋势 【课程限时免费】

你了解什么是DevOps吗&#xff1f; 它是怎么诞生的&#xff1f; DevOps能做些什么&#xff1f; 相信对于DevOps的实践者和关注者来说&#xff0c;对它已经不陌生了&#xff0c;但是对于刚刚进入开发者领域不久的小伙伴应该并不清楚&#xff0c;下面就让小智带你一起了解DevO…

C. Insert Zero and Invert Prefix - 构造+思维

分析&#xff1a; 数组b的最后一个元素永远不可能使1&#xff0c;因为即使在最后一个位置操作&#xff0c;也只会把前n-1个元素反转&#xff0c;最后一个元素只能为0.然后可以发现只要a[i]0就可以直接输出0&#xff0c;当a[i]1时一连串的1只需要最后一个1的位置改变成1的字串长…

Keil5中写的软件延时函数不起作用现象解析_ARM_Compiler_volatile关键字

一、问题描述 在学习野火霸天虎F407寄存器点亮LED时&#xff0c;出现实验现象&#xff1a;LED灯不亮&#xff0c;野火霸天虎F407资料。 main.c代码如下&#xff1a; #include "stm32f4xx.h"void Delay(unsigned int count);int main(void) { #if 0/* 第一步&a…

oracle rowscn 简单记录

可以通过ROWSCN 侦测row是否有变化&#xff0c;但需要注意&#xff1a; 默认是一个block的scn 相同可以通过create table ROWDEPENDENCIES 在每行上记录无论哪种模式&#xff0c;ROW SCN是一个大致值&#xff0c;不是准确值 NOROWDEPENDENCIES | ROWDEPENDENCIES This claus…

Maven安装和配置详细教程

Maven安装和配置详细教程 1、Maven简介 Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、测试、打包和发布等工作。 2、Maven下载 点击Maven下载官方地址下载Maven。或者去…

C#与C++编程环境对比:优点与应用场景详解

C#与C是两种常用的编程语言&#xff0c;它们在编程环境方面有一些相同点和不同点。首先&#xff0c;它们都可以用于开发跨平台的应用程序。其次&#xff0c;它们都具有强大的面向对象编程能力。但是&#xff0c;它们在语法、性能和应用领域等方面存在一些不同点 。 在语法方面…

使用Wireshark 找出 TCP 吞吐瓶颈

Debug 网络质量的时候&#xff0c;我们一般会关注两个因素&#xff1a;延迟和吞吐量&#xff08;带宽&#xff09;。延迟比较好验证&#xff0c;Ping 一下或者 mtr[1] 一下就能看出来。这篇文章分享一个 debug 吞吐量的办法。 看重吞吐量的场景一般是所谓的长肥管道(Long Fat …