基于颜色识别的智能小车集群控制

发布者:EnigmaticCharm最新更新时间:2015-03-10 来源: 21ic关键字:集群控制  颜色识别  Cortex—A9  STM32  nRF 手机看文章 扫描二维码
随时随地手机看文章

引言

随着嵌入式技术的发展,基于小型便携式识别和集群控制技术较传统计算机技术具有更广阔的应用。基于摄像头的颜色识别技术较一般传感器定位和采集技术具有稳定性和可移动等方面的优势,在生产车间自动物料配送车的循迹以及基于颜色的物料提取中具有广泛的应用前景。而集群控制作为一种新生的控制方式,在大范围、多控制对象的控制方面具有举足轻重的作用,如太阳能发电板的集群控制、风力发电机的集群控制以及大型舞台剧中的灯光集群控制。而本文中的小车集群控制是将颜色识别与集群控制的较好方式。小车位置及方向信息通过摄像头的颜色识别技术获取,处理之后传送到STM32进行校验,并通过无线模块发送出去,驱动多辆小车按指定的路线行走,从而实现集群控制。

1 系统整体构架

本文中的设计系统由智能小车和摄像头控制模块两部分组成,为满足集群控制的需要选用3辆小车,小车由两轮驱动,便于在行走过程中调节方向。每辆小车搭载NRF无线模块和测速模块,可以实现小车的旋转角度测量以及速度调整。跑道的正上方是USB摄像头,通过5m长的延长线与地面的主控板相连接。为满足数据的实时处理及多任务控制的需要,主控板采用Tiny2440四核Cortex—A9核处理器,搭载Linux系统,通过QT的设计使得操作界面美观易操作。为减轻处理器内核的负担以及确保传送指令的准确性,指令的校验工作由外围的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。这样只有出现数据头的字节,其后面的内容才被小车识别为有用的数据,使得小车正确运转。数据尾的出现代表对小车的控制结束。

数据内容为发送控制指令的具体形式。小车有以下几个命令。

基于颜色识别的智能小车集群控制
基于颜色识别的智能小车集群控制

2.5 小车搭载色盘颜色的确定

由于USB摄像头采集到的颜色数据为YUV格式,需要将其转换成RGB格式来显示。所以在确定小车搭载定位色盘的颜色时需要选定特殊的颜色,以使得采集到的数据容易被分辨。本设计在原色选择时采用Y、U、V为三维坐标轴使得色盘的YUV分量之间存在一定差距,再通过公式将其转换成RGB基色值。[page]

3 软件实现

3.1 主控软件系统

软件平台为Linux Kemel 3.5、Qtopia-2.2.0;交叉编译环境为嵌入式QT、arm-linux-gcc;开发语言为C++。

3.2 颜色识别算法

此模块在一个线程中,先读取配置文件,得到各个颜色的Y、U、V平均值,然后从摄像头取得一帧的图像,按行扫描每个像素,根据Y、U、V平均值确定Y、U、V的阀值对像素的Y、U、V值进行匹配,从而确定像素的颜色。程序把各个颜色的像素点分类,同一颜色的像素点坐标放在一起,然后算出同一颜色像素点的中心坐标。然后通过表1对应到小车的坐标。

基于颜色识别的智能小车集群控制

得到3辆小车的中心点坐标和方向点坐标后,存放在内存中,供其他模块调用。摄像头采集数据流程图如图5所示。

基于颜色识别的智能小车集群控制

3.3 集群防碰撞控制算法

集群小车在行走的过程中为了防止相互之间的碰撞,必须采用相应的防碰撞措施。在本设计中采用角度与距离来实现防碰撞控制,当小车1和2之间的距离L

基于颜色识别的智能小车集群控制
小车在防碰撞过程中若出现全部车辆停止(即进入锁死状态),则启动应急预案,使边缘小车在原地向锁死反方向转动相应的角度,并行走一段距离,以解除锁死状态。

3.4 小车控制软件流程图

小车控制软件流程图如图7所示。

基于颜色识别的智能小车集群控制

4 整体性能测试

为防止因环境颜色和光照的影响,测试场地为一块2 m×3 m的长方形布料,刚好是摄像头的拍摄范围。

①小车测试。通过直线行驶指令,将小车放在测试场地中,使小车直线行驶一段距离。小车将获得两个不同的PWM信号占空比,作为下一次启动时的配置参数。

②小车顶部色盘像素的采集。为消除因光照强度所引起的颜色误差,需先将与小车顶部色盘相同颜色的纸片放在场地中间,摄像头将采集这一坐标的像素值作为参考值,用于实际测试过程中的颜色识别与定位。

③为小车设置起跑路线图。通过LCD屏,在上面为小车指定运动的路线图,其后小车将按照设定的轨迹行走。行驶过程中小车很好地实现了集群之间防碰撞的功能。

小车路线图如图8所示。

基于颜色识别的智能小车集群控制

结语

基于颜色识别的集群控制系统,可以通过颜色的采集来实现定位,是自动控制和人工智能方面的一种可行方式,具有运行稳定、使用方便的优点。而多控制对象的集群控制理论的研究,使得多目标协同工作成为可能。基于此模式的智能控制设备具有广阔的应用前景。

关键字:集群控制  颜色识别  Cortex—A9  STM32  nRF 引用地址:基于颜色识别的智能小车集群控制

上一篇:基于嵌入式LINUX的智能车载终端系统的设计
下一篇:基于ARM的智能避障小车设计

推荐阅读最新更新时间:2024-03-16 13:54

STM32编译配置的相关错误
通常是USE_STDPERIPH_DRIVER 写错了导致的; 通常是STM32F10X_HD拼写错误导致的; 正确的写法应该是 全部为大写!!!大写!!!大写!!!
[单片机]
<font color='red'>STM32</font>编译配置的相关错误
基于ATmega16和nRF905的无线射频收发系统设计
  0 引言   随着当今电子科技的飞速发展,各种智能化控制系统(比如智能化小区内部的无线抄表系统、门禁系统、防盗报警系统和安全防火系统等)、工业数据采集系统、水文气象控制系统、机器人控制系统、数字图像传输系统等等,都已经离不开数据信息的电子传输。可以说,数据信息传输系统是各种智能化控制系统的重要组成部分。而数据传送大部分采用有线数据传送方式,如并行传送、串行传送和CAN总线等等。在有线数据传输方式当中。数据的传输载体是双绞线、同轴电缆或光纤。其实,数据传输还可以用无线传输方式,即通过空气或真空实现数据传送。相比于传统的有线数据传输方式,无线传输方式可以不考虑传输线缆的安装问题,从而节省大量线缆,降低施工难度和系统成本,因而是一
[网络通信]
IAR +STM32实现printf()输出到串口
  搜索互联网上,关于此类问题的解决文章资料也比较丰富,不过按照其思路还是遇到了不少问题。   首先,贴代码,大部分代码都是类似的方案,重写putchar或者fputc函数。 #ifdef USE_IAR #define PUTCHAR_PROTOTYPE int putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE *f) #endif PUTCHAR_PROTOTYPE{ HAL_UART_Transmit(&huart1, (char *)(&(ch)), 1, 10); return ch
[单片机]
STM32如何高效接收串口数据
硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 DMA,直接内存存取,可以用它的双手释放CPU的灵魂,所以,本文通过USART3进行串口收发,接受使用DMA的方式,无需CPU进行干预,当接受完成之后,数据可以直接从内存的缓冲区读取,从而减少了CPU的压力。 具体的代码实现如下: usart_driver.h 封装了接口,数据接收回调函数类型,基本数据结构等; usart_driver.c 函数原型实现,中断服务函数实现等; 拷贝这两个文件即可,可以根据目录下的参考用例,进行初始化。 头文件usart_driver.h已经声明了外部函数可能用到的接口; USART3_DR的
[单片机]
<font color='red'>STM32</font>如何高效接收串口数据
stm32中一些常用基本库函数以及串口配置步骤
常用基本库函数: void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)//使能端口时钟 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)//初始化端口,选择端口号,设定参数 typedef struct { uint16_t GPIO_Pin; //引脚号 GPIOSpeed_TypeDef GPIO_Speed; //速度 GPIOMode_TypeDef GPIO_
[单片机]
stm32利用oled显示屏与按键进行PID参数调节实现人机交互
上一个学期在学校做四轮车利用PID实现直线走,在调试过程中,我之前是每改一个参数就下载程序进控制板进行调试,观察车是否偏移来确定pid参数,但是后来我发现这样的效率很慢,经别人提醒后,我自己做了一个小小的人机交互界面,来显示pid的参数以及对pid参数进行调整。 以下是显示效果: 接着我在附上主要代码: // 功能描述 : OLED 7针SPI接口演示例程(STM32F103系列) // 说明: // ---------------------------------------------------------------- // GND 电源地 // VCC 3.
[单片机]
<font color='red'>stm32</font>利用oled显示屏与按键进行PID参数调节实现人机交互
基于STM32从零写操作系统系列---点亮LED灯
目的: 用汇编语言编写一个点亮LED的程序,用于验证前面章节中,下载.bin文件到芯片后,程序能否运行。 要求: 1.芯片手册 2.开发板上有LED模块 实验步骤: 1.新建文件夹led_proj,复制bootloader_proj(参照本系列第3篇文章)文件夹中的所有文件到led_proj文件夹。 2.新建文件led.s,编写代码。代码内容主要是使能GPIO口的时钟,配置GPIO口,向GPIO口的输出数据寄存器写数据。 3.修改main.s文件,添加一条跳转指令,修改死循环代码。 4.修改makefile文件,在OBJ变量中添加led.o,如图: 5..保存所有修改,在命令行中,进入led_proj
[单片机]
基于<font color='red'>STM32</font>从零写操作系统系列---点亮LED灯
STM32通用定时器(时钟选择,模式选择)
STM32的定时器功能很强大,学习起来也很费劲儿. 其实手册讲的还是挺全面的,只是无奈TIMER的功能太复杂,所以显得手册很难懂,我就是通过这样看手册:while(!SUCCESS){看手册 }才搞明白的!所以接下来我以手册的顺序为主线,增加一些自己的理解,并通过11个例程对TIMER做个剖析。实验环境是STM103V100的实验板,MDK3.2 +Library2.东西都不怎么新,凑合用 TIMER主要是由三部分组成: 1、 时基单元。 2、 输入捕获。 3、 输出比较。 还有两种模式控制功能:从模式控制和主模式控制。 一、 框图 让我们看下
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved