机器谱

S068】多功能核酸辅助机器人

图文展示3264(1)

图文展示3264(1)

副标题

作品说明

1. 多功能核酸辅助机器人的研究前景

      近年来,经过产业化发展,机器人行业已进入重要的窗口期。机器人行业得以快速发展的原因一方面是因为我国制造是世界最大、工业门类最为完整的,并且具备高质量制造发展的能力另一方面是机器人不仅能够降低降低用工成本,各行各业在追求高质量发展和转型过程中机器人能提高企业的生产效率。在全球各地疫情的反复下,持续推高新冠检测需求,截止目前全球共检测新冠病毒11亿人次,中国检测人数超过150万人次/日。为了巩固疫情防控成果,坚持“外防输入、内防反弹”总策略、“动态清零”总方针,规范到位落实疫情防控政策要求,举一反三化解风险隐患,立行立改补齐短板弱项。增加核酸检测点、移动核酸检测车、方舱实验室,按照24小时内完成全市全员检测的标准配备核酸检测能力。疫情还未结束,核酸检测就会成为“刚需”“急需”。尤其在春运期间或者中高风险地区,公众或者政府对核酸检测的需求更集中,各地有必要根据实际情况,不断提升核酸检测能力和效率。而在一些不安全的,不方便人们操作的地区或者领域,这些地区的自然条件比较恶劣,例如,沙漠,悬崖峭壁,严寒地区等等。总而言之,这些地区不仅地形复杂,而且存在众多的不确定性,如果派医护人员去到那种极其恶劣的环境中工作,那么风险将会更大。因此,多功能核酸辅助机器人的出现必然是大趋势。我们的多功能核酸辅助机器人的研究是可以根据地形变化而作出调整,从而提高核酸检测的效率,增加防护人员自身的安全系数,减轻工作人员的工作量。

2. 作品简介

      针对本次比赛,我们小组共同研究探索了几套组装制作流程,经过本组成员和老师的探讨商议下,最终选择了主要四轮型车体并且前面车尾放置一伸出小轮胎的这样一种轮系套组,保证其在直线工作的同时,也能具有灵活的转向应变能力。以保证它在复合地形赛道中配合传感器传导能够取得更好的成绩。机械结构以四轮小车为基础,可用于翻越障碍,其机械结构上通过车轮和万向轮的结合使小车具有翻越障碍的能力,硬件电路上使用Arduino核心板,电池组以及稳压模块组成了单片机系统;软件上结合黑标寻迹和颜色识别实现了小车自主路径选择的功能。经过调试后的小车具有寻迹稳定性高,识别准确,响应迅速的特点。

      车身采用半悬挂式结构,在爬楼梯的过程中,4个轮子能够同时接触地面,可增加动力,并依靠导轮实现在隧道内的转向使得小车有足够的摩擦力来攀爬上阶梯和格栅而不至于打滑。采用灰度传感器来检测车辆行驶路线,使其能够在障碍之间跑直线。车前两轮并在出隧道的时候对小车的转向作相应的调整以减少其偏向。同时在应用到日常生活中能够适应复杂地形的多变性,应用到搜查救援,循迹,运输等领域上也能取得更好的效果,达到事半功倍的效果。

3. 结构方案说明

3.1 作品机构简图

作者:李聪慧 刘晨宇 张梦月 金奎宇 刘年玉

单位:哈尔滨商业大学轻工学院

指导老师:纠海峰

作品说明

3.2 实物

3.3 设计思路

3.3.1 多功能核酸辅助机器人的功能需求

      多功能核酸辅助机器人的应用优势,在于“辅助核酸”“全地形”与“移动”三个部分。第一部分,在大环境的影响下,医护人员工作压力过大,生命健康也有很大的风险,我们的机器人可以降低医护人员的工作量,并对医护人员的健康安全进行了较大的保障第二部分,在全地形的应用背景下,机器人具备良好的路地形适应能力,可在复杂地形环境下执行标准的任务动作第三部分机器人在移动过程中,应保持路线精准,可实现较高的工作效率与工作质量。对此上基本要求,多功能核酸辅助机器人的结构与系统设计,可总结出以下3点功能需求:

      减轻核酸检测的医护人员的工作量需求。机器人在医护人员的辅助下,能完成核酸检测的功能

      适应复杂地形的需求。即机器人具有以爬坡、越障等运动功能

      自动寻迹的需求因为我们采用的是自主运行,所以机器人可根据传感系统的控制下进行自动寻迹从而达到所设计的功能要求。

3.3.2 底盘结构方案选择

      经过对多功能辅助机器人的国内外发展的大概分析,以及在网上查阅的相关资料,可以得到大概有三种小车的类型,有轮式、履带式、足式。如下表所示,对机器人底盘结构设计方案分析并选择。

种类

实物图

分析

轮式


四轮小车、机器人四轮底盘、DIV四轮底盘、四轮驱动、四轮越障底盘、DIV四轮移动机器人、四轮差速机器人、自适应四轮底盘

优点:速度快、效率高、运行稳定、最常见并且应用极其广泛,其具有结构简单、控制方便、机动灵活、行驶效率高、运动阻力较小、性能稳定等优点。

缺点:越障能力、地形适应能力差,对于轮体和悬架设计要求较高。

常见的轮式移动机器人有两轮移动机器人、三轮机器人、四轮机器人以及六轮移动机器人。


履带式


履带式底盘、履带式移动机器人、履带式越障机器人、履带式四轮差速底盘、履带式机器人底盘车、智能机器人履带底盘车

优点:由于履带与地面的接触面积较大,车体对地面单位面积上的压力较小,因此履带式移动机器人适用于土质比较松的场地。履带式移动机器人通常情况下采用差速驱动,能够实现原地转向运动,越障性能也比较突出。越障能力、地形适应能力强,可原地转弯。

       缺点:速度相对较低、效率低、容易打滑。在越障过程中车体起伏较大,车体不稳定,这也造成了履带式移动机器人不能负载重量大、体积大的搭载设备。

足式


足式机器人、腿足式机器人、四足机器人、四足机器人设计、开源四足机器人设计、

优点:地形适应能力强,越野机动性强,工作范围广,和地面接触面积小,爬坡、跨越台阶和沟壑越障性能强。

       缺点:结构和控制复杂,能耗较高,速度和效率较低,速度缓慢、重心较高,稳定性较差。



      由以上三种结构方案分析总结,并且本文机器人越障所模拟的是山地,多为陡峭的斜坡和崎岖的地面,轮式全地形小车快速移动,活动灵活,结构简单,控制相对简单, 运行稳定。因此选择轮式作为本论文的多功能核酸辅助机器人的底盘结构。

3.3.3 机器人驱动设计分析

      机器人的运行驱动主要从双轴直流电机和舵机进行分析,舵机比双轴直流电机驱动稍微强,但是无法进行360°旋转,并且双轴直流电机和舵机比起来更加稳定,双轴直流电机本身的控制方法简单,只要在电机两条控制线上加一定的电压便可让电机旋转,在工作电压范围之内,电压越高,电机的转速就会越快。至于双轴直流电机调速方法有直接调整电压和PWM调速。PWM调速原理就是将输出端的脉冲波形转为正弦波,实现电机转速的改变只需通过改变矩形波的占空比进而实现电压的改变。在第三章会详细说明电机PWM调速原理。选取的双轴直流电机图如下图所示,电机参数如下表所示。

双轴直流电机、直流电机、双轴直流马达、直流马达双轴直流电机尺寸图、直流电机尺寸图、直流马达尺寸图

双轴直流电机实物图

双轴直流电机尺寸图

工作电压

电流(空载)

转速(空载)每分钟

扭力

减速比

4.5V

<130ma

70~113rpm

0.5kgf·cm

1:87


可得双轴直流电机的电机功率

其中,电机扭矩

电机转速

结果可以得出电机的功率为

      最终机器人运动是选取的是多轮全驱动模式,对每个车轮同时提供驱动力,其输出动力强劲,从而在一定程度下加强了机器人越障性,使每个车轮直接与双轴直流电机相连,直接向每一个车轮提供动力。这种结构不仅能够给机器人提供强大的动力,同时动力传动比较高,动力损失小。

3.3.4 小车整体框架设计

3.3.5 小车车轮设计

      因为选择的是六轮小车,小车前轮选用直径大宽度小的轮,主要用大轮和履带片拼装,如下图所示。中轮和后轮都用直径小宽度大的轮,用的是1:10模型轮胎,如下图所示。这样不仅能提高小车的抓地力,还能提高小车的稳定性,前轮选择直径大的大轮主要是因为是小车能够翻越高的障碍物。并且每个车轮直接与双轴直流电机相连,直接向每一个车轮提供动力。这种结构不仅能够给全地形小车提供强大的动力,同时动力传动比较高,动力损失小。用联轴器和直流电机输出头将车轮与电机相连,如下图所示。

轮胎、履带轮胎、机器人小车轮胎、履带式底盘、履带式移动机器人、履带式越障机器人、履带式四轮差速底盘、履带式机器人底盘车、智能机器人履带底盘车轮胎、机器人小车轮胎、履带式底盘、履带式移动机器人、履带式越障机器人、履带式四轮差速底盘、履带式机器人底盘车、智能机器人履带底盘车

小车前轮

小车中轮和后轮

轮胎、履带轮胎、机器人小车轮胎、履带式底盘、履带式移动机器人、履带式越障机器人、履带式四轮差速底盘、履带式机器人底盘车、智能机器人履带底盘车轮胎、机器人小车轮胎、履带式底盘、履带式移动机器人、履带式越障机器人、履带式四轮差速底盘、履带式机器人底盘车、智能机器人履带底盘车

电机与大轮安装

电机与小轮安装


4. 控制方案说明

4.1 控制系统设计思路

      本文所针对的多功能核酸辅助机器人是自主运行完成所需要的任务,当机器开始工作时,红外探测器优先进行扫描,从而返回信号元。机械臂开始调整合适的位置距离与角度,协助医务工作人员加持一次性棉签后对准需检测人员,进行核酸采集,最后将棉签投入试管夹度转盘,完成工作。而底盘部位的小车是可以进行定点巡航,以自主形式来通过障碍物,并且通过对摄像头看到物体进行识别,然后采取不同的方案,使小车直行自己的任务。但是本科能力有限,我们将小车的自动寻迹通过灰度传感器来识别黑线来使小车行驶和越障,并且通过信号接收来判定舵机的运动从而完成小车的工作。 本文通过arduino平台对小车进行逻辑代码的书写下面我们将arduino以及程序流程图。

      Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种 型号的 Arduino 板)和软件(Arduino IDE)。构建于开放原始码 simple I/O 介面版,并且具有使用类似 Java、C 语言的 Processing/Wiring 开发环境。硬件部分是可以 用来做电路连接的 Arduino 电路板软件部分是 Arduino IDE,你的计算机中的程序 开发环境。Arduino 能通过各种各样的传感器来感知环境,通过控制灯光、马达 和其他的装置来反馈、影响环境。Arduino IDE 基于 processing IDE 开发。对于初 学者来说,极易掌握,同时有着足够的灵活性。Arduino 语言基于 wiring 语言开发,是对 avr-gcc 库的二次封装,不需要太多的单片机基础、编程基础,简单学 习后,你也可以快速的进行开发。Arduino 的硬件原理图、电路图、IDE 软件及核 心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。

4.2 程序流程图

4.2.1 总程序流程图

4.2.2三路寻迹程序流程图

      启动开关,小车开始根据三个灰度传感器是否识别到黑线来行驶,中间的传感器识别到黑线小车直行,左边的传感器识别到黑线小车向左偏移,右边的传感器识别到黑线小车向右偏移。流程图如下图所示

4. 硬件电路连接原理图

6. 创新设计说明

      防疫攻坚战同样也是科技保卫战。科技防疫、精准防疫,种种都离不开大数据互联互通、共享应用。也再没有哪一年,像如今这样,让人们对于“科技赋能”这四个字的理解和实践如此深入。对于新冠疫情发生多种变异后的后疫情时代,各种科技手段充分发挥技术优势,智能机器自动化、红外探测成像识别等技术齐上阵,逐渐成为了疫情防控的中坚力量。科技为复产复工赋能,用数字技术“战斗”,已经成为了抗疫的一大有力保障。自2019年新冠肺炎肆虐以来,国家在各大场所如车站,小区门前,旅游景区门前,都设置了很多工作人员用来核查人员信息,督促人们扫码测温并进行消毒,这些工作危险系数很高,这些工作人员承担了很大的风险,为了保护十四亿人民的健康生活,无时无刻不在奋斗着,随着人们对健康生活的注重,对健康的保护,研究出多功能核酸辅助机器人来减缓医疗工作人员的核酸采集的长时间超负荷运作的巨大压力是一件极为重要的事。

      多功能核酸辅助机器人主要设计的初衷就是为了减轻医疗工作人员的核酸采集工作压力,同时减少居民的等待核酸的排队时间。

6.1 创新点

      在多功能核酸辅助机器人的车上身结构中配有四自由度的机械臂,当需要角度变化时,可以不断保持,进行完成四个自由度的系统控制命令,操作灵巧精准水平高。机械臂是由舵机驱动齿轮传动而进行加持的,虽然体积不大,但输出的力大,从而使机械臂的加持力度也更大。

      在车上身结构中还配有红外探测器检测红外成像,精准锁定人体距离。当需进行检测核酸的人员进入到指定区域时,红外探测器自动扫描定位人体与机器的距离,并调整位置与角度,保证了核酸采集时棉签的角度正确,确保了核酸采集工作的跟进。试管夹度转盘装置,程序可设置为混检10次每组,当机器进行10次循环操作之后,舵机转动120°之后进行下一轮试管收集棉签工作。

      在底盘的前部结构设有三个灰度传感器进行循迹。在本核酸辅助机器人的底盘结构设计中,我们在底盘后方采用了半悬挂式结构,也称月球车结构,可以进行全地形越野避障运动,能在不同的地形实现定点巡航。底盘机体结构为六轮二段式。底盘小车以六轮为基础,第一段前四轮为一个整体,为整车提供主要动力。第二段为后两轮采用悬挂式结构设计,增大小车在越障时与地面的有效接触面积,为小车提供辅助驱动力,并且在通过台阶等障碍时能与车身前半部分形成一定的倾角,增强车身的整体灵活性。我们在车身中间增加了两个小轮,用于辅助车身的稳点性,使其能够适应各种复杂地形。并且底盘的主要车身部分与前轮车架采用滚动轴承联接,增加了小车的灵活性与机动性,无论是爬坡、转弯等复杂路段,都比其普通四轮小车更加的平稳快速。

      本小车的前轮半径约为后轮的 2 倍,能够减少动力流失,加宽轮胎能增大与 地面接触面积,从而提供更大抓地力,防止汽车加速时打滑,造成动力流失;其 次与地面接触面积增大,会提高车辆在弯道时操控性,例如急刹时,胎面更多的 纹沟槽就像吸力强劲吸盘,牢牢地扣住地面,在湿滑路面也从容应对;最后是视 觉效果更具运动感,在视觉上,宽轮胎更受欢迎,轮胎扁平比小,橡胶胎显得更薄而轮毂更大。

6.2 创新点在实际中的应用

      通过各大网络平台,我们可以看到有很多工作人员因为过度劳累和肆虐的病毒对自己的健康造成了很大的影响,甚至有些人因此失去了生命。作为常态化疫情防控的重要手段和基础性要求,居民们必须“核酸检测”已成常态。

      为进一步加强疫情预警和监测,提高防控精准性、有效性,多功能核酸辅助机器人的部署势在必行,而更加便捷高效,功能更加齐全的系统项目对于疫情防控的作用也是不言而喻的,多功能核酸辅助机器人不仅仅可以提高核酸采集现场的工作效率,大大减轻医务工作人员的压力,在核酸采集工作进行时,多功能核酸辅助机器人可以首先利用灰度传感器进行循迹,利用底盘的半悬挂式结构进行全地形越野避障,在接受定点巡航的指令后,前往指定地点进行等待核酸采集工作的开始,核酸工作人员仅需进行健康码扫描以及等待加持一次性棉签,棉签收集试管的结尾工作,可以大大地节省人力物力,在超负荷、长时间的高压工作下,保证医务人员可以‘调休’,以换取工作人员更多宝贵的休息时间,给亲人打一个电话报平安,给自己留一点时间关照自己的身体,给居民以更快速地核酸采集体验,节省时间。

7. 设计过程及制作过程

7.1 设计过程

      接到比赛后,我们小组几人合理分配好工作任务,通过老师的指导,请教学长学姐的设计经验和思路、查阅指导书,指导视频,观看探索者创新设计线上培训的直播等方式,从小车的部分结构着手,通过一次次地实践,选定了性能比较好的方案,到轮系的选择和分配、传感器的调试和安装,最后到小车的整体结构的设计,循序渐进,进行方案的试验和对比,通过反复地模拟实验,在老师的指导下,最终确定了我们比较满意的设计结构。

7.2 制作过程

      用给定的“探索者”零件箱,选用合适的各类零件,先将底部基础结构搭建好,选用合适的电机、马达等动力系统所需零部件,再选择主要的四轮轮系,选择此轮系时需考虑前一步选择的电机可以带动的轮胎,否则电机功率过小会导致轮胎的转速不足,无法在规定时间内更快更好地完成比赛,合理选择后将其组装在车身上接下来选择合适的传感器用以编程,然后将其组装在车身中部,接下来则是对前横置轮系的选择,要考虑到它应该足够轻且足够坚固,在撞到障碍物时可以保证不被毁坏并且可以保证小车的平衡。最后则是车身其余零件和外壳的选择,并将其分别组装到车身所需的部分。到此为止,车身的大体结构就已经搭建完毕,接下来则需要进行逐步的实体的调试,来检验小车各部分结构能否正常运行,能否满足赛道要求运行,车身整体结构是否坚固,车身设计是否合理等,待逐步检查均合适后,小车则初步制作完成。制作过程图片,成品见下图。

制作过程图

成品图

7.3 制作及调试过程中遇到的困难

      ① 小车具体结构一开始未完全确定,在拼装过程中一直碰壁,屡败屡试,付出了很多的时间和经历。

      ② 因目前大学所学课程未涉及到电路连接及程序编写,故四处请教,上网查阅,学习的过程中布满“荆棘”,但最终逐一击破各个困难,完成电路部分。

      ③ 调试初期机械臂的运行程序经过多次调整,才得以使机械臂按预计线路运行,完成采集核酸这一动作。

      ④ 采集核酸后棉签的掉落问题,经过了多次角度变化和容器调整,完成了采集核酸后棉签自动掉落进试管里。

8. 示例程序

#include <Servo.h>

#include <FlexiTimer2.h>

#define S0    3     

#define S1    4   

                   

#define S2     7

#define S3     8

#define OUT    2

#define LED    11

int   g_count = 0;

int   g_array[3];

int   g_flag = 0;

int   c_state = 0;

int   Interrupt_time =20;

int   h=0;

int   e=1;

int sensor[3] = {0, 0, 0};

float max = 3.85;

float s = 255;

float Kp = 60, Ki = 15, Kd = 60;

float error = 0, P = 0, I = 0, D = 0, PID_value = 0;

float previous_error = 0, previous_I = 0;

int initial_motor_speed = 125;

int servoPin =12;

int pos = 0;

int poss =180;

int c = 0;

int x=0;

int before=0;

int button=0;

int beginState=1;

void setup()

{

  pinMode(5,OUTPUT);

  pinMode(6,OUTPUT);

  pinMode(9,OUTPUT);

  pinMode(10,OUTPUT);

  pinMode(A0,INPUT);

  pinMode(A2,INPUT);

  pinMode(A3,INPUT);

  pinMode(S0, OUTPUT);

  pinMode(S1, OUTPUT);  

  pinMode(S2, OUTPUT);  

  pinMode(S3, OUTPUT);  

  pinMode(OUT, INPUT);  

  pinMode(LED, OUTPUT);

  pinMode(12,OUTPUT);

 

  digitalWrite(S0, HIGH);   

  digitalWrite(S1, HIGH);

  attachInterrupt(0, Count, RISING);

  Serial.begin(9600);

  delay(100);

}

void read_sensor_values()

{

  sensor[0] = analogRead(A0);

  sensor[1] = analogRead(A2);

  sensor[2] = analogRead(A3);

  if (sensor[0] < 230)

  {

sensor[0] = 1;

  }

  else

  {

    sensor[0] = 0;

  }

  if (sensor[1] < 250)

  {

    sensor[1] = 1;

  }

  else

  {

    sensor[1] = 0;

  }

  if (sensor[2] < 240)

  {

    sensor[2] = 1;

  }

  else

  {

    sensor[2] = 0;

  }

  if ((sensor[0] == 0) && (sensor[1] == 0) && (sensor[2] == 1))//右转

  {

    error = -2;//需要大角度修正

  }

  else if ((sensor[0] == 0) && (sensor[1] == 1) && (sensor[2] == 1))

  {

    error = -1;//需要小角度修正

  }

  else if ((sensor[0] == 0) && (sensor[1] == 1) && (sensor[2] == 0))

  {

    error = 0;//直行

  }

  else if ((sensor[0] == 1) && (sensor[1] == 1) && (sensor[2] == 0))//左转

  {

    error = 1;//需要小角度修正

  }

  else if ((sensor[0] == 1) && (sensor[1] == 0) && (sensor[2] == 0))

  {

    error = 2;//需要大角度修正

  }

  else if ((sensor[0] == 0) && (sensor[1] == 0) && (sensor[2] == 0))//跑上一状态

  {

    if (error <   0)

    {

      error = -max;

    }

    else

    {

      error = max;

     

    }

  }

  else if ((sensor[0] == 1) && (sensor[1] == 1) && (sensor[2] == 1))

  {

     if ((error > 0) && (previous_error > 0))

        {   

        error = 0;

        //c++;

      }

      else if ((error < 0) && (previous_error < 0))

      {

        error = 0;

        //c++;

      }

  }

}

void calculate_pid()//pid算法

{

  P = error;

  I = I + previous_I;

  D = error - previous_error;

  PID_value = (Kp * P) + (Ki * I) + (Kd * D);//PID算式

  Serial.println(PID_value);

  previous_I = I;

  previous_error = error;

}

void motor_control()

{

  // 计算有效电机转速:

  int left_motor_speed = initial_motor_speed - PID_value;//左电机速度

  int right_motor_speed = initial_motor_speed + PID_value;//右电机速度

  left_motor_speed = constrain(left_motor_speed, -s, s);//设定范围

  right_motor_speed = constrain(right_motor_speed, -s, s);

  //run(left_motor_speed, right_motor_speed);

   if((error>=-2)&&(error<=2))

   {

    run(left_motor_speed, right_motor_speed);

   }

   else if(error<-2)

   {

      //error = 0;

      sright(240);

   }

   else

   {

      //error = 0;

      sleft(240);

   }

}

void run(float Speed1,float Speed2)//前进

{

  if(Speed1>0)

  {

    analogWrite(9, Speed1); //左

    analogWrite(10, 0);

  }

  else

  {

    analogWrite(9,0); //左

    analogWrite(10,abs(Speed1) );

  }

  if(Speed2>0)

  {

    analogWrite(5, Speed2); //右

    analogWrite(6, 0);

  }

  else

  {

    analogWrite(5, 0); //右

    analogWrite(6, abs(Speed2));

    }

}

void stop()   //刹车

{

  analogWrite(5,200);

  analogWrite(6,200);

  analogWrite(9,200);

  analogWrite(10,200);

  delay(10);

}

void js()   //加速

{

  analogWrite(5,120);

  analogWrite(6,0);

  analogWrite(9,120);

  analogWrite(10,0);

}

void sleft(float Speed)//左转

{

  analogWrite(9, 0);

  analogWrite(10, Speed);

  analogWrite(5, Speed);

  analogWrite(6, 0);

}

void sright(float Speed)//右转

{

  analogWrite(9, Speed);

  analogWrite(10, 0);

  analogWrite(5, 0);  

  analogWrite(6,Speed);

}

void FilterColor(int Level01, int Level02)  

{  

  if(Level01 != 0)  

    Level01 = HIGH;  

  if(Level02 != 0)  

    Level02 = HIGH;  

  digitalWrite(S2, Level01);  

  digitalWrite(S3, Level02);

  //delay(1000);

}  

//跳变计数

void jishu()//记录跳变为

{

  if((sensor[0] == 1) && (sensor[1] == 1) && (sensor[2] == 1))

  {

    delay(20);

    if((sensor[0] == 1) && (sensor[1] == 1) && (sensor[2] == 1))

    {

      x=1;

     }

    }

    else

    {

      x=0;

      }

   button=x;

   if(button==1 && before==0)

   {

      c++;

    }

   if(button!=before)

   {

    delay(20);

    }

    before=button;

}

void delayTracing(int time)//毫秒,短暂寻迹

{

  int m;

  for(m=0;m<time;m++)

  {

      read_sensor_values();//寻迹

      calculate_pid();

      motor_control();

      delay(10);

   }

}

void judge()

{

  int n,m;

  for(n=0;n<20;n++)

  {

    stop();//停车

    delay(50);

get_color();

    e=c_state;

   

  }

  if(e==h)

  {

    for(m=0;m<10;m++)

    {

      servo(poss);

      delay(10);

      //break;

    }

    for(m=0;m<5;m++)

    {

      servo(90);

      delay(10);

      //break;

    }

   }  

  }

void compare(int letter)

{

  int d,f,g;

  d=0;

  f=0;

  g=0;

   if(c_state==0)

      {

        d++;

        }

    else if(c_state==1)

        {

          f++;

          }

    else

      {

        g++;

        }

    if(d>f&&d>g)

        {

          c_state=0;

          }

    else if(f>d&&f>g)

      {

        c_state=1;

        }

     else

       {

        c_state=2;

        }

  }

void yanse()

{

   int i,j,k;

  if(c==5)//三个寻迹传感器全识别到黑

  {

    for(i=0;i<20;i++)

    {

      stop();//停车

      delay(10);

      servo(pos);

      get_color();

      h=c_state;

      Serial.print(h);

     

    }

    for(j=0;j<75;j++)

    {

      read_sensor_values();//寻迹

      calculate_pid();

      motor_control();

      delay(10);

    }

    for(k=0;k<3;k++)

    {

      judge();

      Serial.println(e);

      if(e==h)//

      {

        break;

        }

      delayTracing(40);

    }

    c++;//跳出本次程序

    }

   

}

void zhongdiansotp()

{

  if(c==7)

  {

    delayTracing(250);

    while(1)

    {

      stop();//延迟后刹车

    }

    }

  }

void delayBegin(int begintime)//毫秒,短暂寻迹

{

  int begin_base;

if(beginState==1)

{

    for(begin_base=0;begin_base<begintime;begin_base++)

      {

         js();

         delay(10);

       }

     beginState=0;

    }

}

void loop()

{

  delayBegin(100);

  read_sensor_values();//寻迹

  calculate_pid();

  motor_control();

  jishu();

  yanse();

  zhongdiansotp();

  //Serial.println(PID_value);

  //Serial.print(sensor[0]);

  Serial.print(h);

  Serial.println(e);

  Serial.println(c);

  delay(10);

}


9. 应用前景分析

9.1 高新技术的应用

      2022年4月初,国内首款量产型核酸检测采样机器人成功面世,并进入批量生产出货阶段。此款核酸采样机器人为口咽拭子采样机器人,由山东烟台清科嘉研究院、清华大学研究团队共同研发,作为第三代产品,该核酸采样机器人涉及到22项发明专利、6项授权专利,采样时间仅为42秒,采样有效率达到100%,该核酸采样机器人拥有完全自主知识产权,且100%国产化,其推广应用,有助于疫情防控工作更好、更快进行。

9.2 作为车辆试验用车

      集安全系数高、动力性能好、生产成本低、车辆尺寸小、便于操作和测量等优势于一身, 全地形车已经被广大的实验室、科研所及企业产品开发部门作为试验用车使用广泛应用于汽车碰撞试验、汽车越野性能试验、越野车驾驶员舒适性测试实验中。

9.3 作为特殊车辆应用在特定场合

      近年来随着国家对消防救灾及人身安全关注度的不断提高将全地形车改装成为消防用车已经受到越来越多消防企业、高校和科研机构的关注不论是作为林区消防用车还是城市小型街道消防车都起到了不错的效果由全地形车改装而来采用电力驱动在舒适性和外观上稍加更改而成的新型校园巡逻车消耗少噪声低成本便宜车体也非常适合校园路面地况另外在欧美等寒冷国家和地区全地形车车轮被加装上防滑链已经被普遍应用于雪地运输等行业。

* 本项目未获得作者开源授权,无法提供资料下载。

© 2024 机器时代(北京)科技有限公司  版权所有
机器谱——机器人共享方案网站
学习  开发  设计  应用