引言随着嵌入式技术的发展,基于小型便携式识别和集群控制技术较传统计算机技术具有更广阔的应用。基于摄像头的颜色识别技术较一般传感器定位和采集技术具有稳定性和可移动等方面的优势[1],在生产车间自动物料配送车的循迹以及基于颜色的物料提取中具有广泛的应用前景[2]。而集群控制作为一种新生的控制方式,在大范围、多控制对象的控制方面具有举足轻重的作用,如太阳能发电板的集群控制、风力发电机的集群控制以及大型舞台剧中的灯光集群控制。而本文中的小车集群控制是将颜色识别与集群控制的较好方式。小车位置及方向信息通过摄像头的颜色识别技术获取,处理之后传送到STM32进行校验,并通过无线模块发送出去,驱动多辆小车按指定的路线行走,从而实现集群控制。1 系统整体构架本文中的设计系统由智能小车和摄像头控制模块两部分组成,为满足集群控制的需要选用3辆小车,小车由两轮驱动,便于在行走过程中调节方向。每辆小车搭载NRF无线模块和测速模块,���以实现小车的旋转角度测量以及速度调整。跑道的正上方是USB摄像头,通过5 m长的延长线与地面的主控板相连接。为满足数据的实时处理及多任务控制的需要,主控板采用Tiny2440四核CortexA9核处理器,搭载Linux系统,通过QT的设计使得操作界面美观易操作。为减轻处理器内核的负担以及确保传送指令的准确性[3],指令的校验工作由外围的STM32芯片处理,并通过nRF模块与小车通信。系统整体结构图如图1所示。2 硬件结构2.1 主控制器硬件结构Exynos 4412采用哈佛结构设计,使得数据和代码的读取速率较高,而其特有的四核处理器具有1.5 GHz的主频,使得对摄像头采集数据的处理更加实时,并流畅支持1280×800高清屏,可通过LCD屏指定小车路线范围,实施控制。控制器内部结构图如图2所示。2.2 智能控制结构智能小车对于接收指令的实时响应决定了最终的控制效果,本文中的智能小车采用意法半导体公司的STM32F103C8T6作为控制芯片,通过产生的PWM信号来控制直流电机的转速。在实际控制过程中需要涉及到小车的定向旋转,以及直线行驶的问题,于是在小车中引入了光电红外对射管作为小车的测速模块。当直线行驶时,小车将通过测速码盘的脉冲输出来判断转速的大小,从而作出左右轮转速的调整。同时小车会将调整的结果存入到内部Flash中作为下一次启动时的调整数据,这样只要在实际运行前做测试调整,小车就会在直线行驶时,实现不同场地的阻��误差记忆。小车控制板结构图如图3所示。2.3 小车定位方式小车的顶部色盘必须同时具备小车位置定位和方向定位功能。由于通过形状定位的传统方式对摄像头要求过高且识别精度有较大误差,本设计采用两个圆盘的颜色识别方式来实现这一功能。小车顶部色盘如图4所示。2.4 小车的控制指令小车的控制数据由8个字节组成,如下所示:其中,1、2、3、8为指令校验码,4~7为指令内容。第1个字节到第3个字节表示数据头,都是0x80。第8个字节表示数据尾,是0x81。这样只有出现数据头的字节,其后面的内容才被小车识别为有用的数据,使得小车正确运转。数据尾的出现代表对小车的控制结束。数据内容为发送控制指令的具体形式。小车有以下几个命令。小车转向的幅度可以从0x01到0x1f,方向0x01代表右转,0x02代表左转。④ 小车左右轮前进2.5 小车搭载色盘颜色的确定由于USB摄像头采集到的颜色数据为YUV格式,需要将其转换成RGB格式来显示。所以在确定小车搭载定位色盘的颜色时需要选定特殊的颜色,以使得采集到的数据容易被分辨。本设计在原色选择时采用Y、U、V为三维坐标轴使得色盘的YUV分量之间存在一定差距,再通过公式将其转换成RGB基色值[6]。3 软件实现3.1 主控软件系统软件平台为Linux Kernel 3.5、Qtopia2.2.0;交叉编译环境为嵌入式QT、armlinuxgcc;开发语言为C++。3.2 颜色识别算法此模块在一个线程中,先读取配置文件,得到各个颜色的Y、U、V平均值,然后从摄像头取得一帧的图像,按行扫描每个像素,根据Y、U、V平均值确定Y、U、V的阀值对像素的Y、U、V值进行匹配,从而确定像素的颜色。程序把各个颜色的像素点分类,同一颜色的像素点坐标放在一起,然后算出同一颜色像素点的中心坐标。然后通过表1对应到小车的坐标。表1 小车颜色像素坐标得到3辆小车的中心点坐标和方向点坐标后,存放在内存中,供其他模块调用。摄像头采集数据流程图如图5所示。3.3 集群防碰撞控制算法集群小车在行走的过程中为了防止相互之间的碰撞,必须采用相应的防碰撞措施。在本设计中采用角度与距离来实现防碰撞控制,当小车1和2之间的距离L
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
'+
''+
''+
' '+
'