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

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

单位:西安外事学院

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

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 15

void 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 //车轮直径/mm

              const double CWheel = M_PI * D_WHEEL; //车轮周长/mm

              const double Ratio = TOTAL_STEP / CWheel; //step/mm

              AccelStepper stepper_x(1, 2, 5);      //x

              AccelStepper stepper_y(1, 3, 6);      //y

              AccelStepper stepper_z(1, 4, 7);      //z

              AccelStepper stepper_a(1, 12, 13);    //a

             

              MultiStepper 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 / mm

                void 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】网球自动拾取机

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

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

相关文章

使用jenkins和tomcat创建并部署maven项目

准备三台服务器&#xff1a; 192.168.58.139 部署tomcat 详细参照&#xff1a;http://t.csdnimg.cn/Yp2z2 192.168.58.140 部署gitlab 详细参照&#xff1a;http://t.csdnimg.cn/Sb1uz 192.168.58.153 部署Jenkins 详细参照…

代码随想录训练营第30天 | 332.重新安排行程、51. N皇后、37. 解数独

332.重新安排行程 题目链接&#xff1a;重新安排行程 解法&#xff1a; 这个题&#xff0c;卡哥的思路会超时。辛辛苦苦看懂了卡哥的思路&#xff0c;结果超时了&#xff0c;直接崩溃。 看了leetcode官方的思路&#xff0c;非常简洁&#xff0c;但是里面的深意还是不太懂。 由…

excel对号怎么打

对号无论是老师批改作业&#xff0c;还是在标注某些数据的时候都会用到&#xff0c;但这个符号在键盘上是没有的&#xff0c;那么excel对号怎么打出来呢&#xff0c;其实只要使用插入符号功能就可以了。 excel对号怎么打&#xff1a; 第一步&#xff0c;选中想要打出对号的单…

OpenCV快速入门:移动物体检测和目标跟踪

文章目录 前言一、移动物体检测和目标跟踪简介1.1 移动物体检测的基本概念1.2 移动物体检测算法的类型1.3 目标跟踪的基本概念1.4 目标跟踪算法的类型 二、差值法检测移动物体2.1 差值法原理2.2 差值法公式2.3 代码实现2.3.1 视频或摄像头检测移动物体2.3.2 随机动画生成的移动…

利用kibana 快照备份es数据库

环境 主机名ip地址组件ambari-hadoop1192.168.10.101ambari-hadoop2192.168.10.102kibanaambari-hadoop3192.168.10.103es 这里我们利用共享文件系统&#xff0c;存储快照&#xff0c;所以需要利用到nfs&#xff08;NFS&#xff08;Network File System&#xff09;是一种分布…

AI超级个体:ChatGPT与AIGC实战指南

目录 前言 一、ChatGPT在日常工作中的应用场景 1. 客户服务与支持 2. 内部沟通与协作 3. 创新与问题解决 二、巧用ChatGPT提升工作效率 1. 自动化工作流程 2. 信息整合与共享 3. 提高决策效率 三、巧用ChatGPT创造价值 1. 优化产品和服务 2. 提高员工满意度和留任率…

锂电行业废水及母液除铊解决方案,除铊树脂技术

锂电池原材料和生产设备的制造、电池回收和处理等&#xff0c;产业的发展会带来铊排放问题。除了锂电池生产过 程中存在的铊污染外&#xff0c;企业的生活污水或者初期雨水也含有铊&#xff0c;因为铊是一种广泛存在于自然环境中的 元素&#xff0c;存在于饮用水、土壤和食物中…

【Linux】初识重定向(输入输出)

一切皆文件 这是Linux的设计理念&#xff0c;因为这个理念的存在我们可以使用统一的方法对待不同的东西&#xff0c;&#xff0c;这也是为什么嵌入式之类的会需要Linux&#xff0c;因为用LInux来操纵硬件真的很方便 另外我们下文也会都基于这个理念来命名&#xff0c; 比如&am…

【前端开发】Remix与Next.js

很容易&#xff0c;我们被问到的最大问题是&#xff1a; Remix与Next.js有何不同&#xff1f; 看来我们必须回答这个问题&#xff01;我们想直接而不带戏剧性地解决这个问题。如果你是Remix的粉丝&#xff0c;并且想开始在推特上对这篇文章做出沾沾自喜的反应&#xff0c;我们恳…

构建沉浸式 AI 文本编辑器:开源 3B 编辑器的设计原则与思路

借助于在 AutoDev 与 IDE 上的 AI 沉浸式体验设计&#xff0c;我们开始构建一个 AI 原生的文本编辑器&#xff0c;以探索沉浸式创作体验。其适用于需求编写、架构文档等等文档场景&#xff0c;以加速软件开发中的多种角色的日常工作。 GitHub&#xff1a;https://github.com/un…

Android问题笔记四十九:ViewPager 嵌套 Fragment 扩大滑动响应区域,避免左右滑动过于灵敏问题

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

WPS Office JS宏实现批量处理Word中的表格样式

由于本职工作原因&#xff0c;经常会用到office办公软件&#xff0c;经常很多内容审批后&#xff0c;需要统一修改内容或样式&#xff0c;如果Word文档中有上百页或上千页&#xff0c;则一个一个修改太麻烦了。 在接触到WPSJS宏后&#xff0c;发现工作效率大大提升&#xff1b;…

ETL+BI结合的数据集成工具

在当今信息化时代&#xff0c;企业积累了大量的数据资产&#xff0c;如何高效地提取、转换和加载&#xff08;ETL&#xff09;这些数据&#xff0c;并将其转化为有用的洞察力成为了企业取得竞争优势的关键。同时&#xff0c;商业智能&#xff08;BI&#xff09;作为一种数据驱动…

ChatGPT等模型:到2026年,将消耗尽高质量训练数据

《麻省理工技术评论》曾在官网发表文章表示&#xff0c;随着ChatGPT等大模型的持续火热&#xff0c;对训练数据的需求越来越大。大模型就像是一个“网络黑洞”不断地吸收&#xff0c;最终会导致没有足够的数据进行训练。 而知名AI研究机构Epochai直接针对数据训练问题发表了一…

不受平台限制,Sketch 网页版震撼登场

Sketch 是一种基于 Mac 的矢量图形编辑器&#xff0c;可用于数字设计。其主要功能包括无损矢量编辑、完美像素精度和数百个插件同步功能&#xff0c;可导出预设和代码。它是目前流行的页面交互协作设计工具。但是 Sketch 最大的缺点是对 Windows/PC 用户不友好。严格来说&#…

CentOS添加开机启动

1.编写项目启动脚本&#xff08;run.sh&#xff09; #!/bin/bash-切换到程序所在路径 cd /home/cavs_install/app/cavs-admin/target/ # 等待其他组件启动完毕后再启动本项目&#xff08;如果不需要等待&#xff0c;本步骤可省略&#xff09; sleep 300 # 实际启动命令 nohup …

01:编译lua及C调用

我们今天在windows平台编译lua&#xff0c;生成 lua动态库,lua.exe&#xff0c;luac.exe 我把这个目录上传到giee&#xff0c;使用下面命令获取它: git clone gitgitee.com:jameschenbo/lua_c_application.git 或者直接访问:访问网页 目录结构如下&#xff1a; build.cmd 是…

Sass 安装

文章目录 前言SASS的系统要求安装Ruby例子后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&…

编程题 :简单的洗牌算法的实现

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 目录 &#x1f324;️简单的洗牌算法…

大语言模型:以Amazon Titan等大语言模型为例介绍

大语言模型&#xff08;Large Language Model&#xff09;是一种人工智能技术&#xff0c;通过对海量文本数据进行训练&#xff0c;学习语言的结构、规则和语义&#xff0c;从而可以生成具有自然语言风格的文本或回答自然语言的问题。大语言模型一般基于神经网络技术&#xff0…