网站首页 公文大全 个人文档 实用范文 讲话致辞 实用工具 心得体会 哲学范文 总结范文 范文大全 报告 合同 文书 信函 实用
  • 企划文案
  • 规章制度
  • 礼仪文书
  • 调研报告
  • 法律文书
  • 工作总结
  • 活动总结
  • 工作计划
  • 工作报告
  • 百花范文网 > 公文大全 > 企划文案 > 基于单片机的果实品质分类装置设计

    基于单片机的果实品质分类装置设计

    时间:2021-09-17 11:10:41来源:百花范文网本文已影响

    基于单片机的果实品质分类装置设计 基于单片机的果实品质分类装置设计 摘要 机器视觉简而言之就是利用摄像头拍摄实际图像,通过摄像头模块自动将图像信息转化为对应的电信号,输送给单片机逻辑处理,以此来达到对图像的智能化识别。果实采摘系统中使用机器视觉较多。

    本文设计了一种基于单片机的果实品质分类装置设计,通过模式识别识别果实表面大体颜色,判断果实是否成熟进一步决定是否对果实进行采摘。采摘后通过果实表面损坏和未损坏的不同反射特性,判断果实的品质,对果实进行分类。主要实现功能:1)通过果实形状大小颜色判断果实是否成熟;
    2)对采摘的果实进行品质分类。

    本文首先对本设计的方案进行了阐述,将整个系统分为硬件设计和软件设计。论文首先介绍果实图像识别研究,对果实颜色识别原理以及颜色识别算法进行介绍。系统硬件设计是以STM32单片机为主控芯片,将整个硬件分为识别模块、抓取及剪切模块、果实品质分类模块以及电源模块。摄像头识别模块主要对成熟果进行识别,实现精准到达和精准剪切,并对果实表面损坏程度进行识别,实现果实的品质分类;
    抓取及剪切模块实现机械臂灵活控制,对成熟果实进行采摘;
    果实品质分类模块是果实剪切后,对不同品质的果实放到指定位置;
    电源模块为整个系统供电。其次论文对整个系统的程序进行了设计。最后论文对整个系统进行制作与调试,系统的功能达到设计要求。

    关键词:图像识别;
    算法;
    单片机;
    采摘;
    分类 Design of picking device of mechanical arm based on single chip microcomputer Abstract In short, machine vision uses the camera to take the actual image, automatically converts the image information into the corresponding electrical signal through the camera module, and transmits it to the single chip microcomputer for logical processing, so as to achieve the intelligent recognition of the image. Machine vision is widely used in fruit picking system. In this paper, a kind of fruit quality classification device based on single-chip microcomputer is designed, which can recognize the general color of fruit surface through pattern recognition, judge whether the fruit is mature and further decide whether to pick the fruit. After picking, the quality of the fruit was judged by the different reflection characteristics of damaged and undamaged fruit surface, and the fruit was classified. The main functions are as follows: 1) judging whether the fruit is mature by the shape, size and color of the fruit; 2) classifying the quality of the picked fruit. First of all, this paper describes the scheme of this design, and divides the whole system into hardware design and software design. Firstly, the paper introduces the research of fruit image recognition, the principle of fruit color recognition and the algorithm of fruit color recognition. The hardware design of the system is based on STM32 single chip microcomputer. The whole hardware is divided into recognition module, grabbing and cutting module, fruit quality classification module and power module. The camera recognition module is mainly used to identify mature fruit, achieve accurate arrival and cutting, and identify the damage degree of fruit surface, so as to realize the quality classification of fruit; the grabbing and cutting module realizes the flexible control of the mechanical arm and the picking of mature fruit; the fruit quality classification module is to place different quality fruits in the designated position after the fruit is cut; the power module Power the whole system. Secondly, the paper designs the program of the whole system. Finally, the whole system is made and debugged, and the function of the system meets the design requirements. Key words: Image recognition; algorithm; MCU; picking; classification 目 录 1绪论 1 1.1 研究背景及意义 1 1.2 国内外研究现状 1 1.3 课题研究要求 2 2 果实图像识别技术研究 3 2.1 数字图像原理 3 2.2 果实颜色识别算法 4 2.2.1模糊C均值聚类(FCM)算法 4 2.2.2直方图信息快速FCM算法(FFCM) 5 2.3 果实识别过程 6 3 硬件电路设计 7 3.1 主芯片选择 7 3.2 电源模块 8 3.3 果实识别模块 8 3.4 抓取模块 9 4 系统软件设计 11 4.1 软件开发环境及工具 11 4.2 软件程序设计 12 4.2.1系统主界面设计 12 4.2.2 图像处理部分 12 4.2.3 系统程序设计 12 4.3 本章小结 13 5 系统制作与调试 14 5.1系统制作 14 5.2 系统调试 14 6 结论 15 参考文献 16 附录一 18 附录二 19 1绪论 1.1 研究背景及意义 目前科学技术的发展促进了各个方面的发展,而我国是一个农业大国,毫无疑问科学技术早已渗透到农业当中,根据当今科技发展的趋势,农业自动化是农业发展的重要战略之一。而如今,科技促使各行各业向自动化方向发展,最具典型代表的是机器人的应用。我国是一个农业大国,我国的农作物产量大,在经济飞速发展的同时,人们逐渐的加大了对农产品的投入,不仅注重农作物质量要求,更加注重口感要求,特别是在水果上,人们对其需求越来越大,要求越来越高。

    水果在我国农产品中占有很大一部分比例,但是目前我国水果的采摘的方式大部分还是依靠人力进行,这就造成了水果采摘的速度十分慢,而且又不能雇佣大量的采摘人员,因为水果只有在一定时候才会大量采摘,这就造成其他“淡季”的劳动力花费增加,对果实养殖户来说,无疑是减少了收入。目前一些科学家提出使用采摘机器人对水果作为进行采摘,并应用到实际采摘中,机器人采摘大大的提高了水果采摘速度,从而降低了采摘成本。目前我国的农业劳动力随着经济的发展逐渐减少,对传统的农业来说是一个巨大的打击,机器人作业概念的推广慢慢的可以解决这一问题。有了采摘机器人并不能立马的解决采摘问题,因为机器相对于人来说,“思考”的过程相对繁琐,而且往往采摘到未成熟的果实,因此对机器人识别的研究至关重要,对实现精准采摘,提高采摘效率有着举足轻重的意义。

    机器人识别系统,简而言之就是机器的“眼睛”,它的主要原理是通过视像头识别实际三维空间中的图像,将图像根据颜色的不同转化为不同的电信号,然后发送到主控CPU进行逻辑处理,通过提前对CPU进行对的软件编程,使得CPU能够正确识别摄像头传来的电信号对的颜色信息,并经过逻辑控制,发送相应的控制信号,控制对应的模块完成相应的功能,识别技术所设计的学科有很多,基本上包含了所有理工科的学科。从上个世纪中旬开始,机器人识别系统就已经逐渐的被研究,美国的一些科学家在二维空间的基础上,研究了三维空间的识别系统,标志着三维识别技术的开始。随着科学技术的发展,视觉计算机理论拉开了三维识别与计算机相结合的序幕,对以后的识别技术的发展奠定了基础。

    1.2 国内外研究现状 在上个世纪中旬,美国科学家就提出了对果实进行自动化采摘,利用机器识别技术对采摘目标进行识别,他们提出识别计算的原理是,通过待采摘目标和其周围的物质对光的反光性质不一样,以此来判断待采摘果实的具体位置,这种识别方法对启发了以后的识别技术。根据这一原理,一些科学家制造了相对应的采摘系统,通过加强苹果的红色和叶子的绿色,利用照相机采集图像,以此来达到识别果实的目的。在随后二十年的发展当中,世界各国的科学家相继投入到机器识别技术当中,根据农场不同的要求,设计出了不同功能的采摘机器人,我国在机器人采摘技术上相对落后一些,但是近年的发展以及十分迅速。

    在上个世纪六十年代的时候,一些国外科学家提出了采用机器人来自动采摘果实的想法后,各种关于机械臂采摘系统的研究层出不穷。随着科学技术的飞速发展,机器人的研究与人们的生活愈发紧密,特别是在农业自动化应用中,机器人采摘系统的研究络绎不绝。最早科学家们设计的自动采摘装置是利用机械臂摇或者振动的方式,但是由于技术的欠缺,这两种采摘方法对果实的损坏率比较大,而且也不能准确识别果实是否成熟。在第一个机器人采摘系统在国外诞生后,关于的采摘机器人的研究一直没有停,国外研究了许多关于黄瓜、苹果等果实的采摘系统,但是还是无法辨别果实是否成熟。随着科学技术的进步,人们对于采摘机器人的研究集中于采摘机器人的识别系统,主要是对成熟果实与未成熟颜色的差异,通过对颜色识别,来判断哪个果实是成熟的,图像处理技术也愈加成熟。随着科技的进步,人们对机械臂的研究从原先的平面运动,研究到了机械臂的5个自由度,实现对机械臂的三维控制。慢慢的,人们对机械臂采摘装置的研究系统化,研究出整个采摘系统。

    1.3 课题研究要求 通过模式识别识别果实表面大体颜色,判断果实是否成熟进一步决定是否对果实进行采摘。采摘后通过果实表面损坏和未损坏的不同反射特性,判断果实的品质,对果实进行分类。

    主要实现功能:1)通过果实形状大小颜色判断果实是否成熟;
    2)对采摘的果实进行品质分类。

    2 果实图像识别技术研究 在设计采摘机器人时,首先应该研究的就是图像识别技术,因为整个系统的关键就在于图像识别。整个系统由摄像头模块获取实际的空间图像,通过识别的技术的逻辑处理,将所识别的图像转换为电信号,并发送给CPU,在主控CPU中与已设定的参数进行对比,以此来确定目标是否符合采摘要求以及目标的位置信号。因此对果实的图像研究十分重要,需将采集的数据经离散采样后转化为数字图像供识别分析。

    2.1 数字图像原理 系统由摄像头来获取待采摘目标的图像,并不能直接发送给单片机进行逻辑处理,需要对图像信号进行处理,将图像信号转化为数字信号,简单来说就是将图像由一个M行N列的矩阵fM×N来表示,如式2.1所示。只有将图像进行数字化处理之后,单片机才能够识别到图像信息,而这个矩阵中的每个点包含的值就是我们所说的图像在该位置的像素值。

    (2.1) 现在用来表示空间颜色的模型有很多种,所谓颜色空间模块,也就是在一个指定的空间里,不同坐标处对应的颜色值是唯一的,目前这种模型在识别系统中应用非常广泛。主要由RGB、CMY、CMYK颜色模型,其中我们一般在数字电路中,采用最多的是RGB。但是并不是所有的都使用RGB,在一些彩色打印机中,使用最多的是CMYK颜色模型。但是上述的几种模型并不是最准确的符合人类识别的颜色模型,最符合的还是HIS模型,因为它在颜色的色调等参数,更加符合人类的识别颜色的标准,因此这种模型是实际应用最多的。

    根据上文所述,RGB模型是硬件采集图像使用最多的,这个模型不同于其他模型,它的像素对应的坐标是在笛卡尔坐标来建立的,如图2.1所示。如果把这个模型中的三维坐标都单位化,那么三维坐标的所有值都集中在[0,1]这个区间范围内。RGB颜色模型成色的原理是,三维坐标每一维都是由256个基本灰度组成,一个颜色由坐标上的x、y、z三个灰度叠加而成的彩色图像,每一个像素的像素深度是24位,由此可以计算出整个模型可以表示的颜色有224=16777216种,其中在三维坐标中(0,0,0)表示最深的黑色,(1,1,1)表示最浅的白色。

    图2.1 RGB颜色模型 2.2 果实颜色识别算法 根据资料资料显示,目前对果实颜色识别的算法有两种,这两种算法分别是模糊C均值聚类算法,简称FCM,以及直方图信息快速FCM算法,简称FFCM。

    2.2.1模糊C均值聚类(FCM)算法 首先提出模糊C均值聚类算法是一个叫Dunn的,后来随着科技的进步,由Bezdek完善了算法,并对其进行推广。一般在对图像进行三维坐标灰度进行分割时,常常会遇到一些不确定的分割方法,这个时候使用本算法可以解决这个问题。这个方法的具体原理是将像素数据集作为聚类样本数据,然后对其进行划分,再对图像进行分割。

    在使用这种算法时,首先设一个像素数据集X,然后定义X={x1, x2,⋯xn}⊆Rt,在这个集合等式中,参数t表示的是向量xj(j=1,2, ⋯ n)的维数,然后根据定义,把数据集中的n个元素划分到c(2≤c≤n)个模糊组中,这种划分方法使得式(2.2)可以取到最小值。

    (2.2) 式(2.2)中,uij为像素值xj属于第i个类的隶属度。满足约束: 且(0≤uij≤1)。m为加权指数(m>1),dij为第j个像素值到第i个聚类中心vij的欧式距离,如式(2.3)所示。

    (2.3) 对式(2.2)通过使用拉格朗日乘子法的方法,对其输入参数进行求偏导数,得到其取得最小值的条件:
    (2.4) (2.5) 根据以上所述,可以总结本算法具体实施的步骤:
    首先要根据系统设定算法所需要的聚类数目c以及所要加权的指数,同时也要规定本算法的终止结算的条件ε>0;
    其次,要对算法所属的矩阵U(0)进行初始化,并且初步设置迭代次数P=1;
    接着就要计算聚类中心矩阵,首先要求得当前的隶属度矩阵,然后把所得的值带入到是(2.4)中进行计算;
    紧接着根据式(2.4)得到的结果,带入到式(2.5)中进行求解计算得到隶属度矩阵;
    最后如果算法在计算中满足,那么这个时候就可以停止计算,不然的话就会出现P=P+1,然后返回到第三步再重复以上的步骤。然后根据上述步骤计算得到的最大隶属度矩阵,以此来分割所要识别的图像。例如,当使用这种算法去分割一个600×600的图像时,根据上述式子可抑制其数据集为360000,因此在计算时,由于数据量太大了,导致分割的速度比较慢。

    2.2.2直方图信息快速FCM算法(FFCM) 由于上述的FCM算法所需要的聚类样本数量太多了,所以科学家们对此方法进行了一些改进,具体是将一个三维的像素分别映射到每一维坐标上,得到每一维灰度的具体值,从而解决了上述问题,大大的提高了算法识别图像的速度。基于FCM改进的算法将FCM中所用到的数据集一一映射到灰度级数据集{0,1, ⋯L−1}(L=256)中,然后将对出现的灰度进行加权处理,具体是根据当前灰度所出现的次数来加权,用以下函数来表示各个灰度出现的次数:w(k) =n(k),k= 0,1,⋯L−1,其中n(k)表示图像中灰度级为k的像素的次数,满足直方图,(M×N为图像尺寸)。其基本思路为,将式(2.6)作为目标函数:
    (2.6) 式中,参数m表示的是加权指数,并且参数m满足m>1的条件。w(k)函数表示的是上述所提到的参数k表示的灰度所要加权的系数值。参数Dik用来表示第k级灰度到第i类聚类中心vi的欧式距离的平方,其具体的计算方法如式(2.7)所示。

    (2.7) 隶属度矩阵U和聚类中心矩阵V通过下面公式计算: (2.8) 根据上述所介绍的FFCM算法,使用该算法的具体步骤是:首先跟FCM一样,根据系统设定算法所需要的聚类数目c以及所要加权的指数,同时也要规定本算法的终止结算的条件ε>0,同时设置迭代次数P=1以及设定初始聚类中心V(0)的值;
    其次将聚类中心矩阵V(0)的值代入到式(2.7)中进行计算,得到了隶属度矩阵的值;
    紧接着将隶属度矩阵的值带入到式(2.8)中进行计算,得到聚类中心矩阵的值;
    然后根据计算得到的聚类中心矩阵的值带入到式(2.7)中,计算得到隶属度矩阵的值;
    最后如果算法在计算中满足,那么这个时候就可以停止计算,不然的话就会出现P=P+1,然后返回到第三步再重复以上的步骤。

    2.3 果实识别过程 如图2.2为果实图像识别流程图。

    图2.2 果实图像识别流程图 通过查阅相关的资料,对比两种算法的分割质量。资料中,使用matlab来判断两种算的分割质量,具体方法是在matlab设定两种算法的参数,其中统一设置两种算法所要识别的图像为640×520,分别利用两种算法对其进行分割,通过结果可知两种算法的计算结果相近,但是直方图信息快速FCM算法计算速度更加快,具体表现为分割时间很短且识别图像所需要迭代的次数更少,可以得出在相同条件下,直方图信息快速FCM算法更加有效率。

    3 硬件电路设计 本设计是基于STM32单片机,如图3.1所示是本设计的方案框图。整个系统主要由识别模块、STM32主控CPU、果实抓取模块以及果实分类模块组成。首先通过摄像头智能识别成熟果实,将果实位置信息发送给单片机,由单片机矢量控制机械臂升降,精准的达到果实的位置,并进行采摘,此时摄像头再次识别果实表面损坏程度,由单片机矢量控制机械臂对果实进行品质分类。

    图3.1 系统方案框图 3.1 主芯片选择 整个装置的主控芯片采用STM32F103VET6。STMicroelectronics公司一直致力于开发出高科技芯片,为用户提供高性能、低功耗的32位数字处理器。其开发了一系列基于ARMCortex-M处理器的32位闪存微控制器产品,其主流的MCU是STM32F103VET6,它是增强型的32位的控制器,这个控制器是以ARM为核心的。Cortex-M3有32位的处理器,不仅如此,其内部的存储器等一些设备都是32位的。这个处理器的内部是将数据和地址总线分开,每个都有自己独立的线路,因此不用担心地址和数据冲突,提高了处理器的效率。图3.2为STM32F103VET6单片机最小系统电路。

    图3.2 STM32F103VET6单片机最小系统电路 3.2 电源模块 STM32F103VET6系列单片机的电源电路如图3.3所示,其供电电压一般为2.0~3.6V之间。如图所示MDB12-24S5芯片将24V的直流电压降压为5V的电压。通过转换开关选择是否供电,+5V电源通过AMS1117-3.3芯片将电压转换为3.3V,C1、C2电容起到滤波、稳压作用。STM32F103VET6系列的单片机有一些模拟电源的管脚,在电路设计中,数字电路和模拟电路分别单独供电,以降低系统的噪声,其中图中的R1、R2、C5和C6组合的主要作用就是过滤掉数字电路中的噪声,提高模拟电路的稳定性。

    图3.2 电源电路 3.3 果实识别模块 本设计采用摄像头模块来采取果实的颜色。摄像头识别模块用的是OpenMV,这个装置价格低廉、极具可开发性的颜色采集识别模块。这款摄像头内部自带IDE,这个IDE的主要功能是自动提示代码,也就是说它可以将图像处理的代码高亮,而且这个摄像头有一个特点就是内部自带一个窗口,可以看到摄像头所要识别的图像,便于系统编程处理。

    使用该模块对水果进行颜色识别,该摄像头模块主要原理是提取所拍到图像的RGB三个单通道灰度图像,根据对不同成熟度果实的颜色识别,发送给单片机处理,判断不同果实的成熟度。其次根据对果实的颜色识别,以此来获取果实在坐标系中的具体位置,并与中心平面像素对比,以此来获取坐标差值,并发送给单片机,由单片机进行逻辑处理,并控制机械臂在空间移动,准确到达果实所在位置并进行采摘。如图3.3为该模块实物图。

    图3.3 摄像头识别模块实物图 本设计所采用的摄像头识别模块是一款价格低廉、带有很多功能的模块。本模块主要由CPU、摄像头芯片等组成,CPU采用STM32芯片系列中的STM32F427CPU,摄像头芯片采用的是OV7725,该模块采用C语言实现对图像颜色的采集,同时本模块还提供可编程接口,支持Python语言,这一功能是的该模块在众多识别模块中脱颖而出。目前该模块广泛的应用到各种需要图像识别的系统中,例如人脸识别、边缘检测等。在工业或制造业中,可以用力筛选残次品,或者对某个固定的物品进行标记,由本模块组成的系统跟踪。并且该模块可支持Python代码,只需要写入一些简单的代码,即可完成复杂的功能。该模块和机器人的结合,可使机器人更加智能化,可以让智能机器人通过识别周围空间颜色,做出比较人性化的动作。从硬件角度来看,该模块采用STM32F427CPU,具有许多接口,包括UART,I2C,SPI,PWM,ADC,DAC等接口,可以支持众多的外围电路。

    3.4 抓取模块 本设计采用舵机实现抓取任务,实现果实的抓取和果实放到指定位置。本设计采用舵机MG995。舵机主要是一种可以控制舵面的电动机,它的基本工作原理是由主控对它发出控制命令,使其发生转动,转动的角度和控制命令的脉冲宽度有关。舵机的主要由舵盘、减速齿轮组、位置反馈电位计5k、直流电机、控制电路板等部分组成。整个舵机系统对外有三根线,一根是电源线、一根是地线、另一根是控制线,其基本控制结构图如图3.4所示。舵机主要有5V电源电压供电,由电源线接入;
    控制线主要是由控制CPU发出信号,控制舵机转动,控制信号是不同脉冲宽度的PWM信号,通常情况下一个信号的周期是20ms,脉冲宽度不同,舵机旋转的角度也就不同,其对应关系如图3.5所示,脉宽由0.5ms到2.5ms,舵机与之对应的角度为-90°到90°,并且成正比关系,控制信号输出的脉冲信号幅值是5V,且控制信号发出后,舵机就会旋转到对应的角度,直到下一次命令,它才会转动。

    图3.4 MG995舵机控制示意图 图3.5 舵机的输出轴转角与输入信号的脉冲宽度之间的关系 4 系统软件设计 第三章介绍了整个系统的硬件电路部分,但要完成整个系统的设计还需要进行系统软件设计才能完成控制功能,因此要有软件程序进行支撑,从而与硬件部分形成相辅相成形态,因此设计整个系统的软件也是实现系统功能一个重要的环节。

    4.1 软件开发环境及工具 MDK和IAR都能作为嵌入式编程开发工具,处于使用习惯方面考虑,语音和红外控制家用电器系统在软件代码编程时采用的是MDK,MDK主要适用于各种需要嵌入式开发的处理器。它具有强大的Simulation设备模拟等功能,此外它内部集成了Flash烧写模块,可以自动配置启动代码。使用MDK进行嵌入式开发时,其中左边是编程的目录,右边是编码区间。

    RV MDK是MDK的全称,该软件是由KEIL公司研发出来的,该软件广泛应用于嵌入式的编程,也已作为现在学校学习单片机的指定软件,随着KEIL软件的不断使用与研究,软件版本也在不断地跟新,开发比较成熟且应用普遍的包括KEIL3.0、KEIL4.0、KEIL5.0,5.21是现在最新的版本,这些版本的跟新变化主要是在操作界面、兼容性、安装库上的变化,以往的芯片库中包含了STM32F1、STM32F2、STM32F3、STM32F4等芯片库函数,而最新的KEIL版本是要先选择添加芯片库然后在进行嵌入式编程,芯片库函数因此也大大减小,从而节省了软件容量,MDK采用最新的Cortex-M4核处理器,自带库函数省去了底层代码编写所需要的时间,编译的代码更小使得编译等待的时间缩短了,软件具有的调试仿真功能能观察每一步编译的结果。就总体编辑环境而言,不仅很容易上手也可以进行很复杂的代码集成。安装包可以进行新芯片支持,该支持是独立于工具链,也能升级中间库,MDK组成部分如图4.1所示。

    从图中可以得知MDK的具有的功能有代码的编辑、代码的编译、库函数自带的底层驱动以及跟踪调试,包安装器包括能进行芯片支持的Device,软件接口标准用于微控制器CMSIS和升级中间库。

    图4.1 MDK组成 4.2 软件程序设计 系统软件是嵌入在硬件中的操作系统和开发工具。系统装置可以分为上位机(数据显示)、下位机(数据采集)、串口通讯(数据传输)这三部分,上位机可以直接发出操作命令,在该检测装置中的作用主要是使用者能直接从显示屏上观测到数据,并能进行查询以及手动操作来发送指令;
    下位机主要是检测设备能直接从现场获得需要采集的数据。对这三部分进行软件设计,能将各个硬件模块连接在一起并进行控制。软件部分的设计使得整个装置的运行速度以及效率都显著提高,设计也更加人性化。

    4.2.1系统主界面设计 本设计为了让系统调试比较方便,在主系统的界面设计中考虑到这一因素。因此在设计中,把系统的主界面分为以下两个部分:一种是可以手动调试,可以支持在线调试。一种是系统主控可以自己生成小车运动的指令,然后发送个电机驱动模块,控制小车达到指定位置。手动调试的话主要考虑到机械臂采摘时,机械臂的运动能够最简单化,另一种是对小车的运动路径最简化。为了使整个系统的机构可视化,在界面上显示了系统各部分的系数,比如机械臂参数,当前角度以及机械臂的尺寸等。此外最重要要显示当前识别的果实是否成熟,是否符合采摘标准。

    4.2.2 图像处理部分 图像处理使用Openmv。图像的识别包括图像颜色识别与图像形状识别。系统软件在通过thresholds()函数来设置颜色识别的阈值,这个阈值来自OpenMV模块通过IDE对图像进行图像二值化处理得到的,可以得到不同果实的阈值,这里设置成熟果实的阈值为(51,79,7,-60,61,14),系统通过设置修改thresholds()函数,以此来设定哪个颜色的果实可以判定为成熟果实,然后系统通过find_blobs()函数查找对应阈值的摄像头所排到的图像,并进行标记。并返回给单片机标记的位置在空间中的坐标值,系统采用area()函数来识别果实的形状,使用img.get_statistics()函数进行像素的颜色统计,当区域中的众数在所设置的阈值范围,就说明这个区域为需要寻找的物体 4.2.3 系统程序设计 摄像头作为整个系统的眼睛,要识别果实成熟度和果实形状。首先机械臂作为果实抓取的主要部件,需要做到的就是精确的寻找到成熟果实的位置。机械臂作为柑橘抓取的主要部件,需要做到的就是精确的寻找到果实的位置。由图像识别模块识别果实图像具体的位置,通过与图像中心对比,得到与中心坐标的差值,并发送给单片机处理,由单片机输出控制信号,控制舵机运动到达对应果实位置,并对对果梗进行剪切,最后将果实放到指定位置。具体程序流程图如图4.2所示。

    图4.2 系统程序设计流程图 整个程序流程开始首先初始化STM32单片机,通过摄像头和各种传感器检测到果实采摘点的具体位置,由单片机逻辑运算控制采摘机运动到对应的果实采摘点,到达指定点时,如果检测不是果实采摘点,则会返回摄像头和各种传感器检测到果实采摘点的具体位置这步。达到果实采摘点后,由摄像头传递果实颜色信息,对成熟果实位置进行识别判断,此时经过单片机逻辑运算,控制机械臂的舵机移动到成熟果实位置,进行剪断果梗抓取果实,此时摄像头再次对果实表面损坏程度进行识别,对果实进行品质分类,并控制舵机将不同品质的果实放到指定位置,如果没有成功抓取果实,则返回到摄像头识别这步,由摄像头重新识别果实颜色,并采摘,依次循环。

    4.3 本章小结 本章通过MDK的开发环境对机械臂采摘装置的软件设计部分进行了程序编写与调试,首先提出了整个系统的总体设计,然后分别对程序设计中各部分进行了介绍,给出了整个程序设计的流程图,通过流程图介绍整个程序的工作过程。系统软件的设计符合课题功能要求。

    5 系统制作与调试 5.1系统制作 实物焊接是否正确直接影响系统的的功能,同样的,元器件是否正确也决定系统功能是否正常,为此实物焊接的步骤如下:
    (1)首先根据原理图以及PCB来核对所购买的元器件是否符合封装和参数要求,利用万用表测量电容、电阻等器件的精度是否符合要求,其次对比PCB中器件的封装尺寸,以确保实物能够焊接到PCB上。

    (2)核实好器件无误后,按照PCB对应关系从左到右依次焊接元器件,确保无虚焊、焊锡过多、短路等情况出现。

    (3)对一些有极性或者方向的芯片,按照PCB对应关系,放置好器件再进行焊接。一般先焊接小的、低的。

    5.2 系统调试 本装置对成熟准确快速的识别定位并正确反馈目标坐标数据是实现机械臂采摘装置采摘作业的基础。在实地不同成熟程度的果实下进行目标识别定位实验时,为了体现本采摘装置控制系统对成熟果实识别的准确度,特意选取不同成熟度的果实较多的地方,达到要求的果实均被识别,此外还人工损坏果实表面,本装置均能对果实品质进行分类。

    在采摘装置进行采摘时,整个系统的识别装置也在正常工作,如果发现采摘信号不准确,即并未采摘到对应果实时,系统会停止当前动作,并重新对目标果实进行识别定位。经过实验机械臂采摘装置对成熟果实的识别正确率较高,且采摘率也很高。这就表明本设计的机械结构、硬件设计、软件设计能实现对应功能,整个装置符合系统设计设计要求。

     6 结论 本设计题目是一种基于单片机的果实品质分类装置设计,通过模式识别识别果实表面大体颜色,判断果实是否成熟进一步决定是否对果实进行采摘。采摘后通过果实表面损坏和未损坏的不同反射特性,判断果实的品质,对果实进行分类。主要实现功能:1)通过果实形状大小颜色判断果实是否成熟;
    2)对采摘的果实进行品质分类。

    本文首先对本设计的方案进行了阐述,将整个系统分为硬件设计和软件设计。论文首先介绍果实图像识别研究,对果实颜色识别原理以及颜色识别算法进行介绍。系统硬件设计是以STM32为主控芯片,将整个硬件分为识别模块、抓取及剪切模块、果实品质分类模块以及电源模块。摄像头识别模块主要对成熟果进行识别,实现精准到达和精准剪切,并对果实表面损坏程度进行识别,实现果实的品质分类;
    抓取及剪切模块实现机械臂灵活控制,对成熟果实进行采摘;
    果实品质分类模块是果实剪切后,对不同品质的果实放到指定位置;
    电源模块为整个系统供电。其次论文对整个系统的程序进行了设计。最后论文对整个系统进行制作与调试,系统的功能达到设计要求。

    在实际设计当中遇到了很多困难:1)首先是整个方案的确定,根据所要实现的功能确定整个系统分为哪几个模块;
    2)其次是确定好模块后,如何去选择对应的芯片,再查阅了大量的相关书籍和芯片手册后,确定了本系统索要使用的芯片;
    3)在系统硬件设计的时候,遇到很多关于AD软件和硬件电路上的问题,于是上网自学了AD软件,查阅相关的硬件电路设计手册,逐步解决了问题。

    本论文设计的智能点滴系统基本上实现了通过模式识别识别果实表面大体颜色,判断果实是否成熟进一步决定是否对果实进行采摘。采摘后通过果实表面损坏和未损坏的不同反射特性,判断果实的品质,对果实进行分类。但是在整个系统果实识别精度上做的还是不够完善,后续会在这些方面继续深入研究。

    通过本次毕业设计,我学到了很多知识,主要包括:1)单片机的相关知识;
    2)原理图的设计,硬件电路相关的许多知识;
    3)程序的编写等一些专业知识。其次我还学到做好毕业设计要十分用心,在拿到题目时要认真分析系统的具体要求,根据具体要求将整个系统分为不同的模块,以达到实现对应的功能,在毕业设计的每一步当中,遇到困难不要放弃,要沉着冷静分析问题原因,善于查阅资料以及咨询老师等,只要自己坚持不懈,一定会完成自己的毕业设计,这对我以后的人生有着很大精神上的帮助。

    参考文献 [1]陈景郁,朱洪雷.基于ST-Link的STM32单片机多路固件烧录方法研究[J].机电信息,2020(09):76-77. [2]田勇军,黄采伦,张念,陈俊竹,刘袁庆子.基于内循环除湿的密集烤房烘烤控制系统[J/OL].江苏农业科学:1-8[2020-03-28].https://doi.org/10.15889/j.issn.1002-1302.2020.04.041. [3]杜警,窦艳艳.基于STM32的地铁电动客车空调控制器设计[J].电力机车与城轨车辆,2020,43(02):51-53. [4]谷学静,周自朋.基于STM32单片机的数据手套设计[J].网络安全技术与应用,2020(03):49-51. [5]姚文俊,杨加东.基于STM32的汽车安全及灯光系统设计[J].南方农机,2020,51(05):154-156. [6]甘礼福,彭博齐,邓金海,邓展鹏,苏其强,张声岚.基于STM32实验室环境监测系统的研究与设计[J].轻工科技,2020,36(03):65-68. [7]李颀,王康,强华,马琳.基于颜色和纹理特征的异常玉米种穗分类识别方法[J].江苏农业学报,2020,36(01):24-31. [8]孙艺珊,李晓洁,赵凯.改进LBP和HSV颜色直方图相结合的地表状态识别[J].测绘通报,2020(02):29-36+71. [9]魏国莲,林成全.果蔬自动化采摘机的机械结构设计与试验[J].农机化研究,2020,42(09):117-124. [10]阮浩洁,王春亚,王辉,刘晓东.基于图像识别的保护压板状态识别技术研究与应用[J].电力设备管理,2020(01):139-140. [11]付长斐,叶宾,李会军.基于HSV颜色空间的运动目标识别[J/OL].控制与信息技术,2020:1-5[2020-03-28].https://doi.org/10.13889/j.issn.2096-5427.2020.01.600. [12]李巨虎,范睿先,陈志泊.基于颜色和纹理特征的森林火灾图像识别[J].华南理工大学学报(自然科学版),2020,48(01):70-83. [13]闫建伟,苏小东,赵源,刘进平.基于图像颜色特征的高粱胚芽鞘识别及定位方法[J].江苏农业科学,2019,47(23):252-256. [14]郄磊澎,龚家元,毕栋,司熙鹏,朱政泽,周诗薇.基于OpenCV的锥桶识别技术研究与实现[J].湖北汽车工业学院学报,2019,33(04):50-53. [15]周诗薇,龚家元,郄磊澎,毕栋,朱政泽.基于OpenMV的云台追踪系统设计[J].湖北汽车工业学院学报,2019,33(04):54-56. [16]祁浩. 基于颜色名特征增强的行人重识别方法研究[D].南京邮电大学,2019. [17]任晓智,李福敏,江山,沙诗琴,韦磊.机械臂夹剪苹果采摘机的仿真设计与制造[J].农机化研究,2020,42(08):112-117. [18]刘铮,刘英,沈鹭翔.青梅采摘机器人设计[J].林业机械与木工设备,2019,47(10):23-28. [19]张同勋. 棚架葡萄采摘机械臂的定位与运动控制研究[D].山东农业大学,2019. [20]王毅,滕举元,张哲,许洪斌.六自由度采摘机械臂采摘姿态规划研究[J].机械设计与制造,2019(08):235-238+242. [21]刘富成,田壮.一种并联采摘机器人研究[J].湖北农机化,2019(13):127. 附 录 附录1 STM32主控制板原理图 附录2 源程序代码 COORDATA tempData; Std::vector<COORDATA>allData; Std:: vector<COORDATA>finalData; Std:: vector<double>TwoCoor//调用摄像头返回数据 Std::vector<double>::iteratoriter; allData.clear(); finalData.clear(); TwoCoor=OutputCoor(); For(i=0;i<TwoCoor.size();i=i+3) { tempData.x=TwoCoor[i]; tempData.y=TwoCoor[i+1]; tempData.y=TwoCoor[i+2]; allData.push_back(tempData); } int record_tree=0; double two_point_len; double two_point_lenx; double two_point_leny; for (int k=0;k<finalData.size();k=k+3) { Bool_b_twoplen_true; B_twoplen_true=true; // int j=0; // int record_tree[10]; For(int i=0;i<finalData.size();i=i+3) { If(i=k) Continue; Double angle; Double x1,y1,x2,y2; x1=ceil(finalData[k].x*1000)+30; x2=ceil(finalData[k].x*1000)+30; y1=ceil(finalData[k].x*1000)+382; y2=ceil(finalData[k].x*1000)+382; two_point_len=sqrt(pow((x1-x2),2)+pow((y1-y2),2); str.Format(“two_point_len=%f”,two_point_len); MessageBox(str); angle=(x1-x2)*x1+(y1-y2)*y1; angle=angle/two_point_len/sqrt(pow(x1,2)+pow(y1,2); angle=acos(angle); two_point_len_x=two_point_len*sin(angle); two_point_len_y=two_point_len*sin(angle); str.Format(“two_point_len_x=%f,two_point_len_y=%f, two_point_len_x, two_point_len_y”); MessageBox(str); Bool b_two_point_len; B_two_point_len=two_point_len_x>300; B_twoplen_true=b_twoplen_true&&b_two_point_len; Double theory_clamp_x; Double theory_clamp_z; Double theory_clamp_y; m_return_z1=ceil(-finalData[k+1].y*1000+674); m_return_z2=ceil(-finalData[k+2].y*1000+674); m_return_x1=ceil(-finalData[k+1].x*1000+30); m_return_x2=ceil(-finalData[k+2].x*1000+30); m_return_y1=ceil(-finalData[k+1].x*1000+382); m_return_y2=ceil(-finalData[k+2].x*1000+382); UpdateData(FALSE); Bool b_abs_x,b_abs_y,b_abs_z; B_abs_x=abs(m_return_x2-m_return_x)>400; B_abs_y=abs(m_return_y2-m_return_y)>400; B_abs_z=abs(m_return_z2-m_return_z)>400; If(b_abs_x&&b_abs_y&&b_abs_z) { m_return_x1=m_return_x; m_return_y1=m_return_y; m_return_z1=m_return_z-100; m_return_x2=m_return_x; m_return_y2=m_return_y; m_return_z2=m_return_z-100; } b_abs_x=abs(m_return_x1-m_return_x)>400; b_abs_y=abs(m_return_y1-m_return_y)>400; b_abs_z=abs(m_return_z1-m_return_z)>400; if(b_abs_x&&b_abs_y&&b_abs_z) { m_return_x1=m_return_x; m_return_y1=m_return_y; m_return_z1=m_return_z-100; m_return_x2=m_return_x; m_return_y2=m_return_y; m_return_z2=m_return_z-100; } theory_clamp_x=(m_return_x1+m_return_x2)/2; theory_clamp_y=(m_return_y1+m_return_y2)/2; theory_clamp_y=(m_return_y1+m_return_y2)/2; double theta; theta=-atan(theory_clamp_x/theory_clamp_y); C3DPointP1(m_return_x1,m_return_y1,m_return_z1); C3DPointP1(m_return_x2,m_return_y2,m_return_z1); P1.rz=-theta; Ptheory.rz=-theta; P1.changecood_rz(); Ptheory.changecood_rz(); C3DPoint Pt(P1.x-Ptheory.x,P1.y-Ptheory.y,P1,z-Ptheory.z); Double alpha; Double beta; Alpha=-atan(Pt.x/Pt.z); Pt.ry=alpha; Pt.changecood_ry(); Beta=atan(Pt.y/Pt.z); Alpha= alpha; Beta=-beta; Str.Format(“alpha=%f”,alpha*180/3.14); MessageBox(str); m_motor5_endpos=beta; m_motor6_endpos=alpha; m_motor5_midpos=beta; m_motor6_midpos=alpha;

    相关热词搜索:

    • 范文大全
    • 说说大全
    • 学习资料
    • 语录
    • 生肖
    • 解梦
    • 十二星座

    推荐访问