自然语言控制机械臂:ChatGPT与机器人技术的融合创新(上)

  1. 引言:

自OpenAI发布ChatGPT以来,世界正迅速朝着更广泛地将AI技术融合到机器人设备中的趋势发展。机械手臂,作为自动化与智能化技术的重要组成部分,在制造业、医疗、服务业等领域的应用日益广泛。随着AI技术的进步,机械手臂不仅能执行复杂的操作任务,还能通过自然语言处理技术进行更加直观的交互,极大提高了灵活性和用户友好性。

就比如说微软的一个人工智能研究中心,研究如何用自然语言来控制机器人设备的一个研究,

所以我想做一个类似的项目,通过允许用户使用自然语言来控制机械手臂,它可以大大降低机器人编程的门槛,使得非专业人士也能轻松地操作和实验。

论文link:

https://www.microsoft.com/en-us/research/uploads/prod/2023/02/ChatGPT___Robotics.pdf

该项目一共分为上下两篇,本篇文章主要内容是整个人工智能系统的设计和构建的过程,未来的下一篇文章将要介绍在开发项目的过程中遇到的而困难,如何解决,以及该项目有什么扩展的性的功能。

  1. 项目背景与动机:

 想象如果有有一天,你命令一个机械臂“帮我收拾一下桌面,将垃圾丢到垃圾桶里”,机械臂就开始听从命令,清理你的桌面的垃圾,那该是多么幸福的一件事情呀。

所以准备工作,我们需要一台小型的机械臂(主要是大的机械臂太贵了),一台能够上网的电脑,以及一颗炙热的心!该项目主要是借鉴微软的那篇改变机器人使用的研究来入手。

  1. 技术概览:

前提本项目是基于python的环境下进行编译的。

首先我们先来介绍一下本项目会使用到的一些软件层面上技术:

ChatGPT:(整个项目最关键的核心技术)

ChatGPT

ChatGPT是一项人工智能技术,基于GPT(Generative Pre-trained Transformer)模型的架构,GPT是一种基于深度学习的自然语言处理模型,通过大规模的无监督预训练和有监督微调来实现语言理解和生成任务。

换句话来说,你可以简单人理解为你在跟一个知识十分渊博的人进行聊天,你可以对它预设一些角色,例如“”你是一个医生”,你就可以跟他聊医学相关的知识,但是请注意并不是所生成的所有聊天都是正确的需要进行自我判断。

Speech recognition:(搭配处理自然语言必不可少的功能模块)

我们这边使用的是Google的一种语音识别服务,Speech-to-text,它允许开发者将语音转化成文本的形式。并且它也支持多种语言和方言,包括但不限于英语,西班牙语,法语,德语,中文等等,可以满足全球用户的需求。

你可以进行在线的尝试语音转文本:https://cloud.google.com/speech-to-text?hl=en#features

pymycobot:(mycobot 280机械臂的控制功能模块)

GitHub - elephantrobotics/pymycobot: This is a python API for ElephantRobotics product.

pymycobot 是大象机器人专门为了my系列产品的机械臂开发的控制模块,这个功能模块的开发,大大降低了机械臂编程控制的门槛。pymycobot 提供了大量的机械臂的控制接口,例如关节控制,坐标控制,配套的机械臂的夹爪控制等等,对机械臂变成的初学者是相当有好的。

 解释这些技术如何合作实现自然语言控制机械手臂的功能。

接下来介绍一下硬件设备:

mycobot 280 M5Stack

mycobot 280 M5Stack 是Elephant Robotics 和M5Stack 合作的一款6自由度的协作性机器人。它外观结构设计小巧精致,一体式全包裹机身设计,采用高精度伺服电机,无任何外漏线缆。mycobot重量只有850g,机械臂末端最大的负载能够达到250g,最大工作半径达到280mm,重复定位精度能够到0.5mm的误差范围内。 

  1. 设计思路与实现过程:

https://www.youtube.com/watch?v=Sq1QZB5baNw&pp=ygUVY2hhdGdwdCBjb250cm9sIHJvYm90

大家可以看一下近期OpenAI发布的一条视频,人跟机器人聊天,机器人来处理自然语言并且生成相对应的动作执行。

也有一些其他的额机械臂也集成了类似的场景。

https://www.youtube.com/watch?v=IGsYgSdrT4Y

我要做的项目就是类似于这个小型版!通过自然语言跟机械臂进行沟通,然后,机械臂执行相对应的指令。

接下来我将要说明项目的过程。

语音识别转文本功能speech-to-text:

为什么要用语音识别转文本功能呢?用过chatgpt的人知道chatgpt有内置的语音聊天的功能,但是我们要集成到PC端和机械臂当中去使用,就不能够使用ChatGPT的web版本,而是要在本地的计算机当中实现,就要用到ChatGPT的API接口。

ChatGPT API的形式的话只能够接收“文本”的形式来使用,所以speech-to-text可以讲我们讲话转化成文本的形式输入到电脑当中。

def speech_to_text():recognizer = sr.Recognizer()with sr.Microphone() as source:print("start speaking...")audio = recognizer.listen(source)try:# text = recognizer.recognize_google(audio, language='zh-CN')text = recognizer.recognize_google(audio, language='en-US')print("you said: " + text)return textexcept sr.UnknownValueError:print("Google Speech Recognition could not understand audio")return Noneexcept sr.RequestError as e:print("Could not request results from Google Speech Recognition service; {0}".format(e))return None

调用ChatGPT API &预训练

获取了语音的文本形式,就可以调用API在本地跟ChatGPT进行聊天了。以下是OpenAI 提供调用ChatGPT API的使用方法。

def generate_control_code(prompt):openai.api_key = ''prompt = f"{pre_training}The command the user wants to execute is:'{prompt}'."try:response = openai.Completion.create(engine="gpt-3.5-turbo",prompt=prompt,temperature=0.5,max_tokens=100,top_p=1.0,frequency_penalty=0.0,presence_penalty=0.0)code = response.choices[0].text.strip()return codeexcept Exception as e:print(f"error: {e}")return ""

代码当中的API_KEY需要自己去官方申请(需要付费)。

可以关注一下prompt这一句话,这将是要提及到的预训练。

  prompt = f"{pre_training}The command the user wants to execute is:'{prompt}'."

如果想要获取精准的回复,需要提前给ChatGPT知道它需要干什么,要让他干什么,按照我们的想法来输出。我们先用web版本来进行测试,因为API的搭建比较复杂。

以下是我的prompt(针对于这个项目),我只想要它输出机械臂执行的代码给我所以我是这么做的。

Generate Python code that matches the following requirements: 
Use an instance of the MyCobotController class robot to perform a specific action. The instance already contains methods such as move_to_zero() to return to the initial position, grab_position() to move to the grab position, and plus_x_coords(value), plus_y_coords(value), plus_z_coords(value) to move specific distances on the X, Y, and Z axes. 
You don’t need to output other textual content, just output the code directly, for example, the robot arm returns to the origin. robot.move_to_zero()Here is what I said:
I want the robot arm to return to the origin, and then go to the position to be grabbed to perform grabbing.

这里可以看到能够成功的完成我的基本需求,但是他输出了代码的注释,这会影响我们之后的结果,所以还是需要进行修改。(让他只输出代码,不要输出注释。)

构建新的机械臂API

为什么要构建新的API呢,pymycobot不是已经提供了吗?

当然,pymycobot 提供的API很全面,也很多。我们如果给的语音比较复杂,ChatGPT会生成其他的复杂的代码可能会导致出错。我根据我想要目前测试的一些需求构建了一个新的机械臂的API。

class MyCobotController:def __init__(self, port, baud):self.mc = MyCobot(port, baud)self.speed = 80self.mode =0self.coords = []def grab_position(self):# self.mc.send_angles([4.83, 13.97, (-99.31), (-1.75), 4.39, (-0.26)], 80)self.mc.send_coords([149.2, (-48.3), 201.7, (-176.98), 4.55, (-84.66)], 80, 0)time.sleep(2)def move_to_zero(self):self.mc.send_angles([0,0,0,0,0,0],70)time.sleep(2)def gripper_open(self):self.mc.set_gripper_state(0,80,1)time.sleep(2)

目的是为了快速的将整个项目搭建起来,之后还可以在丰富其中的内容。

这么做是有原因的,比如说,要让机械臂去到一个点位进行抓取,用pymycobot的方法可能是下面这样的:

robot.send_angles([0,0,0,0,0,0],80)
time.sleep(2)
#open gripper
robot.set_grippr_value(1,80,1)
time.sleep(1)
#clos grippr
robot.set_grippr_value(0,80,1)
time.sleep(1)

这样的话就要输出很多行的代码,在其他复杂的情况下可能会导致出错,重新构建一个方法的话咱就只需要调用一个方法就可以执行了,两行代码就能解决。

class Newmycobot():def grab_action(self):self.send_angles([0,0,0,0,0,0],80)time.sleep(2)#open gripperself.set_grippr_value(1,80,1)time.sleep(1)#clos gripprself.set_grippr_value(0,80,1)time.sleep(1)robot = Newmycobot()
robot.grab_action()
  1. 初步成果与展示:

我们先来个快速的调试,用web版本的ChatGPT来实践一下。

复制生成的代码去运行。

可以看到简单的测试是OK的。

6. 结论:

本次的记录就到这里,整个项目还未完成,在未来不久的日子里我将会继续完善这个项目,下一篇的内容我会完善整个项目,以及分享一下在开发的过程出现的一些问题是如何进行解决的。如果你喜欢这篇文章的话,欢迎在下方留言给出你的想法。

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

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

相关文章

C语言.指针(5)

指针(5) 1.sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 2.数组和指针笔试题解析2.1一维数组2.2字符数组2.3二维数组 3.指针运算笔试题解析3.1 题目13.2 题目23.3 题目33.4 题目43.5 题目53.6 题目63.7 题目7 1.sizeof和strlen的对比…

聊一聊分库分表(是什么?怎么分?有什么坑?)

目录 为什么会分表分库? 数据分表 怎么分表? 垂直分表 好处: 缺点: 水平分表 优点: 缺点: 数据分库 怎么分库? 水平分库 适用场景: 优点: 注意事项&#x…

Python程序设计 上下文管理器

上下文管理器 如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 “with” 关键字的语句,它通常用在什么场景呢? 对于系统资源如文件、数据库连接、socket 而言,应用程序打开这些资源并执行完业务逻辑之后&#xff…

中科方德服务器操作系统安装zabbix5.0

原文链接:中科方德服务器操作系统安装zabbix5.0 Hello,大家好啊!接着我们上一次的讨论,今天我要为大家介绍如何在已经安装好的中科方德服务器操作系统基础上,安装和配置Zabbix 5.0。Zabbix是一个开源的监控软件工具&am…

LeetCode-416. 分割等和子集【数组 动态规划】

LeetCode-416. 分割等和子集【数组 动态规划】 题目描述:解题思路一:01背包问题,动规五部曲解题思路二:0解题思路三:0 题目描述: 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分…

Vue异步组件,深入解析

基本用法​ 在大型项目中,我们可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件。Vue 提供了defineAsyncComponent方法来实现此功能: import { defineAsyncComponent } from vueconst AsyncComp defineAsyncComponent(() >…

贪心算法|738.单调递增的数字

力扣题目链接 class Solution { public:int monotoneIncreasingDigits(int N) {string strNum to_string(N);// flag用来标记赋值9从哪里开始// 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行int flag strNum.size();for (int i strNum.…

Open3D生成规则点云(二)

一、代码 Python import open3d as o3d import numpy as np# 定义正方体的参数 def create_square(x1=0, y1=0, z1=0, side_length=1, resolution=20):vertices = []for i in range(resolution):for j in range(resolution):for k in range(resolution):x = x1 + i * side_le…

2020 年 9 月青少年软编等考 C 语言一级真题解析

目录 T1. 输出整数思路分析 T2. 新冠疫情死亡率思路分析 T3. 有一门课不及格的学生T4. 整数的个数思路分析 T5. 金币 T1. 输出整数 输入四个整数,把输入的第三、第四个整数输出。 时间限制:1 s 内存限制:64 MB 输入 只有一行,共…

python爬虫 - 下载图片

文章目录 1、下载图片示例1:使用 .urlretrieve() 函数2、下载图片示例2 - 使用 open/write 函数3、下载图片示例33.1 使用 open/write 下载3.2 使用 urlretrieve下载 爬虫的本质:模拟对应的App,浏览器访问对应的地址获取到数据 1、下载图片示…

考虑预同步的虚拟同步机T型三电平逆变器并离网MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 三相 T 型三电平逆变器电路如图所示,逆变器主回路由三个单相 T 型逆变器组成。 直流侧输入电压为 UPV,直流侧中点电位 O 设为零电位,交流侧输出侧是三相三线制连…

高防虚拟主机的重要性

在当今数字化时代,网络安全已经成为企业和个人必须面对的重要议题。随着网络攻击手段的不断升级和多样化,传统的虚拟主机已经难以满足日益增长的安全需求。在这样的背景下,高防虚拟主机应运而生,成为保护网站安全、抵御网络攻击的…

4.双向循环链表的模拟实现

1.双向链表的实现 1.1双向链表节点的结构声明 typedef int LTDataType;typedef struct ListNode {struct ListNode* prev; // 指向该节点的前一个节点struct ListNode* next; // 指向该节点的后一个节点LTDataType data; // 该节点中存储的数据 }LTNode; // 将这…

Linux内核errno-base.h源码分析

上次写过一个博客,主要关于内核错误相关的源码分析(链接),最近突然发现上次的分析不完善,因此本次完善相关分析。 Linux内核中经常见到一些返回值,如-12,比如下面是我遇到过的一个截图&#xff…

【Java面试题】MySQL上篇(索引)

文章目录 索引1.索引的分类?2.B树和B树的区别?2.1B树2.2B树 3.为什么使用索引会加快查询?4.创建索引的注意点?5.索引在哪些情况下会失效?6.聚簇索引和非聚簇索引的区别?7.回表查询是什么?8.什么…

阿里云租用服务器GPU配置报价单_1年_一个月_1小时价格表

阿里云GPU服务器租用价格表包括包年包月价格、一个小时收费以及学生GPU服务器租用费用,阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡,GPU云服务器gn6i可享受3折优惠,阿里云服务器网aliyunfuwuqi.com分享阿里云GPU…

机器学习—概述(一)

什么是机器学习 数据 模型 预测 从历史数据当中获得规律?这些历史数据是怎么的格式? 数据集构成 特征值+目标值 机器学习算法分类 监督学习 目标值:类别一分类问题 k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归目标值:连续型的数据一回归问题 线性回…

电脑磁盘空间不足?学会这几招,轻松释放磁盘空间

随着科技的飞速发展,电脑已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐,我们都需要依赖电脑来完成。然而,随着电脑使用时间的增长,磁盘空间不足的问题也逐渐浮现。当磁盘空间不足时,不仅会影响电脑…

2023年金融贷款骗局套路之一

源地址:2023年金融贷款骗局套路之一_预防网贷套路_计算机技术网 随着无卡消费的日夜流行,三年疫情出现,钱难寻,难找的尴尬境地,贷款骗局也出现不少。今天我们讲讲最近很流行的贷款骗局之一中的一种贷款骗局。 在平常…

AIoT人工智能物联网之AI 实战

1. jetson-inference 入门 jetson-inference是官方推出的体验套件,提供了三种最常见的AI应用于计算机视觉的类型,imagenet用于 图像辨识 ( Image Recognition )、detectNet用于对象辨识 ( Object Detection )、segNet用于语义分割 可以先使用windows下载 jetson-inference(因…