机器人制作开源方案 | 乒乓球自动拾取机器人

作者:刘众森、王森、王绘东、崔岳震、宋维鑫

单位:山东农业工程学院

指导老师:潘莹月、廖希杰

1. 场景调研

      我们小组选择项目的任务方向乒乓球的捡取与存放,针对此问题我们研发了一款乒乓球自动拾取机器人。众所周知,乒乓球是一种世界流行的球类体育项目,而我国是乒乓球运动的大国和强国。但是捡球是一种让人非常头疼的事情,乒乓球爱好者在练习乒乓球时,往往练得满地都是(如下图所示),劳累的运动员弯腰捡球既费时又费力。现在的乒乓球直径40.00毫米,其重量为26~2.8克,比较轻,不太容易捡拾。每当要捡起一个乒乓球的时候,捡球的人就要弯一次腰,对于长期从事这项工作的人来说是一个很大的身体负担。

      因此,能够代替人捡拾乓球的机器人就有了它的重要性,这种机器人能够又好又快地将散落在地上的乒乓球捡起,以便于下一次使用。本自动拾取乒乓球机器人主要应用于乒乓球训练场或比赛场上,其主要功能是自动拾取乒乓球。尽管这个机器人所实现的功能相对来说十分简单,但是它也可以帮助人类工作,减少乒乓球爱好者的负担,这是服务机器人的重要使命,也是我们这个项目的目的。

2. 整体结构

      该机器人底盘部分主要由铝板制作,其下方为四个轮子连接四个电机作为动力元件。现有的应用在乒乓球场上的机器人,大多都是设计一个机械手直接抓取乒乓球,这不但会使设计过程更加繁琐,而且其控制系统的设计也较为复杂,制造成本也会相应地增加。我们的乒乓球捡取部分是由铝板和高弹绳组成,高弹绳的存在大大减少了捡取部分的重量,由一个舵机控制其上下运动。其主要特点是智能化、自动化。 机器人的控制电路简单,我们采用Basra主控板(采用 AVR ATMega328 芯片)为主控板,并在此之上加入了Bigfish 扩展板,在此之外,我们加入了颜色识别模块(TCS3200) 和超声波测距模块(HC-SR04),颜色识别模块下方是由一个小型舵机控制转动,从而可以三百六十度无死角的寻找乒乓球,超声波测距模块可以用来躲避障碍,和确定乒乓球的距离,从而确定乒乓球的位置。

颜色识别模块

超声波测距模块

3. 创新部分

3.1 结构上的创新

      我们的乒乓球拾取机器人,因为乒乓球表面光滑,直径只有40.00毫米,重量只有2.6~2.8克,比较轻,不太容易捡拾不易有受力点,所以我们没有采用传统机械臂来抓取乒乓球,而是用舵机控制一个底部和四周缠有高弹绳的框子上下运动,来捡取乒乓球。因为高弹绳质量轻便,因此机器人整体结构比较轻便小巧,不占地方,运动起来较为轻松。我们还在其后方用铝板拼接了一个屏风(如下图所示)以此来做负载,可以避免其前方太重,导致其重心不稳,优化了其头重脚轻的特点,并使其看着更加美观,使其结构看着没有这么单一。 

3.2 功能上的创新

      我们的机器人捡取机构的篮子的底部面积相较于机械手的作用面积更大,从而增强捡取的成功率,而且在散落乒乓球相距较近的情况下,可以实现一次捡取数个乒乓球。并且此机器人的捡取机构和乒乓球的存放机构为同一部分,相对简化了机器人的结构,也减轻了其重量,使其工作更加轻松,使其结构更简单。如下图所示,并且这个篮子可以同时存放数个乒乓球,适当改良后,增大其容积。可以同时存放更多的乒乓球。

3.3 取材上的创新

      此乒乓球自动拾取机器人采用探索者系列基础零件,零件的种类相对较少,费用较低,功能较为齐全,倘若批量生产并销售,可以极大地节约成本,其简易的结构也使得其后期维修简单且维修成本较低。

4. 制作难点及其解决方案

      ① 项目初期,我们的机器人捡取部分是完全由铝板搭建,只有底部采取高弹绳,这就导致了前半部分重量太大,给舵机的工作带来太大的负担,并且使其头重脚轻。然后我们经过了多次尝试,多次拆解,我们将捡取部分的四周完全换成了高弹绳。由于乒乓球的质量十分轻便,所以这么做对机器人的整体工作并没有产生任何影响,从而大大减小了捡取部分的质量,减轻了舵机的工作负担,增长了其使用寿命。

      ② 开始的时候,我们的机器人捡取部分的框子设计的并没有这么大,我们的初衷也是减轻其捡取部分的质量,但是这导致了捡取成功的几率并不高,而且在捡取的时候其效果并没有达到我们想要的效果,所以我们后期更换了捡取部分的框子,使其底面工作面积大大增加,并且可以达到同时最多捡四个球的效果,并且改良后的框子捡球的成功率非常高。

5. 作品的可改进部分

      ① 首先可以为机器人添加外壳,使其看起来更美观,也让其线路不外漏,增加其使用寿命,也变相减少其后期维修成本。

      ② 其次可以将其捡取部分的骨架结构换为塑料材质,使其质量相对更轻,也使其更美观,批量生产也可以相对降低成本。

      ③ 最后可是适量加大加深捡取机构的框子,使其容量增加,可是一次性容纳更多的乒乓球,避免频繁的去处理已经捡到的球,并为其增加一个盖子,可以确保其在接近饱和状态时,乒乓球不溢出。

更多详情请见:【S050】乒乓球自动拾取机器人

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

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

相关文章

【Unity】【VRTK】【Pico】如何快速在VRTK中引入带动画的PICO控制器

【背景】 之前的VRTK篇章中,我只介绍了Oculus,Open VR,SImulator这三种Rig的配置方法,那么Pico如何融合VRTK进行开发呢? 【需要的开发包】 先像一个正常PICO项目那样导入PICO的SDK到Unity。VRTK 4的Package导入器中搜Pico,可以导入一个Pico的Integration,导入后Projec…

238.【2023年华为OD机试真题(C卷)】火星文计算(模拟-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-火星文计算二.解题思路三.题解代码Python题解代…

python中none的替换方法:pandasnumpy

none的替换方法: 1.pandas # 将缺失的id值替换为None merged_df[id].fillna(None, inplaceTrue) #这行代码使用了Pandas库中的fillna方法,对DataFrame中的id列进行了填充操作。具体来说,它将该列中的缺失值用字符串None进行填充&#xff0c…

Python中的__add__()方法

在 Python 中,__add__() 是一个特殊方法(magic method),用于定义对象之间的加法操作。当你使用 运算符对两个对象进行相加时,实际上会调用对象的 __add__() 方法。 下面是一个简单的例子,演示了 __add__()…

SpringCloud.03.网关Gateway

目录 网关Gateway的概念: 准备 使用 方式一 因为配置了网关所以可以直接通过gateway发送请求 方式二 修改配置前:http://localhost:8082/provider/run 方式三(动态路由) 导入配置类 网关Gateway的概念: Spring Cloud Gateway 是 Spri…

【网络工程师】NAT与动态路由

一、NAT网络地址转换 1、NAT:Network Address Translations 网络地址转换 2、ip地址问题:ipv4地址严重不够用了(A、B、C类可以使用 D组播 E科研) 3、解决:把IP地址分为了公网IP和私网IP 公网IP只能在公网上使用 私网…

LLM模型的generate和chat函数区别

在 Hugging Face 的 transformers 库中,GPT(Generative Pre-trained Transformer)类的模型有两个常用的生成文本的方法:generate 和 chat。这两个方法在使用上有一些区别。通常公司发布的 LLM 模型会有一个基础版本,还…

使用Docker容器部署LNMP服务

目录 实验前准备部署Nginx环境准备准备nginx.conf配置文件生成并启动镜像验证nginx 部署Mysql准备工作目录编写Dockerfile脚本准备my.cnf文件生成并启动镜像启动镜像容器验证mysql 部署php建立工作目录编写Dockerfile脚本准备配置文件生成并启动镜像验证php 启动wordpressmysql…

书生·浦语大模型实战营-学习笔记3

目录 (3)基于 InternLM 和 LangChain 搭建你的知识库1. 大模型开发范式(RAG、Fine-tune)RAG微调 (传统自然语言处理的方法) 2. LangChain简介(RAG开发框架)3. 构建向量数据库4. 搭建知识库助手5. Web Demo部…

非线性方程求根迭代法(C++)

文章目录 问题描述算法描述不动点迭代法一维情形多维情形 牛顿迭代法单根情形重根情形 割线法抛物线法逆二次插值法 算法实现准备工作一般迭代法割线法抛物线法逆二次插值法 实例分析例1例2 迭代法是一种求解非线性方程根的方法, 它通过构造一个迭代过程, 将一个非线性方程转化…

瑞_Java开发手册_(一)编程规约

文章目录 编程规约的意义(一)命名风格(二)常量定义(三)代码格式(四)OOP 规约(五)日期时间(六)集合处理(七)并发…

实现STM32烧写程序-(3) Hex文件结构

简介 要对STM32进行更新动作, 就需要对程序文件进行解析, 大部分编译的生成程序文件是Hex或者Bin, 先来看看Hex的结构吧。 资料 Hex文件 简介 Hex文件格式最早由Intel公司于1973年创建。它最初是为了在Intel 8080微处理器上存储和传输二进制数据而设计的。随后,Hex…

基于HarmonyOS的华为智能手表APP开发实战——Fitness_华为手表app开发

、 基于HarmonyOS的华为智能手表APP开发实战——Fitness_华为手表app开发 Excerpt 文章浏览阅读8.7k次,点赞6次,收藏43次。本文针对华为HarmonyOS智能穿戴产品(即HUAWEI WATCH 3)开发了一款运动健康类的游戏化APP——Fitness,旨在通过游戏化的方式,提升用户运动动机。_华…

c++ 开发生态环境、工作流程、生命周期-拾遗

拾遗 1 生态环境初识 当您使用Visual Studio 2019进行C开发时,您将进入C生态环境。以下是一些重要的概念和步骤: C程序的结构: 一个典型的C程序包括源文件(.cpp)、头文件(.h)、编译后的目标文…

【算法实验】实验1

实验1-1 斐波那契数 【问题描述】斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。 定义:F(0) 0, F(1) 1, F(n) F(n-1) F(n-2) 其中n>1 要求计…

ElasticSearch设置用户名密码访问

版本号:7.3.1 1、需要在配置文件中开启x-pack验证, 修改config目录下面的elasticsearch.yml文件,在里面添加如下内容,并重启 xpack.security.enabled: true xpack.license.self_generated.type: basic xpack.security.transport.ssl.enabled: true 2、执行设置用…

将 RxJava 的 Observable 转换为 Reactor 的 Flux流

如果您想将 RxJava 的 Observable 转换为 Reactor 的 Flux,可以使用 Reactor Adapter 库来实现这一转换。这个库提供了一些静态方法来将 RxJava 类型转换为 Reactor 类型。 以下是一个示例代码,演示了如何将 RxJava 的 Observable 转换为 Reactor 的 Flux: import reactor…

web前端算法简介之字典与哈希表

回顾 栈、队列 : 进、出 栈(Stack): 栈的操作主要包括: 队列(Queue): 队列的操作主要包括: 链表、数组 : 多个元素存储组成的 简述链表:数组&…

机器学习---xgboost算法

1. xgboost算法原理 XGBoost(Extreme Gradient Boosting)全名叫极端梯度提升树,XGBoost是集成学习方法的王 牌,在Kaggle数据挖掘比赛中,大部分获胜者用了XGBoost。 XGBoost在绝大多数的回归和分类 问题上表现的十分…

Golang+Gorm库使用踩坑——未标识primarykey导致创建后无法返回修改

问题描述 做毕设ing,基本的增删改查。 这里是一个需要增的地方,代码如下: func (BI *BlogImpl) CreateBlog(ctx context.Context, blogInformation repo.BlogInformation) (repo.BlogInformation, error) {err : BI.Db.Table(BlogTable).Cre…