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

作者:柳文浩、李浩杰、苏伟男、贾思萌、张天芸

单位:西安外事学院

指导老师:胡宝权、陈小虎

1. 产品说明

1.1 设计目的

      近年来,网球运动越来越受到老百姓的欢迎,各种规模的比赛层出不穷。然而由于网球运动极为激烈,运动过程中需要大量的跑动,运动员的体力消耗较大,因此人们在运动时,往往会多带一些网球以节省体力,然而这会导致球场散落大量的网球需要拾取。传统的方式往往是通过球童来拾取网球,然而这种方式劳动强度大、工作效率低,尤其是在正式比赛场合,无法满足竞赛需求。为了解决这一问题,目前市场上出现了一种新的网球拾取器,然而这种拾取器仍然是靠人力来进行驱动,需要依靠人的手臂向下压的动作来完成网球拾取任务。由于这种方式需要多次重复手臂的提拉操作,因此依然存在拾取效率低、工作强度大等问题。基于此,本项目拟开发一款室内网球多功能自动拾取机器人,该机器人具有避障、自动识别、检测、对网球进行抓取、运输和存储等功能,可广泛应用于家庭、体育场、网球训练室和网球游戏场地等环境,可以满足让人们的网球运动日常需求,具有一定的经济效益和社会价值。

1.2 设计背景

      随着现代科学技术的发展,服务类机器人在市场越来越受欢迎,它不仅给人们的生活提供了便利,还优化了人们的生活方式。网球机器人作为一款智能的家庭,体育等众多领域,具备一定的人工智能化,能够自主的进行拾取网球,为此人们解放了双手,提高了工作效率。同时网球机器人作为一项重要智能化技术正在迅速变革,从简单的抓取、搬运和存储等功能正在逐步扩展,增加识别分拣,因此设计一种合理的网球机器人具有重大的研究意义。本产品以网球机器人为研究对象,充分调研了目前网球机器人的研究现状,了解了目前网球机器人的发展趋势以及当前存在的不足,整个项目的最终目标是针对目前网球机器人功能单一、结构复杂等缺点进行改造,设计一种能够自主循迹并且准确收取的多功能智能网球机器人。该机器人可按照特定设计的路线并且绕开障碍物,完成规定的拾取任务。机器人精巧灵活,可以用转盘收集、储存、传输网球。

1.3 设计思路

      根据网球搬运机器人研究现状和需求分析,本设计采用“需求分析-关键技术-设计功能”的总体思路,如下图所示:

功能框图

需求分析

      因为在网球训练场地,网球覆盖了整个区域,为此拾取网球是一个费时费力的过程,在这种情况下我们设计了一款可以有效拾取网球的机器人,解放人们的双手,减少了劳动力,提高了经济效益。本产品主要使用了超声波,超声波在一定的距离感受到障碍物后会向后退,再向左转继续行驶,本项目设计的网球搬运机器人包括电机驱动模块、避障模块。

      ① 电机驱动模块:该产品使用了3个电机,用PWM调速,其中一个电机驱动风叶来拾取网球,另外两个电机驱动小车运动。

      ② 避障模块:机器人使用一个超声波,该超声波装在机器人的前方,用来检测前方是否有障碍物,检测出有障碍物时,小车会向后退,再向左转以避开障碍物继续行驶。

1.4 物理原理

      在小车向前走时,会碰到网球,由于惯性网球会通过引导板到达转轮处,旋转杆会带动网球向后滚去,最终到达车后里。小车是由铝合金制成,铝合金摩擦因数为0.3,网球直径为67mm,底板离底面高度为35mm,旋转杆长度为95mm,宽度为10mm,足以将网球带进去,经过测量得当小球离开叶片时离斜坡高为11mm,斜坡长度还有18mm,斜坡倾斜角度为38°。

由能量守恒:

将已知物理量代入得出当小球离开叶片时获得的初速度为 0.55。已知初速度,由

可得角速度为1.1rad/s,所以螺旋片的最小转速要大于1.1rad/s才可以达到转动小球,小球可以达到最高高度为35mm,假设与旋转杆发生弹性碰撞没有能量损失。由平抛公式,水平x=vt,竖直s=1/2(g*t^2) 经计算最大速度不大于0.54m/s才不会被反弹出去。

1.5 难题和解决方法

      轮盘如何准确抓取到物体是一个难点,我们通过不断的实验、测量、计算来最终解决这个准确抓取物体的问题。拾球效果差、拾球不彻底的问题也是一个难点,我们通过旋杆不停地转动来获取网球,用什么设备来进行循迹也是一个难点,通过上网搜索和查阅资料以及不断的试验和测量,决定最后用一个超声波来检测障碍物进行避障。如何按照规划的路线并且准确的完成循迹需要我们查阅资料以及不断的进行试验、调整,完成循迹任务。

1.6 创新点

      在本项目中,自动网球拾取机器人的工作原理参考了直升机螺旋桨的工作原理,即

其中网球质量为57g,直径为67mm,到达的高度为35mm,

      网球利用动能,然后克服自身的重力势能和摩擦力做功,最后就顺势进入机器人后部盛放网球的地方。而其它的机器人利用吸附类的容易卡住,夹取类的容易夹取不住或滑掉,铲子类的容易滑跑,而我们的则比它们更简单,更容易安装,即使坏了部分结构,只要更换就可以继续使用。本项目机器人采用1个超声波来避障,相比较其它机器人结构简单、取材少、经济性高。

2. 硬件介绍

2.1 主控板设计

      如下图所示为本系统的总体设计框图。本项目采用了一个BASRA主控板,采用的主控板为基于Arduino开源方案设计的Basra开发板,处理器核心是ATmega328, 具有 14 路数字输入/输出口(其中6路可作为 PWM 输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header 和一个复位按钮.如图3所示,控制板尺寸为55*55mm,便于安装。

系统设计总体框架

主控板接口图

2.2 Arduino控制板

      在Arduino控制板上添加电路是一个比较麻烦的事,所以采用了一个专用于机器人的简单扩展板,能将大部分传感器轻松地和arduino控制板连接,即Arduino 2560。它内置了16个模拟传感器和54个数字传感器接口,支持USART和其他通信模式。内置了RTC等功能,如模拟比较器、高级定时器、控制器唤醒机制中断等,16MHz晶钟可获得16 MIBS,同时它省电、快速度。除此之外,还具有5v、3.3v及vin3种电源接口,便于为各类扩展模块供电。如下图所示为Arduino 2560实物图:

Arduino 2560实物图

2.3 超声波传感器

      超声波传感器是将超声波信号转换成其它能量信号(通常是电信号)的传感器。超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小,特别是方向性好、能够成为射线而定向传播等特点。超声波对液体、固体的穿透本领很大,尤其是在阳光不透明的固体中。超声波碰到杂质或分界面会产生显著反射形成反射回波,碰到活动物体能产生多普勒效应。如下图所示为超声波传感器:

超声波传感器正面

超声波传感器背面

2.4 旋转杆

      转盘由三个杆组成,通过驱动模块来驱动伺服电机带动三个齿轮来带动扫把进行连轴转动来收取网球,风叶长95mm宽10mm,能够转动300g网球。

3. 软件设计

      本次设计的自动水车型乒乓球机器人,代码运行环境是基于win10 Arduino1.5.2,直流电机直连5V电源,舵机步进电机接口采用的是A4988。下图为本次作品的系统软件设计总体流程:

系统软件流程图

4. 调试过程

      ① 整体方案确定好以后,项目组成员开始组装基础的零部件。

② 将组装好的零部件拼接,以形成各部分的主体结构,然后进行整体拼装。

③ 组装好的网球拾取旋转头。

④ 指导老师在帮忙解决组装和调试过程中遇到的问题。

⑤ 项目组成员在进行紧张的编程调试工作。

⑥ 初步组装完成的系统在桌面进行调试。

⑦ 调试完成的系统在地面进行试验,达到了预期的效果。在后期设计过程中,本项目将在既有水平的基础上根据项目设计方案进行进一步的优化和调整,以使得我们的产品功能更为完善,性能更为优越。

5. 示例程序

#define V_MAX 9600 //步进电机速度#define ECHOPIN 14#define TRIGPIN 15void setup() {Serial.begin(9600);initMotor();pinMode(ECHOPIN, INPUT);pinMode(TRIGPIN, OUTPUT);//test// moveTest();}void loop() {//     moveTest();digitalWrite(TRIGPIN, LOW);delayMicroseconds(2);digitalWrite(TRIGPIN, HIGH);delayMicroseconds(10);digitalWrite(TRIGPIN, LOW);float distance = pulseIn(ECHOPIN, HIGH);distance= distance/58;if (distance >= 20){forward();}if(distance < 20){gostop();goback();goback();goback();goback();turn_left();turn_left();turn_left();}delay(50);}//============================================================void moveTest(){move( 80, 80, 80, 80); //前进move(-80, -80, -80, -80); //后退move(-80, 80, 80, -80); //左平移move( 80, -80, -80, 80); //右平移move(-80, 80, -80, 80); //左转move( 80, 80, -80, -80); //右转}void forward(){move(80,80,80,0);move(80,80,80,0);delayMicroseconds(2);}void turn_left(){move(80,80,-80,0);}void turn_right(){move(80,-80,80,0);}void gostop(){move(80,0,0,0);}void goback(){move(80,-80,-80,0);}#include "Arduino.h"#include <AccelStepper.h>#include <MultiStepper.h>#define EN 8#define MAIN_STEP 200 //步进电机每圈步数#define MICRO_STEP 16 //驱动细分数 (gaile 16->2)#define TOTAL_STEP (MAIN_STEP * MICRO_STEP) //16 细分下每圈步数#define D_WHEEL 56.5 //车轮直径/mmconst double CWheel = M_PI * D_WHEEL; //车轮周长/mmconst double Ratio = TOTAL_STEP / CWheel; //step/mmAccelStepper stepper_x(1, 2, 5);      //xAccelStepper stepper_y(1, 3, 6);      //yAccelStepper stepper_z(1, 4, 7);      //zAccelStepper stepper_a(1, 12, 13);    //aMultiStepper steppers;void initMotor(){pinMode(EN, OUTPUT);digitalWrite(EN, LOW);steppers.addStepper(stepper_x);steppers.addStepper(stepper_y);steppers.addStepper(stepper_z);steppers.addStepper(stepper_a);stepperSet(V_MAX);}//x ; y ; w / mmvoid move(double x, double y, double z, double a){double step_x, step_y, step_z, step_a;x *= Ratio;y *= Ratio;z *= Ratio;a *= Ratio;step_x = x;step_y = -y;step_z = z;step_a = -a;stepperMove(step_x, step_y,step_z,step_a);}void stepperSet(double _v){stepper_x.setMaxSpeed(_v);stepper_y.setMaxSpeed(_v);stepper_z.setMaxSpeed(_v);stepper_a.setMaxSpeed(_v);}void stepperMove(long _x, long _y, long _z, long _a){long positions[4];positions[0] = _x;positions[1] = _y;positions[2] = _z;positions[3] = _a;steppers.moveTo(positions);steppers.runSpeedToPosition();stepper_x.setCurrentPosition(0);stepper_y.setCurrentPosition(0);stepper_z.setCurrentPosition(0);stepper_a.setCurrentPosition(0);}

* 更多详情请参考 【S029】网球自动拾取机

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

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

相关文章

OpenCvSharp从入门到实践-(03)像素

目录 像素 1、确定像素位置 2、获取像素的BGR值 3、修改像素的BGR值 像素 图像数字化是指用数字表示图像&#xff0c;每一幅数字图像都是有M行N列的像素组成的&#xff0c;其中每一个像素都存储一个像素值。计算机通常会把像素值处理为256个灰度级别&#xff0c;这256个灰…

VMWare虚拟机ubuntu克隆打不开

ubuntu克隆打不开 复制的存有ubuntu克隆的文件夹&#xff0c;导入vmware打不开 说找不到这个文件&#xff0c;那就到目录把它的删掉 的删掉 换000001.vmdk后缀的

Centos7上面部署redis

Centos7上面部署redis 编写这个部署redis&#xff0c;只是为了另一个文章入侵redis做准备&#xff0c;网上还有好多类似的文章&#xff0c;这个单纯的就是部署安装&#xff0c;并简单的测试使用以下 关联其他文章 [1]VMware上面安装部署centos7镜像系统【详细含镜像】 [2]血的教…

汽车转向桥设计转向节转向桥机械设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;转向桥 获取完整报告说明书工程源文件 转向节图 装配图 本文设计的是JY1061A型采用前置后轮驱动的载货汽车转向桥&#xff0c;因此该转向桥为从动桥。从动桥的功用&#xff1a;从动桥也称非驱动桥&#xff0c;又称从动车轴…

【沐风老师】3DMAX快速地板屋顶墙面铺设插件使用方法详解

3DMAX快速地板屋顶墙面铺设插件使用教程 3DMAX快速地板屋顶墙面铺设插件&#xff0c;一键生成各种地板、墙面纹理模型&#xff0c;是一款非常实用的室内设计和建筑建模插件。 【适用版本】 3dMax7或更新版本 【安装方法】 该插件无需安装&#xff0c;直接在建模过程中使用&a…

基于单片机寻迹巡线避障智能小车系统设计

**单片机设计介绍&#xff0c; 基于单片机寻迹巡线避障智能小车系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的寻迹巡线避障智能小车系统是一种能够自动跟随线路并避开障碍物的智能小车。下面是一个简要的系…

“2024杭州人工智能展览会”加快推进浙江省人工智能产业创新发展

杭州市人民政府加快推进人工智能产业创新发展&#xff0c;贯彻党的二十大精神和新的发展理念&#xff0c;把握人工智能技术演进趋势和创新发展新范式&#xff0c;以促进人工智能与实体经济深度融合为主线&#xff0c;以优质算力普惠供给为基础&#xff0c;到2025年&#xff0c;…

图论——最小割问题

Capacity&#xff08;S&#xff0c;T) Min-Cut(通俗的说就是用最小的力气隔断&#xff09; 最小割并不唯一 最大流最小割定理 对于一个网络流问题&#xff0c;最大流的流量最小割的容量 寻找最小割 可以使用Edmonds-karp or Dinic algorithm 首先寻找任意一个最大流&#xff…

Pinctrl子系统和GPIO子系统实验

驱动入口出口函数&#xff1a; static int __init led_init(void) {return 0; } static void __exit led_exit(void) { }module_init(led_init);module_exit(led_exit);MODULE_LICENSE("GPL");字符设备驱动那一套 先创建设备结构体 &#xff08;cdev&#xff09; 1…

属性级情感分析

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 属性级情感分析 简介数据集介绍数据加载和预处理&#xff08;data_utils.py&#xff09;预训练模型&#xff08;skep&#xff09;模型定义模块&#xff08;model.py&#xff09;训练配置&#xff08;config.py&am…

js最新随机字符串,进制数随机字符串,更优秀的随机字符串方式,你绝对没用过的随机字符串方式,可控制位数!

js最新随机字符串&#xff0c;进制数随机字符串&#xff0c;更优秀的随机字符串方式&#xff0c;你绝对没用过的随机字符串方式&#xff0c;可控制位数&#xff01; 函数封装和传参 首先我们&#xff0c;要封装这样一个函数&#xff0c;首先要确定&#xff0c;传入哪些参数。…

Java抽象类和接口(2)

&#x1f435;本篇文章继续对接口相关知识进行讲解 一、排序 1.1 给一个对象数组排序&#xff1a; class Student {public String name;public int age;public Student(String name, int age) {this.name name;this.age age;}public String toString() {return "name:…