实现使用语音控制myCobot机械臂运动

news2024/9/20 18:45:58

基于语音识别技术的机器人手臂控制智能化尝试

介绍:

在电影《钢铁侠》中,我们看到托尼·斯塔克在建造设备时与人工智能贾维斯交流。托尼向贾维斯描述了他需要的零件,贾维斯控制机械臂协助托尼完成任务。随着当今技术的发展,这种实现只是时间问题。因此,我决定尝试自己实现这个功能,用语音控制来操作机械臂,实现人工智能的简单应用。

我全权负责连接和控制机械臂和语音开发板,通过特定命令触发机械臂的运动。这是一个具有挑战性的项目,因为语音控制技术涉及多个方面,如语音识别、信号处理和机器人控制,需要我学习和理解相关知识。通过这篇文章,我希望分享我的项目实施过程、成就和经验教训,以激励和帮助在机器人和语音控制领域工作的同学。

为了实施这个项目,我首先需要解决两个主要问题:如何处理语音信号以及如何控制机械臂。

处理语音信号:

处理语音信号的步骤:

● 硬件选择:选择合适的开发板(Arduino、树莓派等)。

● 麦克风信号处理:选择合适的麦克风进行采集,通过模数转换器将采集到的语音信号转换为数字信号。

● 信号处理:采集到的信号通过降噪、滤波等方式进行处理。提取有用的特征,并使用语音识别算法处理特征信号,以将数字信号输出到计算机。

控制机械臂:

● 使用简单易操作的机械臂。

以上是解决两个主要问题的方法。然而,经过研究,开发可以处理语音信号的开发板需要大量的工作!幸运的是,现在市场上有集成语音开发板,我们可以直接购买一个来使用。

HLK-V20 语音开发板

HLK-V20 开发板是一个具有两个 IO 接口的复杂板 - 一个用于语音输出,另一个用于语音输入。它可以通过串行端口连接到计算机。

MyCobot 280 M5Stack 2023 机械臂

对于机械臂,我选择了流行的桌面机械臂,myCobot 280 M5Stack 2023,由大象机器人公司开发。该机械臂最近进行了重大的软件更新,实现了20ms的串行通信速度,并提供与Python和C++等流行编程语言兼容的丰富接口。我选择这个机械臂有几个原因,包括它紧凑的尺寸、丰富的 Python API 接口(我擅长编程)以及易于安装和使用。

编程语言: Python 3.7+

平台: windows11

使用的Python库:serial,pymycobot,time。

项目的发展

在项目的开发中,涉及四个主要步骤:

● 语音输入

● 开发板检索语音信息并传输到PC

● PC处理接收到的信息

● 向机械臂发送运动控制命令以进行运动

为了观察开发板如何传输数据以及返回的数据类型,使用Python中的串行库来操作串行端口。该库具有从串行端口打开、关闭、读取和写入数据的方法。

'''
For instance, the serial.Serial() method is used to open the serial port and connect it to the PC, while the serial.read() method reads the data transmitted from the serial port.
'''
import serial
s = serial.Serial("COM9",115200)
r = s.read()
while True:
print(r)

复制

这是从 read() 获取的数据。

通过分析从开发板传输的数据,开发板的唤醒词被识别为“wakeup_uni”,而关键字“uArTcp”表示下一个命令的开始。

发现接收到的数据连接在一起,每次输入命令时,都会与前一个命令连接在一起。

发现接收到的数据连接在一起,每次输入命令时,都会与前一个命令连接在一起。为了检查开发板是否已收到语音输入,使用了 if a in b: 语句,并预先准备了输入命令及其相应的关键字。例如,唤醒词设置为“wakeup_uni”,并设置了 4 个提示词以进行测试。

#set prompt word
hi_mycobot = b'openled'
dancing = b'zengjialiangdu'
nod_head = b'jianxiaoliangdu'
go_back = b'closeled'
# run frame
while True:
r += s.read()
if wake_up in r:
print("wake")
wake = True
r = b''
if wake and hi_mycobot in r:
print("Hi myCobot")
r = b''
if wake and dancing in r:
print("dancing")
r = b''
if wake and nod_head in r:
print('nod your head')
r = b''
if wake and go_back in r:
print('Go back')
r = b''
if wake and _exit in r:
print("exit")
r = b''
# print(r)s

复制

这是测试结果

pymycobot库是由Elephant Robotics开发的机械臂API调用接口库。具体的使用方法在Gitbook(由Elephant Robotics提供)上。

# import library
from pymycobot import Mycobot
import time
# Create an instance object for later use
mc = Mycobot('COM9',115200)
#Control the mechanical arm to move at a speed of 70 according to the angle in the list,send_angles([angles],speed)
mc.send_angles([0.87,(-50.44),47.28,0.35,(-0.43),(-0.26)],70)
# Execute the next command after a delay of x seconds (the movement of the robotic arm takes time)
time.sleep(x)

复制

接下来,将代码的两个部分组合在一起。

import serial
from pymycobot import MyCobot
import time
s = serial.Serial("COM6",115200)
mc = MyCobot('COM3',115200)
r = b''
wake_up = b'wakeup_uni'
_exit = b'exitUni'
hi_mycobot = b'openled'
dancing = b'zengjialiangdu'
nod_head = b'jianxiaoliangdu'
go_back = b'closeled'
wake = False
while True:
r += s.read()
if wake_up in r:
print("wake")
wake = True
r = b''
if wake and hi_mycobot in r:
print("Hi myCobot")
# say hi shake with you
mc.send_angles([0.87,(-50.44),47.28,0.35,(-0.43),(-0.26)],70)
time.sleep(1)
for count in range(3):
mc.send_angle(1,30,80)
time.sleep(1)
mc.send_angle(1,(-30),80)
time.sleep(1)
mc.send_angles([0,0,0,0,0,0],70)
r = b''
if wake and dancing in r:
print("dancing")
mc.send_angles([0,0,0,0,0,0],80)
time.sleep(1)
for count in range(2):
mc.send_angles([(-0.17),(-94.3),118.91,(-39.9),59.32,(-0.52)],80)
time.sleep(1.2)
mc.send_angles([67.85,(-3.42),(-116.98),106.52,23.11,(-0.52)],80)
time.sleep(1.7)
mc.send_angles([(-38.14),(-115.04),116.63,69.69,3.25,(-11.6)],80)
time.sleep(1.7)
mc.send_angles([2.72,(-26.19),140.27,(-110.74),(-6.15),(-11.25)],80)
time.sleep(1)
mc.send_angles([0,0,0,0,0,0],80)
r = b''
if wake and nod_head in r:
print('nod your head')
mc.send_angles([0,0,0,0,0,0],70)
time.sleep(1)
mc.send_angles([3.07,(-86.3),75.32,11.86,2.72,(-0.35)],70)
time.sleep(0.5)
for count in range(4):
mc.send_angle(4,13,70)
time.sleep(0.5)
mc.send_angle(4,(-60),70)
time.sleep(1)
mc.send_angle(4,13,70)
time.sleep(0.5)
mc.send_angles([0,0,0,0,0,0],70)
r = b''
if wake and go_back in r:
print('Go back')
mc.send_angles([12.83,(-138.95),156.09,(-12.3),(-12.91),35.41],70)
r = b''
if wake and _exit in r:
print("exit")
r = b''

三. 经验和教训

在完成这个项目的过程中,我收获了很多宝贵的经验和见解。首先,我意识到一个项目的完成不仅取决于对技术的掌握,还需要事先的研究和理解。当我在研究语音识别开发板的制作时,我发现工作量非常大,实现起来会非常困难。但是,市场上已经有许多成熟的技术和工具。我们只需要选择合理的组合和整合。其次,项目的圆满完成需要明确的框架和充分的准备。在这个项目中,我需要了解语音识别算法、机械臂设计和控制技术,掌握硬件设备和软件开发工具的使用方法和性能特点。

在这个项目中,我成功地将语音识别技术与机械臂控制技术相结合,实现了机械臂的语音控制。虽然这个项目的规模相对较小,但它代表了人工智能技术在现实生活中的应用和发展趋势。虽然这只是一个人工智能项目的原型,但它的完成对我来说是一次宝贵的经验。在以后的研究中,我将继续探索更多相关信息,以进一步完善这个项目。如果您有任何好的想法,请在下面发表评论。

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

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

相关文章

Redis内存策略

Redis内存回收 Redis之所以性能强&#xff0c;最主要的原因就是基于内存操作。然而单节点的Redis其内存大小不宜过大&#xff0c;否则会影响持久化或主从同步性能。 可以通过修改配置文件来设置Redis的最大内存&#xff1a; # 格式&#xff1a; # maxmemory <bytes> #…

[PyTorch][chapter 44][时间序列表示方法2]

前言 bag of words 技术里面除了上面我们讲的&#xff0c;还包括 word2Vec TF-IDF,Glove, co-occurrence matrix 等技术 论文总览 1 Abstract: 摘要 2 Introduction: 前人工作&#xff0c;本文目标 3 Model Architectures: LSA LDA 4 New Log-Linear model 5 Result…

STM32面试知识点总结分析

一、STM32F1和F4的区别&#xff1f; 内核不同&#xff1a;F1是Cortex-M3内核&#xff0c;F4是Cortex-M4内核&#xff1b; 主频不同&#xff1a;F1主频72MHz&#xff0c;F4主频168MHz&#xff1b; 浮点运算&#xff1a;F1无浮点运算单位&#xff0c;F4有&#xff1b; 功能性…

【推荐】win 安装 rust 1.70

目录 一、下载二、安装先决条件MinGW三、安装Rust四、配置国内镜像五、检查是否安装成功五、参考文章 一、下载 官网地址&#xff1a;https://www.rust-lang.org/zh-CN/ 二、安装先决条件MinGW win 安装 C运行环境 - MinGW 三、安装Rust 3.1首先设置安装路径和环境变量 配…

容器常用操作命令概述

容器镜像就可以说是一个“样板间”&#xff0c;把运行进程所需要的文件系统、依赖库、环境变量、启动参数等所有信息打包整合到了一起。之后镜像文件无论放在哪里&#xff0c;操作系统都能根据这个“样板间”快速重建容器&#xff0c;应用程序看到的就会是一致的运行环境了。 …

EMC学习笔记(十四)射频PCB的EMC设计(一)

射频PCB的EMC设计&#xff08;一&#xff09; 1.板材1.1 普通板材1.2 射频专用板材 2.隔离与屏蔽2.1 隔离2.2 器件布局2.3 敏感电路和强辐射电路2.4 屏蔽材料和方法2.5 屏蔽腔的尺寸 近十年来&#xff0c;移动通信飞速发展&#xff0c;在移动通信设备的设计、测试、安装和操作维…

你有几种实现点击锁定屏慕,输入密码解锁的效果的思路?

文章目录 点击锁定&#xff0c;密码解锁1 需求解析2 思路2.1输入密码时回显2.1.1 利用prompt的输入值来判断 2.2 输入密码时不回显2.2.1实现思路 点击锁定&#xff0c;密码解锁 1 需求解析 点击指定的按钮&#xff0c;当前的屏幕变为空白&#xff0c; 弹出对话框&#xff0c;当…

ChatGPT付费创作系统V2.0.8独立版 +WEB端+ H5端 + 小程序端+新增PC端绘画

ChatGPT付费创作系统V2.0.8提供单独的升级包&#xff0c;升级前先更新至2.0.7版本&#xff0c;再上传升级包替换&#xff0c;同是导入升级包数据库。ChatGPT2.0.8独立版核心功能增加了PC端绘画功能&#xff0c;绘画功能采用其他绘画接口-意间AI&#xff0c;后台一些小细节的优化…

电脑c盘哪些文件可以删除?这4种文件可以删!

我的电脑使用了快两年了&#xff0c;现在经常很卡顿&#xff0c;不知道是不是因为电脑c盘空间快满了导致的。电脑c盘哪些文件可以删除呢&#xff1f;请大家帮我看看&#xff01; 电脑的c盘一般会存储很多的临时文件和系统的文件。然而这些文件并不是都有用的。有些文件我们可以…

[golang 微服务] 9.go-micro + gorm实现商品微服务的分页查询

一.引入 上一节讲解 go-micro的负载均衡操作&#xff0c;go Web框(Gin,Beego)调用go-micro微服务等技术&#xff0c;这一节来看看 go-micro gorm实现 商品微服务的 分页查询操作,go-micro微服务中使用GORM和go web框架gin、beego中使用 GORM都是一样的 二.创建goodsinfo服务端…

git学习使用技巧

目录 关于版本控制 本地版本控制系统 集中化的版本控制系统 分布式版本控制系统 Git 是什么 直接记录快照&#xff0c;而非差异比较 近乎所有操作都是本地执行 Git 保证完整性 Git 一般只添加数据 三种状态 起步 - 初次运行 Git 前的配置 初次运行 Git 前的配置 用户…

2023年7月1日【青书学堂】考试 统计学(高起专)

2023年7月1日【青书学堂】考试 统计学(高起专) 注意:答案仅供参考 成绩:84.34 分 第1题 单选题 下列哪两个变量之间的相关程度高 ( ) A: 商品销售额和商品销售量的相关系数是0.9 B: 商品销售额与商业利润率的相关系数是0.84 C: 平均流通费用率与商业利润率的相关系数是-0…

ACL2023 | Multi-CLS BERT:传统集成的有效替代方案

进NLP群—>加入NLP交流群 在本文中&#xff0c;介绍了 Multi-CLS BERT&#xff0c;这是传统集成方法的有效替代方案。 这种基于 CLS 的预测任务的新颖方法旨在提高准确性&#xff0c;同时最大限度地减少计算和内存需求。 通过利用具有不同参数化和目标的多个 CLS token&…

数据结构-查找

数据结构-查找 1 知识框架2 顺序查找和折半查找2.1 顺序查找2.2折半查找2.3 分块查找 3 树型查找3.1 二叉排序树3.2 平衡二叉树3.3 B树和B树3.3.1 B树3.3.2 B树 4 散列表4.1 构造方法4.2 处理冲突的办法4.3性能分析 1 知识框架 2 顺序查找和折半查找 2.1 顺序查找 1.一般线性…

vue 基础入门

目录 vue 简介 vue 的特性 数据驱动视图 双向数据绑定 MVVM vue 的基本使用 vue 的调试工具 vue 的指令 1、内容渲染指令 2、属性绑定指令 3、事件绑定 4、双向绑定指令 v-model 5、 条件渲染指令 6 、列表渲染指令 vue过滤器 定义过滤器基本使用 私有过滤器和全…

web安全php基础_phpstudy pro安装

phpstudy pro是什么 phpstudy是一个php运行环境的集成包&#xff0c;用户不需要去配置运行环境&#xff0c;就可以使用&#xff0c;phpstudy不仅是一款比较好用的php调试环境工具&#xff0c;并且还包括了开发工具和常用手册&#xff0c;对于新手是有很大帮助的 windows下ph…

基于LLAMA-7B的lora中文指令微调

目录 1. 选用工程2. 中文llama-7b预训练模型下载3. 数据准备4. 开始指令微调5. 模型测试 前言&#xff1a; 系统&#xff1a;ubuntu18.04显卡&#xff1a;GTX3090 - 24G &#xff08;惨呀&#xff0c;上次还是A100&#xff0c;现在只有3090了~&#xff09; &#xff08;本文旨在…

I.MX RT1170之FlexSPI(3):NOR Flash手册分析和参数配置详解

在上一节中&#xff0c;我们分析了FlexSPI的相关参数&#xff1a;LUT表格的组成和FlexSPI结构体配置&#xff0c;这一节就以WINBOND的W25Q256JV NOR Flash为例&#xff0c;看一下如何根据这个NOR Flash的数据手册配置FlexSPI接口。 文章目录 1 SDK代码2 NOR Flash配置流程2.1 时…

java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。

问题 java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。 详细问题 笔者使用ServletJSP技术框架进行项目开发&#xff0c;对于项目进行国际化&#xff08;即i18n&#xff0c;实现中英文页面转换&#xff09;&#xff0c;需要引入 下…

【C语言初阶(9)】函数2

文章目录 1. 函数的嵌套调用和链式访问1.1 嵌套调用1.2 链式访问 2. 函数的声明和定义2.1 函数定义2.2 函数声明2.3 函数的实际应用 3. 函数递归3.1 什么是递归&#xff1f;3.2 递归使用条件3.3 递归的案例3.4 递归的优缺点 4. 递归练习题 1. 函数的嵌套调用和链式访问 函数和函…