AGV分拣小车自动识径系统设计_第1页
AGV分拣小车自动识径系统设计_第2页
AGV分拣小车自动识径系统设计_第3页
AGV分拣小车自动识径系统设计_第4页
AGV分拣小车自动识径系统设计_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章绪论1.1研究的背景和意义自动导引车(AGV车)是一种无人驾驶汽车,由于其在现代物流装卸设备中具有高度自动化和智能的特性,因此受到了运输行业的越来越多的关注。铁路维护部门将AGV小车用作自动运输工具,以智能地处理备件。它具有节能,环保,运输灵活的特点。它可以把工作的时间降低,减小了作业的消耗,并具有巨大的使用先进性。AGV的运载效率对国内各大海港口岸与运输产业的发展有着极为重要的发展意义。国内有着全球上第一的港口吞吐量,巨大的总装载量和卸载的货物量,巨大的运载效率说明着降低了装有集装箱的货轮的停止时间。这对国民经济进出口利益的意义不言而喻。AGV小车对物流的影响很大,现在京东物流的小车充分使用了各种技术在小车上,如自动导引,数据所发出的感知,机器人对它的融入,包括算法对AGV的指导,都在不断使AGV前进。AGV小车上所加的感知技术就是,把周围物品通过图像分割或者其他的办法,来保证AGV能感受到其他物品的存在。AGV小车上加的机器人对它的融入是,在没有人的仓库里。可以高速运行,就像机器人那样不断工作,增加工作的效率。AGV小车上加的算法是。具有人工智能方面,也具有自动对物品来适配的算法,这样的方法可以使更快,而且这些就像人的器官一样,不能够被取代,如人的眼睛、心跳等。AGV的全称“AutomatedGuidedVehicle”其意思即为“自动导引运输车”。配备有电磁导航系统或光学等自动导引装置,能够判断正确的行进路线,具有多种保障人与财产安全的设施以及多种搬运移动功能的运输载具,在运行的环境中小车不需要驾驶员便能够准确安全的行进,主要的动力供电为电池。通过可编程主控制核心作为小车的大脑,利用地表所敷设的磁条来搭建自动引导运输小车的行进路线。自二十一世纪以来科技、互联网与工业快速发展,在全球互联与我国“工业4.0”的背景下,仓储物流行业也在蒸蒸日上,随之而来的问题就是仓储分拣。在以前只能靠人力来进行拣货,费时费力。如果将AGV分拣技术应用到此场景中,这将极大的提升工作效率也会省去很多的成本。但是在小车路径规划中存在诸多问题,例如在复杂的路口如何确保小车能够按照正确的行进路线行走等问题,这就是本课题的主要研究方向与意义。1.2AGV的基本结构和特点AGV的概念提出于上个世纪六十年代。现在AGV的市场正在朝着两极化发展,一种是朝着高度机械化智能化的高端市场发展。二是向物流流通领域,写字楼等低层次的市场开发,大部分都是以人员复位为主。AGV正在朝着多方向和智能化的方向发展。实现预先制定的搬运计划,充分发挥无人搬运车辆的优越性,关键在于引导装置。电磁导航是AGV技术中最先应用的导航方案。但是,因为电磁导航方案的技术存在着无法解决的技术缺陷,此后产生了众多的AGV导引方案,如激光测距导航方案、磁条导航技术等等。使自动引导系统具有灵活度高、在保证安全可靠的前提下也能够保证工作效率;以及降低成本等特点。并且正在朝着无人智能化多元化的方向前进,将AGV技术推向一个新的高度、自动导引运输车是一个集机械结构,控制系统于一体的可以自主移动。并且能够实现帮助搬运货物的运输车。其中机械结构分为车体,车架,车轮。其中车体可以分为机械和电气部分,车架是通过铸铝焊接,车轮是采用实心橡胶。控制系统的驱动部分有直流伺服电动机和减速器,价格便宜,放电性能不错。1.3国内外研究现状世界上第一辆真正意义上的AGV(自动引导运输车)是美国霸锐电子公司在上世纪50年代研制成功的,是一款牵引式小型汽车。英国W.GreyWalter于20世纪50年代开发了一款“ELSIE”AGV汽车款汽车使用感光元件作为导引传感器,引导运动时可根据环境光线的强弱而定。此后,多个国家都诞生了自主移动机器人,如法国研制的“Hilare”、日本土库巴大学研制的“Yamabiko”、盲人引路用的“MELDOG”、德国卡尔苏赫大学研制的“KAMRO”和FMC(CA)研制的移动机器人,都具有非常灵活的避障能力。国外学者HamedFazlollahtabar;MohammadSaidi-Mehrabad在2013年发表的《Optimisingamulti-objectivereliabilityassessmentinmultipleAGVmanufacturingsystem》文章中指出为了评估柔性制造系统(FMS)中机器和AGV的可靠性,建立了一个数学模型。该模型考虑了配备自动导引车(AGV)的自动化柔性制造系统的两个特征,即机器的可靠性和多AGV工件作业制造系统中AGV的可靠性。所提模型中的优化目标是最大化整个工件作业系统中车间中机器的总可靠性、最大化AGV的总可靠性以及最小化系统中的总维修成本。为求解所提出的多目标数学模型,采用模糊目标规划进行求解,结果表明了所提方法的有效性和适用性。MinhwanKim;SungminByun在2016年发表的《AGuidelineTracingTechniqueBasedonaVirtualTracingWheelforEffectiveNavigationofVision-basedAGVs》一文中指出自动导引车(AGV)在工业中应用广泛。为了减少工作空间底层的基础设施建设成本,并增加改变导航路径布局的灵活性,研究了几种基于视觉的AGV。该文提出了一种基于视觉的实用指南追踪方法。该方法引入并采用了虚拟循迹轮,使得基于视觉的AGV能够以多种方式循迹导引线。该方法还可以通过强制AGV的真实方向盘不在导轨上移动来防止导轨损坏。通过计算机仿真分析了虚拟跟踪轮的实用性。在通常的导轨布局上进行了几次与商业AGV的导航测试,我们证实了基于虚拟跟踪轮的跟踪方法可以很好地工作。在2019年发表的《基于改进模糊PID的自动导引车纠偏控制研究》一文中,国内学者古世甫、金滔、范佩佩、任磊、李亦宁等人指出,针对传统模糊比例—积分—微分(PID)控制器对自动导引车(AGV)路径追踪精度不高的问题,提出了基于比例调整和积分分离的模糊PID纠偏控制方法。首先分析建立AGV的运动学模型;二是模糊PID控制器、模糊控制规则设计的输入输出功能;最后,对模糊控制器输出的比例项,按偏差大小分别进行比例调整,并进行积分分离。模拟实验表明:积分分离能有效降低系统的超调量,比例调整能加快系统的响应速度,而本文所设计的纠偏控制器,其优点是速度快,稳定性好,同时还能有效降低系统的超调量和比例调整速度。在《自动化码头可举升自动导引车(L-AGV)箱式检测方案》一文中,王伟、朱林、孙秀良研究指出,目前在新建成的集装箱自动化码头已经开始应用L-AGV,L-AGV安全高效运行的必要保障就是箱式检测系统的可靠性。针对当前自动化码头L-AGV箱型检测方案错误动作频次高、对装卸效率影响大等问题,结合国内主流箱底结构研究,对当前L-AGV箱型检测逻辑进行了提出了一套替代传统箱型检测箱位检测新思路。结果发现,L-AGV遇到的所有工况,目前的测试逻辑都无法适应,测试效率低下;提出的试验方案,有效避免了传统箱式试验中遇到的难题,达到了码头安全要求日益严格、装卸效率日益提高,提高了试验效率。章文俊、韩晓龙在2019年发表的《自动化货柜码头自动导引车路径冲突规避优化策略》一文中指出,在码头前沿与后方堆场之间横向运送货柜时,自动导引车(AUTOMATEDGUIDEDVEHICLE,AGV)是自动化货柜码头的主要运输设备。除了受自身性能影响外,AGV的运行效率还受到码头布置、行车路线、路面容量等因素的影响。林冉轶在《卷烟辅料库自动引导车常见故障及维修》一文中研究指出,为防止故障的发生,降低AGV故障率,提高卷烟辅料库运输工作效率,对运行中的卷烟辅料库自动引导车故障原因进行分析,并给出处理方法及对策。

第2章系统结构设计与选型2.1系统设计方案系统的核心为STM32单片机微处理器,系统通过AGV磁导航传感器采集地面所敷设的导航磁条并通过RS232转换器发送到单片机,单片机对磁导航传感器所采集的数据按照程序的设定进行分析与判断来控制小车的运行状态,当小车到达用户所设定的货物位置时,停车,并由第二级系统控制机械臂与扫码模块的运行。在AGV系统运行时视觉识别模块同时工作,并对现场环境的交通灯进行一定的算法处理,并通过串口发送到STM32中,并由STM32计算视觉模块所识别的颜色控制小车的启停。在系统运行的过程中发送小车的当前运行状态。系统的稳定运行主要依靠于AGV磁导航传感器、视觉识别模块、小车驱动器、超声波模块。AGV磁导航传感器的正常运行与识别结果的正确关乎到整个小车系统能否安全准确的到达用户所设定的货物所在的位置,也关乎到人与财产的安全。视觉识别模块是能够确保在多辆小车同时在仓库进行任务时,保证各个小车单元有序顺利进行的不可分割的保障。小车驱动器,包括底盘与电机驱动,这是整个系统的基石,所有的模块都是在底盘的基础上搭建的。图2.1系统流程图2.2系统器件选型2.2.1导航模块选型计划方案一:利用红外光电传感器,对运动进行探测,对运动进行跟踪。红外线(IR)照射到白底时会有一定的方向性,反光明显。若距离值合理,则红外线接收管对反射来的红外线进行接收。当红外线传到黑线的时候黑线吸收红外光的大部分,红外接收的接收强度很弱。循迹时引导线呈黑色,不宜反光。当红外发射管的输出信号照射到黑色的引导线上时,有一个很微弱的电平,通过对此高低电平的判断就能知道小车行进的状态。如果不是沿着引导线,微控制器能根据传感器发出的信号进行回传到控制器。并由控制器控制马达驱动器对马达进行控制,使系统在轨道上保持行进状态。系统在小型车前部安装3个红外管可以照射地面。分别为左、中和右。但此种传感器受外部环境影响因素较大,并且对反射所需的黑色循迹条的要求较高需要日常维护。很容易被磨损。计划方案二:现在许多的机器人系统都采用激光导航测距传感器来对系统进行位置的判断、障碍物的避躲以及运行场景的地图扫描与绘制。激光导航测距传感器工作的基本原理是由传感器自生的激光发射半导体对准运行场景内的参照物或者运行目标发射信号——激光脉冲信号。经过系统小车激光导航传感器发出测量信号并照射目标反射后激光向各方向散射。其中有一部分散的射光由于障碍物的遮挡反射到传感器的信号处理端,被光学系统接收后成像到雪崩光电二极管上。激光传感器测量的距离是在传感器器身范围内的到所有障碍物之间的距离。激光导航测距传感器有着非常好的测量角度和距离准确度,实时行为每秒能够测量数百个点或是数千个点。计划方案三:AGV磁导航传感器通过该传感器,AGV能够对场景内所敷设的地底磁条进行精确检测与导航,并通过内置的单片机对采集到的模拟信号进行A/D转换,从而使磁导航传感器能够兼容许多的设备而不需要单独的数模转换模块,磁导航传感器能够检测出地面所敷设的磁极所发出的磁场强弱,处理并发送所采集的磁场信号,AGV车能够根据现场环境自动调制系统的运行方向与角度等位置有关的信息,从而使得AGV车顺着地表所敷设磁条行驶。AGV会对偏离进行调整,从而保证车的运行时沿着磁条方向与程序的设计路径前进。磁导航传感器具有稳定性高,后期维护成本低,受外界影响因素较小。通过以上三种计划方案的比较,本设计选择稳定性高成本较低的磁导航传感器。磁导航传感器安装方便,与控制核心的通信稳定不易产生传输时的数据丢包。循迹导航时能够准确地识别,且受不到光线变化的影响,成本相比与激光导航要低很多。图2.2AGV磁导航传感器2.2.2控制核心的选型现在控制系统中应用最为的广泛的控制系统可分为51系列与STM32系列方案一:51单片机包括中央核心处理器、四千字节的随机存取存储器、十二万八千字节容量的只读存储器、四十个全功能输入输出引脚、2个16位的定时器与计数器、4个8位并行数据交互接口、串口可在发送数据的同时接收数据、数字转模拟信号转换器、模拟信号转数字信号转换器、串行外围接口、集成电路总线、应用程序编程。51单片机的组成结构系统结构简单,搭建系统与成品方便。单片机运行稳定且牢靠,能够在较为恶劣的环境下运行。对信号的处理程度强,运行时的速度稳定。所需的电压低,所消耗的功率低,便于大规模生产便携式产品。控制功能强。环境适应能力强。但是在一些对于产品速度要求较高与外围设备较多的产品或环境中51系列的单片机就有些力不从心。方案二:STM32F1系列是一个高性能的单片机核心处理器,由英国Acorn有限公司设计的低功耗低成本的RISCCortex-M332位微控制器,64个IO引脚轻薄四边形扁平封装.其系统运行频率达七十二兆赫兹,嵌入式高速内存设计,能够使用不同语言不同的开发平台编程,有着增强范围的强化输入输出,接口丰富,兼容性极强,环境运行温度范围-40°C至85℃。图2.3STM32单片机通过51系列单片机与STM32单片机系类的对比不难发现,STM32单片机IO引脚更多,性能更强大,且价格便宜,集成度高,因此本设计选择STM32系列单片机作为主控制核心。2.2.3避障模块选择在现场的实际运行场景中,虽然自动引导运输小车的前进方向角度与轨迹已经被完全规划好,但是实际的运行环境中不可避免的会出现影响自动引导运输小车运行的物体,这就要求小车必须要有躲避障碍物的相关功能。此模块为HC-SR04超声波测距模块,此款超声波模块具有测量面积广泛,测量距离很远高达四米、精度高、工作稳定、接线与编程简单等优点。此模块可通过编程设置避障距离,可以根据现场的具体状况设置、此外模块的体积小,安装也极为方便。图2.4超声波传感器2.2.4视觉模块选择OpenMV摄像头是一款外形小巧,所需电压极低,低成本的开源可编程的摄像头模组,能够完成机器视觉(machinevision)应用。可以通过高级语言Python脚本。Python的高级数据结构在机器视觉算法中处理复杂的输出。OpenMV摄像头的特点:STM32H7处理器,运行的时钟频率高达二百一十六兆赫兹,五十万字节的随机存取存储器,两兆的掉电记忆存储模块。其工作电压为3.3伏特并且5伏特兼容。OpenMV摄像头有一个2.8mm焦距镜头在一个标准M12镜头底座,方便安装。图2.5视觉模块2.2.5底盘驱动模块选择在设计底盘驱动时,需要考虑到小车系统的速度不是固定的,要判断运行现场的当时路况调整系统前进运行速度。微控制器可以方便的调整电机速度,但微控制器的IO接口最高输出电压和最高输出电流基本上都是非常容易受到限值的,所以为稳定的控制需要在单片机核心控制器和电机直接添加一个驱动电路板,同时也要兼顾小车的前进与后退、驱动芯片的压降、成本等因素。因此选择了以A4950为核心的底盘电机驱动器,如下图所示。图2.6电机驱动模块2.2.6分拣模块选择在设计分拣模块时要考虑到所抓取货物的重量与如何简洁快速的识别货物是否为用户所抓取的货物。方案一:采用二轴机械臂作为分拣模块,二轴机械臂主要采用一个机械关节和一个抓取手抓,此模块主要用于两个关节完成此模块,但两轴机械臂的运动范围较小,可抬升的角度不高,虽此类型机械臂结构简单但没有办法完成此任务要求,图2.7两轴机械臂模型方案二:方案二主要采用四轴机械臂,此机械臂采用了四个舵机并加以PCA9685舵机控制器作为四轴机械臂的驱动装置。此款机械臂具有运动范围广、具有四个自由度,并且结构简单、制作方便等诸多优点。图2.8四轴机械臂模型方案二相比于方案一更能够满足本设计的要求,因此选择方案二中的四轴机械臂作为本设计的分拣模块。2.2.7货物识别模块选择系统能够准确识别货物是保证分拣系统正常运行的基础。现流行的货物识别模块主要为条码与二维码识别。条码与二维码具有众多的优点,例如在固定的环境当中,二维码与条码有着唯一性与固定性,不会随着外界环境到的变化而导致二维码与条码的变化。本设计主要采用MD280识别模块。MD280是一款嵌入式二维影像模组,采用先进的CMOS影像识别技术,智能图像识别系统,配备30万像素高清摄像头。具有优秀的识读性能,可以轻松读取纸张、商品、屏幕等介质上的条码。一体化紧凑型设计可方便嵌入到各类设备中。图2.9条码识别模块第3章小车硬件系统设计3.1小车控制方案简述硬件系统可分为,导航系统,避障系统,交通灯识别系统,分拣系统,底盘及驱动系统,主控制核心,电源驱动,显示系统与无线传输系统。在导航系统中磁导航传感器通过内部的霍尔模块,对任务场景地面所敷设的磁条进行循迹,并将循迹状态通过内部芯片编码转换为RS232信号,发送到主控制核心系统STM32单片机中。控制核心利用所编写的程序代码对当前的循迹状态进行算法处理,控制小车的动作。当到达任务位置时停车,分拣系统动作,并由扫码模块扫描货物上的条形码或者二维码,并由机械臂进行夹取。在系统运行的当中,避障系统与交通灯识别系统保障人与设备之间的安全与有序的进行分拣任务。如在现场作业当中遇到突发情况能够首先保障人员的生命及财产安全。3.2STM32控制核心系统电路设计STM32F1系列是是一个高性能的单片机核心处理器,由英国Acorn有限公司设计的低功耗成本的RISCCortex-M332位微控制器,64个IO引脚轻薄四边形扁平封装.其系统运行频率达七十二兆赫兹,具有12位模拟信号转数字信号转换器,内置多种类计时器,PWM计时器,标准和高级通讯接口,全面的省电模式允许设计者设计低功率应用开发,运行宽电压范围2V至3.6V,256K字节闪存flash,48K字节静态随机存取存储器,四个通用计时器,两个高级控制计时器和两个基础计时器,51个高速输入输出IO端口,串行线调试器和在线调试接口,三个串行外围接口,两个成电路总线,五个通用的同步/异步收发器,一个通用串行总线。本设计采用STM32单片机集成开发板,核心单片机采用STM32F103RCT6。图3.1STM32F103RCT6核心处理器在设计本开发板时,考虑到电源需要较高的稳定性,所采用AMS1117稳压模块为单片机核心与整板供电。图3.2STM32单片机电源电路为了方便外围设备的接入将所有IO口全部引出。图3.3IO引脚电路采用8KMhz晶振作为开发板的核心时钟单元。为系统提供精准的时钟图3.4STM32晶振电路与复位电路并外挂三个独立按键与两个单色LED灯与一颗电源指示灯。图3.5LED指示电路考虑到烧录程序的便捷性与调试的稳定性,板子中加入了CH340模块,此模块可将USB信号转换为单片机能够读取的TTL信号图3.6IPS串口下载调试电路3.3导航模块电路设计AGV磁导航传感器,是指一种能够识别已经铺好的磁路径的位置并引导磁导航小车沿着路径前进的传感器。在现有的常规设计中,其传送装置大致构造如下:一般由霍尔传感器和放大器组成。其中霍尔传感器把磁路径的磁场转化为微弱电压,放大器把微弱的电压放大,最后传送给处理设备进行处理。其中,放大器是决定磁导航传感器精度性能的关键,衡量其品质的主要参考依据主要有输入阻抗、输出阻抗、共模抑制比、输入偏置电流、失调电压对温度漂移的影响等。现有技术中最为常用的方案是采用通用放大器对霍尔元件输出电压被放大,通用放大器包括输入级、中间级、输出级。输入级采用差分放大回路差分回路的对称性,减小放大器受温度漂移的冲击。在里面中间电压放大器通常由带有有源负载的公共发射机放大电路组成,以提高电压增益;退出阶段通常使用A和B类的互补对称收益。提高集成运算放大器负载能力和降低高信号操作中非线性失真的方法。该技术方案是通过外接差分电路,来减小通用放大器本身结构所限制的温漂对其的影响,从而提高整个电路的共模抑制比。本设计的磁导航传感器安装在自动引导运输车的车体前方,与磁条表面的距为两公分到三公分之间,地面所敷设的磁条宽度为3公分,磁条厚度为0.1公分。在小车系统运行过程中,通过AGV磁导航传感器采集地面敷设磁条的磁场值。由于采样点同传感器磁条垂直,因此可以通过单片机的数据处理判断磁条同小车当前的运行状态、AGV车偏离,而自动引导运输车会对偏离的路线与角度进行调整,从而保证车的运行时沿着磁条方向与程序的设计路径前进。图3.7AGV磁导航传感器内部检测放大器电路图图3.8AGV磁导航传感器显示电路电路图

3.4避障模块电路设计设计原理为:输入输出口TRIG触发测距功能,至少十微秒钟的时钟触发信号由单片机输出到测距模块,模块自身发出8个40千赫兹的方波,模块接收端会自动检查有无返回信号;侦测到有讯号的返回,透过IO口Echo输出高电平的持续时间与声速运算,便可得到所测距离=(高电平时间*声速(340m/s))/2;图3.9超声波模块原理图3.5底盘驱动模块电路设计在设计该驱动模块时需考虑到功率大小,因此选择功率较大的CJA1117B稳压模块,此稳压电源模块,电源模块使用本公司的多路电源模块,该模块最大输出功率15W,具有效率高,纹波低,可以同时输出多路5V和3.3V的功能。图3.10电机驱动模块内部电源电气的正反转与调速可以通过一个H桥进行控制,通过H桥内部开关的开断控制电机的旋转方向与旋转速度。A4950模块就是内置了一组H桥如下图所示图3.11H桥电路直流电动机在开关A、D闭合、B、C断开的情况下正常转动方向应为正向。直流电动机在开关B、C闭合、A、D断开的情况下正常转动这个转动方向的。直流电动机在开关A、C合拢时不旋转,B、D断开或开关B、D合拢时不旋转,A、C断开。这时可认为马达处于「刹车」状态,马达因惯性转动而产生的电势会短路,形成反电势阻碍运动,形成「刹车」效应。利用此原理设计了电气驱动电路如下图。图3.12电机驱动电路

3.6电源模块电路设计本设计采用多功能电源管理模块,此模块能够输出多种不同电压,能够满足设计中不同模块的电压需求。模块采用高性能DC-DCLM5164电压管理芯片,LM5164是一种易于使用的超低IQ恒定开启时间(COT)同步降压稳压器。具有集成的高侧和低侧功率MOSFET,是一种低成本、高效的降压变换器。其优点为,需要的外围原件较少、输出电压稳定,杂波少等优点。它能够在6V到100V的宽输入电压下工作,提供高达1A的直流负载电流。LM5164是提供8针SOPowerPAD封装。这种恒定导通时间(COT)转换器适用于低噪声、高电流和快速负载瞬态要求,使用预测导通时间开关脉冲运行。图3.13电源模块电路图3.7机械臂驱动电路设计舵机是本设计中驱动机械臂的关键器件。而又由于设计中为了不影响处理器供电或者主控功率不够,制作一块板子用作舵机驱动,也叫舵机控制板,驱动板采用PCA9685作为中控制驱动芯片。PCA9685是一款用于产生16路PWM信号的控制芯片,采用I2C总线与主控芯片进行通信。PCA9685具有可以产生16路PWM脉冲、控制独立精准、编程简单灵活等特点,以其为基础实现的舵机控制能够有限减少硬件和软件设计的复杂度,具有高可靠性PCA9685是一款基于I2C总线控制的16路PWM控制芯片。每一路输出端均可自由调节PWM波的频率(40~1000Hz)和占空比(0%~100%)。这款芯片主要通过输出不同占空比的PWM脉冲信号来控制舵机转动的角度。

图3.14PCA9685舵机驱动板电路图第4章系统的软件设计4.1系统主流程图当系统中硬件全部通电,系统进入初始化,初始化完成之后,磁导航模块开始对地面所敷设的磁条进行循迹,并将实时的循迹数据通过RS232传输协议通过转换装置发送到STM32单片机当中,当传感器检测到循迹路线发生偏移时,由主控制系统控制电机驱动模块进行角度与电机转速的调整使小车回到正常的循迹路线中。小车的驱动电机具有编码与测速功能,在循迹的同时也能够将小车的当前运行状态实时的显示与发送到上位机端。当小车到达用户所设置的货物位置时自动停车,控制核心系统控制机械臂驱动器驱动机械臂上的舵机进行运作使其动作,当机械臂运转到货物位置时,扫码模块扫描货物上粘贴的条码或者二维码,如果实际货物的信息与用户所设置的信息所匹配则进行夹取,如不正确,机械臂归零,继续分拣任务。小车在运行当中,能够通过OPENMV实时对现场环境当中的交通灯颜色进行识别,当检测到交通灯颜色为非绿灯时,小车系统停车等待,直至交通灯颜色变为绿色。通过超声波避障模块对小车前方的环境进行扫描,当小车前方的出现障碍物或出现人员时迅速停车避让。无线模块不间断工作,保证上位机的指令能够实时下发到下位机端中,也保证数据交互的时效。图4.1软件系统流程图4.2磁导航模块的软件设计当硬件系统完全通电,初始化完成。磁导航传感器开始工作,并通过串口发送循迹数据,当小车角度变化,传感器发送一次循迹数据,循迹数据以十六进制的数据发送,通过RS232转TTL模块转换之后发送到控制核心系统端。并进行数据校验。通过软件设计判断校验后正确的数据值,控制小车的运行状态,这对串口的传输速率有着较高的要求,因此将传感器端与控制端的串口波特率设置为能够保证在不丢失数据的情况下最高的速率115200kb/s,保证传输数据的时效性与准确性。在传感器进行初始化时,对原有的数据进行清零,并对所接收的数据进行CRC16位数据校验,最大程度上保证数据接收的准确性,保证小车系统运行时不会出现失控等危险动作。图4.2磁导航模块系统流程图4.3分拣模块的软件设计当小车到达货物的指定位置时,控制核心下发指令到分拣系统之中,并通过二级单片机控制机械臂驱动器驱动机械臂上的舵机动作,带动机械臂动作。STM32主控制单片机通过IIC通讯协议控制机械臂驱动器PCA9685S输出不同频率不同占空比的PWM波来进一步的控制机械臂的运行角度与方向。当机械臂运行到指定位置时,用二级控制系统发送指令打开扫码模块,扫描货物上粘贴的条码或者二维码,并将扫描结果发送到控制核心系统当中,由STM32单片机判断现在所分拣的实际货物是否为用户所设置的货物,如果是用户所设置的货物则控制机械臂夹取分拣,如不是则机械臂回原位准备进行下一次分拣。图4.3分拣模块系统流程图4.4小车行走的软件设计小车直线行驶,前传感器用于检测系统小车是否按照规定路线行驶。图4.2(a)显示了自动引导运输车的正确行驶角度。如果磁导航传感器在定义的路径检测范围内,则表明车辆在该路径上正确行驶。如果小车前部的传感器不在检测范围内,如图4.2(b)所示,例如,如果传感器位于检测区域的右侧,则检测到汽车向左倾斜,并及时调整,使汽车的右电机减速。左侧电机加速,使自动引导运输车回到指定路线。图4.4小车行驶方式图图4.5小车底盘控制系统流程图如图4.2(C)所示,当车辆前部偏离检测范围时,小型车的弯曲方向相对较大。单片机控制传感器和传感器检测位置信号,进一步控制电气驱动器驱动左右电机的不同转速调整小车的运行角度。程序顺序设置:启动程序,开始检查控制芯片上的各种信号。输入数据参数、变量、函数。识别小车的实时位置数据,并确认汽车是否在该路径上正常行驶。如果结果是正确的,则继续下一个路径。如果不正确,小车则做出控制器发送与指定的实际路径相对应的配置数据,并继续执行。这将检测、评估和调整每个定义的轨迹,直到车辆到达终点并完成整个操作。第5章系统调试5.1系统调试在系统完全搭建之前需要对各个模块进行单独的调试。图5.1系统整体实物图5.1.1磁导航传感器调试在初次使用磁导航传感器时需对传感器进行初始化配置,磁条存在S极N极,传感器无法同时判断两个磁极,所以要对传感器进行磁极配置保证在运行过程中不会出现错误。在初始化设置完成之后需要对数据交互进行初步的调试。在开始调试时时通过左右晃动磁条来判断磁导航传感器是否在正常工作,如图所示图5.2磁导航传感器测试在发现磁导航传感器上的LED灯能够按照磁条的移动依次亮起与熄灭时可确定传感器在正常运行。在确定正常后与STM32单片机进行连接,观察串口数据是否与手册上的数据相同如图所示图5.3磁导航发送数据通过上图的数据发现磁导航传感器正在正常发送所采集的数据,证明调试与运行正常。5.1.2避障模块调试避障模块采用的是HC-SR04超声波传感器,此传感器在进行测量时,主要利用的是声波反射的原理。在调试过程中,首先对模块进行通电并连接单片机,在单片机程序烧录完成之后按下板载KEY,观察到OLED屏上的数值变化如图所示图5.4OLED屏显示超声波传感器所测数值当出现数值之后用带有刻度的米尺对所测数据进行校准,并确定最准确的程序设定值5.1.3视觉模块的调试对视觉模块进行通电并连接电脑如图所示,在连接上电脑之后,视觉模块进行初始化。初始化完成之后电脑屏幕上会显示当前的实时画面,观察屏幕右上方是否显示视觉模块所照射的区域,当图像不清晰时旋转镜头模块调整焦距,直至图像清晰。图5.5视觉模块编程软件界面在识别交通灯时,需要采集交通灯颜色,由于不同环境下红黄绿三种颜色的阈值会发生变化并对该颜色需要对这三种颜色进行阈值的处理与设置。首先将所使用的三种颜色图片裁剪成与实际交通灯相似的圆形,其次对裁剪后的颜色图片进行阈值的调整,并将数值设置到最为合适的一个范围,保证视觉识别模块能够准确无误的进行识别,并烧录进设备进行多次校验。图5.6颜色阈值设置界面

5.1.4分拣模块的调试在对分拣模块进行调试之前需对模块进行硬件上的搭建如图所示图5.7分拣模块主体框架在分拣模块的主体框架搭建完成之后需要对各个关节进行润滑与松紧度的调整,以保证在运行中不出现卡死或转动不灵活的情况出现。其次向框架中安装舵机驱动部分。图5.8驱动模块安装完毕

整个硬件环境搭建完毕之后对机械臂进行初步调试,首先让机械臂运动至所夹取货物的目标位置,如图所示。图5.9机械臂运动到目标位置在机械臂运动到目标货物之后对货物进行夹取,如图所示。图5.10机械臂夹取货物在机械臂夹取货物之后,机械臂开始动作并运行到原点位置,对货物完成一次分拣。图5.11机械臂将所分拣的货物放置到指定位置在对机械臂进行调试中,要注意每个关节的最大活动位置,防止在运动过程当中将驱动舵机损坏。参考文献[1]袁鹏,周军,杨子兵,等.AGV路径规划与偏差校正研究[J].现代制造工程,2021(4):26-32.[2]内蒙古工业大学.AGV磁导航的导航磁条:CN202020113902.7[P].2020-07-31.[3]苗静静,牛萍娟.磁导航AGV路径跟踪控制系统设计[J].组合机床与自动化加工技术,2021(9):107-110,116.[4]王殿卫,郭津津,李维骁.基于麦克纳姆轮的AGV定位及纠偏技术的研究[J].天津理工大学学报,2020,36(4):22-27.[5]邓依婷,徐曦,李亚宁,等.基于麦克纳姆轮的AGV小车[J].物联网技术,2021,11(1):65-66,71.DOI:10.16667/j.issn.2095-1302.2021.01.018.[6]刘佳耀,袁佳艳,陶卫军,等.一种配备智能机械臂的AGV设计与实现[J].兵工自动化,2016,35(10):38-41.DOI:10.7690/bgzdh.2016.10.011.[7]孙宜敬.磁导航AGV车载控制系统的设计与应用[J].现代制造技术与装备,2022,58(2):190-193.[8]韩强,何利力.智能仓储车间中多AGV路径优化算法研究[J].智能计算机与应用,2022,12(5):43-49.[9]陈洋,林其岳,邓志华,等.AGV路径规划算法研究进展[J].机电技术,2022(5):39-43.DOI:10.19508/ki.1672-4801.2022.05.012.[10]梁艺,李芳薇,杨志滨,左夏露.智能机器人在图书馆中的应用[J].中华医学图书情报杂志,2021,30(09):64-70.[11]李模刚,白智,何澎,李俊国,李远豪.一个AGV小车的智能控制系统设计与实现[J].工业控制计算机,2021,34(12):141-143.[12]韩冰,李程,高海平.AGV自行小车自主开发研究[J].电子技术与软件工程,2021(17):109-110.[13]李琪璐,路彤,李明宇,童艳荣.基于机器视觉的颜色分拣机器人设计[J].单片机与嵌入式系统应用,2022,22(12):54-57.[14]何均锋.仓储物流AGV避障问题研究[D].南京林业大学,2021.DOI:10.27242/ki.gnjlu.2021.000095.[15]胡美姣,尹力,黄新,陈德立.基于RFID的AGV定位与磁导航设计[J].流体测量与控制,2022,3(06):70-73.[16]张亚强.AGV在智能停车领域的设计与实现[D].郑州大学,2020.[17]YuanMinghai,LiYadong,PeiFengque,GuWenbin.Dual-resourceintegratedschedulingmethodofAGVandmachineinintelligentmanufacturingjobshop[J].JournalofCentralSouthUniversity,2021,28(8).[18]LiuGang,ZhangRongxu,WangYanyan,ManRongjun.RoadSceneRecognitionofForkliftAGVEquipmentBasedonDeepLearning[J].Processes,2021,9(11).[19]MiaoZhenteng,ZhangXiaolei,HuangGuojue.ResearchonDynamicObstacleAvoidancePathPlanningStrategyofAGV[J].JournalofPhysics:ConferenceSeries,2021,2006(1).[20]WangZehao,ZengQingcheng.Abranch-and-boundapproachforAGVdispatchingandroutingproblemsinautomatedcontainerterminals[J].Computers&IndustrialEngineering,2022,166.[21]ZhangHouzhong,XuLin,LiangJiasheng,SunXiaoqiang.ResearchonGuideLineIdentificationandLateralMotionControlofAGVinComplexEnvironments[J].Machines,2022,10(2).

附录系统原理图:STM32主控制核心原理图

主函数Main.c#include"bsp_sys.h"#include"stdio.h"#include"car.h"#include"uart2.h"#include"modbus.h"#include"bsp_GPIO.h"#include"esp.h"externu8OLED_ADC_Flag;externu8OLED_Speed_Flag;externu16ADC_BAT_Val,ADC_BAT_temp;externu16ADC_SYS_Val,ADC_SYS_temp;externintEncoder_A,Encoder_B,Encoder_C,Encoder_D;floatadc11;floatadc22;charadc1[5];charadc2[4];intSpeed_A,Speed_B,Speed_C,Speed_D; intMaPan;u8bat1;uint8_tTRACK3;uint8_tSwitch2;intmain(void){ STM32_System_Init(); Init(); Delay_ms(1000); OLED_Clear(); while(1) { adc11=ADC_BAT_Val*3.3/4096*11;Esp_PUB(); if(OLED_ADC_Flag==1) { OLED_ADC_Flag=0; adc11=ADC_BAT_Val*3.3/4096*11; sprintf(adc1,"%2.1f",adc11); OLED_ShowString(16,0,adc1,12); if(adc11<7.4) { OLED_ShowString(0,0,"LowPower",12); } adc22=ADC_SYS_Val*3.3/4096*2; sprintf(adc2,"%2.1f",adc22); OLED_ShowString(96,0,adc2,12); Speed_A=Encoder_A*1200/(11*4*JSB); Speed_B=Encoder_B*1200/(11*4*JSB); Speed_C=Encoder_C*1200/(11*4*JSB); Speed_D=Encoder_D*1200/(11*4*JSB); OLED_ShowNum(16,1,Speed_A,3,12); OLED_ShowNum(64,1,Speed_B,3,12); OLED_ShowNum(16,2,Speed_C,3,12); OLED_ShowNum(64,2,Speed_D,3,12); } } }磁导航接收程序Usart1.c#include"uart2.h"#defineUART2_DMA1 #defineCHECK_NONE_ONE_STOP1#defineCHECK_NONE_TWO_STOP0#defineCHECK_EVEN0#defineCHECK_ODD0u8dma_rec_buff[DMA_REC_LEN]={0};u16uart2_rec_cnt=0; u8data_backup[DMA_REC_LEN]={0}; u16dataLen_backup=0; _BoolreceiveOK_flag=0; voiduart2_init(u32baud){GPIO_InitTypeDefGPIO_InitStructure;USART_InitTypeDefUSART_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);USART_InitStructure.USART_BaudRate=baud;USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No; #if(CHECK_EVEN==1) USART_InitStructure.USART_WordLength=USART_WordLength_9b;USART_InitStructure.USART_Parity=USART_Parity_Even;#endif#if(CHECK_ODD==1) USART_InitStructure.USART_WordLength=USART_WordLength_9b;USART_InitStructure.USART_Parity=USART_Parity_Odd;#endif#if(CHECK_NONE_ONE_STOP==1) USART_InitStructure.USART_StopBits=USART_StopBits_1;#endif#if(CHECK_NONE_TWO_STOP==1) USART_InitStructure.USART_StopBits=USART_StopBits_2;#endif USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_Init(USART2,&USART_InitStructure);#if(UART2_DMA==1)USART_ITConfig(USART2,USART_IT_IDLE,ENABLE); USART_DMACmd(USART2,USART_DMAReq_Rx,ENABLE); uartDMA_Init(); #elseUSART_ITConfig(USART2,USART_IT_RXNE,ENABLE); #endifUSART_Cmd(USART2,ENABLE); }voiduartDMA_Init(void){DMA_InitTypeDefDMA_IniStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); DMA_DeInit(DMA1_Channel6); DMA_IniStructure.DMA_PeripheralBaseAddr=(u32)&USART2->DR; DMA_IniStructure.DMA_MemoryBaseAddr=(u32)dma_rec_buff; DMA_IniStructure.DMA_DIR=DMA_DIR_PeripheralSRC; DMA_IniStructure.DMA_BufferSize=DMA_REC_LEN; DMA_IniStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; DMA_IniStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; DMA_IniStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;DMA_IniStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte; DMA_IniStructure.DMA_Mode=DMA_Mode_Normal; DMA_IniStructure.DMA_Priority=DMA_Priority_Medium; DMA_IniStructure.DMA_M2M=DMA_M2M_Disable; DMA_Init(DMA1_Channel6,&DMA_IniStructure);DMA_Cmd(DMA1_Channel6,ENABLE);}voidmyDMA_Enable(DMA_Channel_TypeDef*DMA_CHx){DMA_Cmd(DMA_CHx,DISABLE); DMA_SetCurrDataCounter(DMA_CHx,DMA_REC_LEN); DMA_Cmd(DMA_CHx,ENABLE); }voiduart2_Send(u8*buf,u16len){u16t;for(t=0;t<len;t++) {while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);USART_SendData(USART2,buf[t]);}while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);}voidcopy_data(u8*buf,u16len){u16t;dataLen_backup=len; for(t=0;t<len;t++){data_backup[t]=buf[t]; }}voidUSART2_IRQHandler(void){#if(UART2_DMA==1) if(USART_GetITStatus(USART2,USART_IT_IDLE)!=RESET) {USART_ReceiveData(USART2); DMA_Cmd(DMA1_Channel6,DISABLE); uart2_rec_cnt=DMA_REC_LENDMA_GetCurrDataCounter(DMA1_Channel6);DMA传输通道中剩余单元数量就是已经接收到的数据数量 copy_data(dma_rec_buff,uart2_rec_cnt); receiveOK_flag=1; USART_ClearITPendingBit(USART2,USART_IT_IDLE); myDMA_Enable(DMA1_Channel6); }#else if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) {tem=USART_ReceiveData(USART2);USART_SendData(USART2,tem);}#endif}磁导航校验程序modbus.c#include"modbus.h"#include"crc16.h"#include"uart2.h"#include"AT4950.h"#defineHoldRegStartAddr0x0000 #defineHoldRegCount8 #defineHoldMaxValue1000 externu8data_backup[DMA_REC_LEN]; externu16dataLen_backup; u8SendBuf[DMA_REC_LEN]={0};u16StartRegAddr=HoldRegStartAddr;u8err=0; u8HoldReg[HoldRegCount*2]={1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8};//存储8路数据值voidDisposeReceive(void){u16CRC16=0,CRC16Temp=0;if(data_backup[0]==SlaveID) {CRC16=App_Tab_Get_CRC16(data_backup,dataLen_backup-2); CRC16Temp=((u16)(data_backup[dataLen_backup-1]<<8)|data_backup[dataLen_backup-2]);if(CRC16!=CRC16Temp){err=4; }if(err==0){switch(data_backup[5]) {case0x00:Car_Stop(0,0,0,0);break;.case0x10:Car_Go(1500,1500,1500,1500);break; case0x18:Car_Go(1500,1500,1500,1500);break;case0x0c:fine_tun(1500,1600,1500,1500);break;case0x30:fine_tun(1600,1600,1600,1600);break;case0xff:Car_Left(2100,1600,1600,2100);break;default:Car_Stop(0,0,0,0);break;}if(err>0){SendBuf[0]=data_backup[0];SendBuf[1]=data_backup[1]|0x80;SendBuf[2]=err; CRC16Temp=App_Tab_Get_CRC16(SendBuf,3); SendBuf[3]=CRC16Temp&0xFF; SendBuf[4]=(CRC16Temp>>8); uart2_Send(SendBuf,5); err=0; }}}}电机驱动程序A4950.h#include"AT4950.h"voidA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论