朱伟枝 杨亚萍 梁华成
摘要:以智能小车为载体、机械手为抓取机构,采用Arduino为核心控制器,利用OpenMV的形状和颜色识别功能检测棋子位置,提供了一种能够完成识别和夹取棋子的任务的可实践的合理化设计方案,结构稳定,程序设计简单。
关键词:智能小车;Arduino;OpenMV;机械手;识别
中图分类号:TP242 文献标识码:A 文章编号:1007-9416(2020)08-0132-03
0 引言
嵌入式系统与微处理器近年来的发展突飞猛进,由此我们的日常生活中逐渐开始大量应用无线传输技术与图像处理技术[1]。智能搬运小车的功能核心是代替人来运输货物,实现智能搬运涉及到了两个核心功能,一是识别,二是夹取。本文的主要设计思路是采用Arduino[2]作为智能小车的核心控制器,利用OpenMV[3]摄像头模块来实现图像信息采集工作,并将收集到的图像信息输送到控制器上,控制器根据收到的信息做出相应的指令动作控制智能小车和机械手,从而实现智能小车自动识别物体并将其夹起的功能。
1 系统总体设计
本文采用绿色的矩形棋子来模拟货物,绿色和矩形是作为OpenMV的颜色和形状识别特征,棋子是作为实物来测试机械手的工作。本文设计的自动搬运系统主要由传感器、控制器、执行器等组成,如图1所示。
控制器Arduino单片机作为整个系统的控制核心,负责收集各个I/O口输入的信息并进行处理,实现各个模块统一协调工作。传感器部分包括OpenMV和超声波测距模块。OpenMV是一个功能强大的机器视觉模块,利用广角镜头使得识别范围更加广,采用具有识别颜色和形状特征的组合算法,将收集到的信息實时通过串口上传至Arduino控制器上,Arduino就会根据OpenMV上传的数据作出判断,从而控制智能小车和机械手的运作。超声波测距模块主要负责确保车头与棋子的距离,将收集到的数据经处理后,通过串口将处理好的数据发送至Arduino上,保证机械手能准确无误夹取棋子。执行器部分为机械手和电机。机械手由两个舵机组成,一个舵机负责机械手臂的上下运动,另一个则负责机械手的展开和闭合,控制两个舵机的工作就能控制整个机械手的工作;Arduino采用PID控制算法[4],控制电机转动方向和速度,可以使电机产生正转、反转,从而根据两轮差速原理使小车实现前进、后退及转弯等动作。
2 系统软件设计
2.1 总体控制流程
如图2所示,智能小车通电后,所有硬件都进行初始化,识别模块开始采集照片,需要准确识别到目标棋子的所在位置,并将处理好的目标棋子的信息传送给Arduino控制器,Arduino控制器接收到信号后发出指令控制智能小车的电机模块开始工作,并向棋子的位置靠近。为了保证机械手能准确地夹起棋子,就需要控制好智能小车与棋子之间的距离,当智能小车与棋子之间的距离在设定的阈值范围之内时,电机模块停止工作,Arduino控制器控制夹取模块开始工作,通过机械手把棋子夹起来。
2.2 行驶模块程序设计
小车的行驶模块包含几个子函数模块:前进模块run()函数、停止模块stop()函数、转弯模块turn()函数和识别模块search()函数。当棋子在OpenMV识别区域中心时,控制器就执行前进run()函数控制智能小车前往棋子所在位置;当智能小车与棋子之间的距离在设定阈值范围时,控制器就执行停止stop()函数;当棋子在OpenMV识别区域中心两边时,控制器就执行转弯turn()函数控制智能小车前往棋子所在位置;当OpenMV识别不到目标棋子时,控制器就执行search()函数,控制智能小车移动到其他位置直到识别到棋子为止。控制电机转动方向和速度采用PID算法运行,设定智能小车正常直线运动时的PWM阈值,当智能小车转弯时,分别对智能小车左右两轮电机的参数进行PID运算,保证左右车轮实现差速转弯。
2.3 识别模块程序设计
如图3所示,识别模块采用具有识别颜色和形状特征的组合算法,首先调用find_rects()函数对拍摄到的物体进行形状识别,若识别到的物体是矩形,再调用rect.corners()函数,返回一个由矩形对象的四个角组成的四个元组的列表,使OpenMV只在这个区域内进行像素统计,最后调用 get_statistics()函数进行像素统计,若LAB的三个通道的众数分别在绿色的阈值范围内,OpenMV就判定识别到了绿色的棋子。
2.4 机械手模块程序设计
机械手模块的动作由两个舵机来完成,分别命名为s1和s2,s1为机械臂的舵机,s2为机械手的舵机。机械手模块的程序设计包含putup()函数、putdown()函数、open()函数和close()函数。putup()函数和putdown()函数负责机械臂的抬起和放下,open()函数和close()函数负责机械手的展开和闭合。
3 功能测试
本文设计测试主要用到Arduino IDE、OpenMV IDE进行程序编写,主要测试智能小车的功能包括识别功能、机械手夹取功能。
3.1 识别功能
为了对智能小车进行识别功能测试,在测试区摆放了各种形状各种颜色的物体。OpenMV通过广角镜头对周围环境进行扫描,对采集到的图像中的物体进行颜色和形状识别,首先对物体进行形状识别,然后在识别到的棋子形状区域内通过像素统计进行颜色识别。经多次试验表明,智能小车能成功识别到绿色棋子,设计能满足要求。
3.2 夹取功能
当智能小车与棋子的距离在设定的阈值范围时,智能小车会停止运动,机械手开始执行工作。首先是s1舵机开始工作,顺时针向下旋转,然后s2舵机逆时针旋转,机械手夹爪接着张开,延时后再顺时针旋转夹住棋子。经多次随机测试,机械手的运作也符合了设计要求。
4 结语
本文设计的智能搬运小车,由Arduino与OpenMV组成,能够完成目标棋子的识别与夹取。智能搬运小车根据实际生产需求,设计带万向轮底盘与由机械臂及夹爪组成的机械手,可以科学规划目标物体的搬运计划,精确地实现小车在工厂的位置控制,按照设定的程序,能够准确识别物体和全自动搬运。其应用可以大大减轻工人劳动强度,提高生产效率,降低生产成本,缩短生产周期。
参考文献
[1] 张铮.基于图像处理的智能小车无线远程灭火[J].实验室研究与探索,2018(1):43-57.
[2] 赵勇.基于Arduino 和Android平台的智能小车避障系统设计研究[D].西安:长安大学,2014.
[3] 邹浩,郭雨婷,李佳盈,等.基于OPENMV的色彩引导机器人系统研究[J].科技资讯,2018(25):65-76.
[4] 赵永永.基于PID智能控制算法的智能车车速控制研究[J].软件,2019(1):195-198.