崔洪福,陈越超,张景瑞
(长春师范大学工程学院,吉林 长春 130032)
起重机是指在一定范围内垂直提升和水平搬运重物的多动作起重机械。古罗马建筑师维特鲁维斯曾在其建筑手册里形容了一种起重机械,但移动幅度小操作吃力。而随着科学技术飞速发展至今早已解决这个难题,进而针对不同工作条件,衍生出诸多种类的起重机。为提升大学生对起重机在国民经济各领域的应用意识,提高大学生针对实际需求进行起重机设计和工艺制作的动手能力,中国机械工程学会等主办了中国大学生起重机创意大赛。针对比赛项目,本文设计了一种能够实现比赛要求的、低成本、可用于教学的门式起重机。
将起重机工作区域划分为取物区、通行区、堆码区(如图1所示)。取物区待搬运的物体本体及前方地面均配有配有由不同颜色和形状结合而成的标识,标识采用红和蓝两种颜色,与三角形、圆形、方形三种形状组合而成,即三种形状各两种颜色共6种标识。堆码区设置3个目标堆放区,分别标识为等边三角形、圆形、方形目标堆放区。在取物区和堆码区之间为通行区。本设计的起重机能够实现以下功能:1)准确识别地面标线的路线,使起重机循迹行驶;2)精准循迹,避免起重机偏离轨迹及保障运行平稳;3)识别红色、蓝色及圆形、矩形、三角形,提取对应标识货物;4)提取货物搬运至指定标识堆码区。
本文采用三角形、圆形、方形三种形状及红蓝两色来标识待取货物,红蓝两色和三角形、圆形、方形三种形状作为OpenMV的颜色和形状识别特征。本文设计的竞赛用轻量化微型门式起重机,主要由传感器、控制器、执行器等组成的硬件系统如图2所示。
Arduino Mage 2560 pro单片机作为控制核心,能够收集各I/O口输入的高低电平信号再进行处理,实现系统各个模块协调统一地工作。传感器为OpenMV4机器视觉模块,其搭载了Micro Python解释器,使用Python语言进行编程,通过串口与控制器实现通信。执行器有编码电机和步进电机。采用L298N电机驱动模块来控制编码电机,可控制转向,编码电机能进行转速测量。采用DRV8825步进电机驱动模块来控制步进电机,可通过控制脉冲信号数量对步进电机进行准确定位、控制脉冲信号频率实现多个步进电机同步旋转。
本文设计的门式起重机采取双龙门式,两龙门分别位于起重机左右两侧,结构稳定且重心位于起重机中下部,起升机构吊起重物时不易侧翻,当两龙门分别吊起待取货物时两侧承重平衡将更加稳定。起重机整体结构采用欧标铝型材2020制作,欧标铝型材是Al+Mg+Si合金挤压型材,采用高强度内凹的T形槽结构,同时经过氧化银白色(CO)阳极化处理,并镀层12以上,具有承载能力高、结构稳定、耐刮擦耐腐蚀和型材间拆装方便的特点。起重机整体结构如图3所示。
识别系统由四个OpenMV机器视觉模块组成,其中两个位于门式起重机的左右两侧龙门的横梁上,用于识别待取货物前方地面上标识的颜色和形状,称为OpenMV A、B。另外两个位于门式起重机的前后两端识别地面标线使起重机能够循迹行驶,称为OpenMV C、D。
执行系统由四个编码电机与四个步进电机组成,四个编码电机分别驱动一个麦克纳姆轮,来实现起重机前进、后退、横移、旋转多种行驶状态。麦克纳姆轮分为互成镜像关系的麦克纳姆轮左和麦克纳姆轮右,四个麦轮加以组合可以使起重机实现多方位移动功能。而麦轮的组合方式多种,吸收前人经验,本设计采用的一种可以满足功能的组合方式为左前方和右后方为麦克纳姆轮左,右前方和左后方为麦克娜姆轮右。两个步进电机位于起重机两龙门框架顶部分别驱动一个卷筒,作为卷扬用于提升门式起重机的横梁。卷筒为并列双卷筒,双卷筒各卷一绳,绳采用为1号鱼线,另一端固定于所提升横梁的两端。在步进电机驱动下并列双卷扬同步卷绳,且两绳位于横梁两端,可保证提升过程稳定,提升货物时横梁不会发生倾斜。另外两个步进电机分别位于两龙门横梁一端连接同步皮带轮,另一端为同步带拉直张紧器,采用同步带传动,同步带两端卡在横梁上的三轮卡扣皮带滑车上,而滑车连接吊钩。步进电机带动同步带可使三轮卡扣皮带滑车带动吊钩在横梁上左右滑动来钩取待提货物。
因取物区有六种不同标识的待取货物,且本设计一次至多搬运两个货物至目标堆码区,所以需三次搬运作业完成目标,进而需一定的提取顺序。现设计提取顺序为初次作业提取蓝色圆形标识货物、红色圆形标识货物,搬运至圆形标识堆码区,二次作业提取蓝色矩形标识货物、红色矩形标识货物,搬运至矩形标识堆码区,三次作业提取蓝色三角形标识货物、红色三角形标识货物,搬运至三角形标识编码区,三次作业需识别的标识不同。工作流程如图4所示工作时,起重机能够从起始点出发识别地面标线循迹行驶到达取物区后,能够从随机排列的六种标识的代取货物中按照自行设定的顺序吊取两个,从通行区循迹返航将货物堆放至堆码区的相应形状的堆码区域内并保证蓝颜色标识物品堆码在下层、红颜色标识物品堆码在上层的顺序。再次识别地面标线循迹行驶至取物区进行按照自行设定的顺序吊取对应标识的待物物品,循迹返航,堆放至相应标识的堆码区,直至将货物搬运完成,作业结束。
本设计中OpenMV C、D的作用是识别地面标线从而使起重机循迹行驶,采用线性回归的方法进行循迹,为提升线性回归计算速度将图片分辨率大小设为“QQQVAG”。循迹原理为首先根据地面标线颜色调整阈值,对采集的图片根据设定好的阈值通过binary()函数进行二值化处理,用mean(2)函数消噪降低因噪点产生的误差,用get_regression()函数进行线性回归得到直线,根据返回的line对象,来调整起重机的运动使直线在OpenMV视野中央。
为精准控住起重机运动,提高循迹精度降低误差,本设计采用双重PID控制法控制起重机的运动状态的调整。第一重PID控制为,在OpenMV程序里用PID闭环系统控制运动调整趋势。首先从pid模块导入PID类,定义两个参数rho_pid控制左右偏移距离、theta_pid控制角度偏移。根据线性回归返回的line对象中的line.rho、line.theta计算得到差值rho_err直线与中央的偏移距离、theta_err直线与中央的偏移角度,差值传递到pid函数作为参数,将计算得到结果通过uart.write()函数串口通信给控制器Arduino Mage 2560 pro,控制起重机运动。对于line对象的返回值rho、theta来说,rho偏转距离更重要,只采用rho_pid一个参数,控制左右偏移距离也是可行的。第二重PID控制为,PID闭环控制系统控制编码电机速度。将OpenWV通过串口通信传递给控制器的数据作为设定值,通过控制器输出PWM值调节编码电机速度,编码电机的编码器检测电机速递,与设定值作比较,通过pid控制器,来控制电机速度达到预定值。控制流程如下图5。
本设计中OpenMV A、B的作用是识别标识从而使起重机提取相应的待取货物,由于待提取货物的六种标识由蓝色、红色与圆形、矩形、三角形两两组合而成,为能够区别开六种标识,需同时识别颜色与形状。颜色识别原理为,定义好红色蓝色的阈值后,调用find_blobs()函数根据返回的对象判断是否为目标颜色。形状识别原理为,对于圆形的识别采用霍夫圆检测的算法,通过霍夫变换查找视野中的圆形,调用find_circles()函数根据圆形标识大小调整threshold参数。对于矩形的识别采用四元检测算法,调用find_rects()函数。对于三角形标识的识别,若采用传统的识别线段计算角度的方法准确率低,为提高准确率采用一种新的方法,通过对目标区域进行遍历,获取每一个点的像素值并进行判断,然后根据像素值的分布规律,对其进行形状分辨,核心是调用Pixel_value = img.get_pixel(j,i )函数获取图像中当前点的像素值。同时识别颜色形状,为算法的组合。以识别红色圆形标识为例,先进行圆形识别,后对识别到的圆形区域进行颜色统计,判断区域内最多的颜色是否是红色。
竞赛用轻量化微型起重机,基于OpenMV 机器视觉模块和Arduino Mage 2560 pro单片机能够准确识别标线精准循迹行驶,完美识别六种标识,整体结构稳定,作业过程稳定,充分满足设计目标。硬件组成简单,成本较低,可用于教学,为多元化教育提供一种选择。