依据图画传感器的CPLD视觉体系规划
现在,关于视觉体系的研讨已经成为热门,也有开宣布的体系可供参考。但这些体系大多是依据PC机的,因为算法和硬件结构的杂乱性而使其在小型嵌入式体系中的运用受到了,约束。上述体系将图画数据收集后,视觉处理算法是在PC机上完结的。跟着嵌入式微处理器技能的前进,32位ARM处理器体系具有很高的运算速度和很强的信号处理才能,能够作为视觉体系的处理器,替代PC机来完结简略的视觉处理算法。下面介绍一种依据ARM和CPLD的嵌入式视觉体系,希望能同享嵌入式视觉开发进程中的一些经历。
1 体系计划与原理
在嵌入式视觉的规划中,现在干流的有以下2种计划:
计划1 图画传感器+微处理器(ARM或DSP)+SRAM
计划2图画传感器+CPLD/FPGA+微处理器+SRAM
计划1体系结构紧凑,功耗低。在图画收集时,图画传感器输出的同步时序信号的辨认需求凭借ARM的中止,而中止处理时,微处理器需求完结程序跳转、保存上下文等作业,下降了图画收集的速度,合适对收集速度要求不高、功耗低的场合。
计划2凭借CPLD来辨认图画传感器的同步时序信号,不用经过微处理器的中止,因而体系的收集速度进步,但CPLD的介入会使体系的功耗进步。
为了归纳以上2种计划的优势,在硬件上选用“ARM+CPLD+图画传感器+SRAM”。该计划充分运用了CPLD的可编程性,经过软件编程来兼有计划1的优势,详细体现在以下方面:
①功耗的凹凸能够操控。关于功耗有严厉要求的场合,经过CPLD的可编程性将时序部分的接口与ARM的中止端口相连,仅仅是组合逻辑的总线相连,能够下降 CPLD的功耗然后到达计划1的效果;关于收集速度要求高而功耗要求不高的状况,能够充分发挥CPLD的优势,运用组合与时序逻辑来完结图画传感器输出同步信号的辨认,并将图画数据写入SRAM中。
②器材的挑选能够多样。在硬件规划上,一切总线均与CPLD相连;在软件规划上,不同的模块独自按功用封装。这样以CPLD为中心,体系的其他器材均可替换而无需对CPLD部分程序进行改动,有利于体系的功用晋级。作为本体系的一种运用,开发了视觉盯梢的程序,能够在方针和布景色彩比照激烈的状况下对物体进行盯梢。经过对CMOS摄像头收集来的数据进行实时处理,依据物体的色彩核算出被追寻物体的质心坐标。下面别离描绘体系各部分的功用。
2 体系硬件
2.1 硬件组成及衔接
体系的硬件首要有4部分:CMOS图画传感器OV6620、可编程器材CPLD、512 KB的SRAM和32位微处理器LPC2214。
OV6620是美国OmniVision公司出产的CMOS图画传感器,以其高功用、低功耗合适运用在嵌入式图画收集体系中,本体系图画数据的输入都是经过OV6620收集进来的;可编程器材CPLD选用Altera公司的EPM7128S,用Verilog硬件编程言语在QuartusII下编写程序;作为体系的数据缓冲,SRAM选用的是IS61LV5128,其随机拜访的特性为图画处理程序供给了便当;而LPC2214在PLL(锁相环)的支撑下最高能够运转在60 MHz的频率下,为图画的快速处理供给了硬件支撑。
0V6620集成在一个板卡上,有独立的17 MHz晶振。输出3个图画同步的时序信号:像素时钟PCLK、帧同步VSYNC和行同步HREF。一起,还能够经过8位或16位的数据总线输出RGB或YCrCb格局的图画数据。
在硬件规划上,有2个问题需求处理:
①图画收集的严厉时序同步;
②双CPU同享SRAM的总线裁定。
处理第一个问题的关键在于怎么实时、精确地读取OV6620的时序输出信号,据此将图画数据写入SRAM中。这儿选用的处理计划是用CPLD来完结时序信号的辨认以及图画数据的写入。CPLD在硬件上能够辨认信号的边缘,速度更快,经过Verilog言语编写Mealy状况机来完结图画数据的SRAM写入,愈加安稳。
关于双CPU同享SRAM,能够经过合理的衔接办法来处理。考虑到CPLD的可编程性,将OV6620的数据总线,LPC2214的地址、数据总线以及 SRAM的总线都衔接到CPLD上。经过编程来操控总线之间的衔接,只需在软件上确保总线的互斥性,即在同一时刻有且仅有一个操控器(CPLD或许 LPC2214)来操作SRAM的总线,就能够有用地防止总线抵触。这样,硬件上的裁定就能够经过软件来确保,该进程能够经过在CPLD中编写多路数据挑选器来完结。
各器材之间的衔接联系如图1所示。
由图1可见,微处理器的总线接在CPLD上,在对功耗有严厉要求的场合中,只需求在CPLD中,将OV6620的同步时序信号所对应的引脚与 LPC2214衔接在CPLD上的中止引脚相连,体系就能够转换成计划1的办法。对CPLD而言,引脚相连的仅仅是组合逻辑,下降了功耗。计划1的详细作业进程可见参考文献。而关于收集速度要求较高的场合,CPLD部分的程序源代码见本刊网站www.mesnet.com.cn——编者注。下面要点介绍这种状况下的运用。
2.2 作业进程
体系上电后,首要由LPC2214经过I2C总线装备摄像头的作业状况,需求装备的首要有输出图画的数据格局、速率、是否白平衡,以及自动增益是否翻开。装备完结后,LPC2214宣布图画收集的信号给CPLD,此刻CPlD操作SRAM的总线,并经过对OV6620输出时序的检测将图画数据写入 SRAM。当然,写入SRAM需求严厉契合SRAM的操作时序。一帧图画收集完结后,CPLD置位标志位来告诉LPC2214,假如LPC2214处于闲暇状况,则告诉CPLD将总线运用权切换至LPC2214,由LPC2214读取SRAM中的数据并进行图画处理。一起,发送信号给CPLD进行数据收集,图画的收集和处理将并行履行,进步了体系的作业功率。当再次收集完一帧数据后,重复上述进程。
2.3 硬件计划的特色
LPC2214 担任图画处理,CPLD担任图画数据的收集,很好地完结了功用上的封装。能够看到,CPLD将与硬件时序相关的程序封装,与外界的接口仅为标志状况线以及数据收集总线,极大当地便了体系的晋级而无需改动图画收集部分的硬件和软件。乃至替换为其他类型功用更为强壮的微处理器,只需依照上述标志状况线的约好来操作,体系依然能够正常作业,增强了体系的兼容性和可移植性。
3 体系软件
体系软件首要由ARM微处理器和CPLD两部分程序构成。ARM部分的代码运用C言语在ADSl.2环境下开发,而CPLD部分则运用Verilog硬件言语在QuartusII下开发。
3.1 CPLD部分程序规划
CPLD的程序首要分为2部分:组合逻辑和时序逻辑。组合逻辑首要完结总线裁定,程序并不依靠CPLD的大局时钟;时序逻辑完结对信号的检测,依据SRAM的操作时序将图画数据写入。
在总线裁定部分,需求留意的是:对CPLD而言,不同的时刻同一总线的数据流人方向是不同的。因而在Verilog中,需求声明总线为双向端口。详细的总线裁定程序如下:
对双向端口的总线操作总结如下:
①需求操控信号指明端口在某一时刻的方向;
②输出高阻即代表该双向端口是输入状况,此刻能够作为一般的输入端口来运用。
时序逻辑部分首要完结对图画传感器时序信号的辨认。如图2所示,CPLD需求首要检测VSYNc的下降沿,接着检测HREF信号的上升沿,然后在PCLK信号的上升沿将图画数据读入。
在Verilog言语中,对上升沿的检测是经过always句子来完结的。但从上面的剖析中能够看出,需求检测的信号沿有3个,能够都用always来检测,但在Verilog的语法中always句子是不能够嵌套的。为了处理这个问题,本体系中选用了如下办法:整个模块只要一个时序逻辑的always块,其他的信号沿检测用与al—ways等价的办法完结。例如关于cam_vsyn信号,设置2个暂时信号vsyn_0和vsyn_1,在每个时钟信号的上升沿,进行如下赋值:
这样,当每个时钟沿到来时都会更新vsyn_0和vsyn_1的值。当vsyn_O的值为O且vsyn_1的值为1时,以为是上升沿到来,同理也能够检测下降沿。需求留意的是:这种办法下,时钟信号的周期要远远小于被检测信号的高电平和低电平的持续时刻。假如信号脉冲过窄,在整个脉冲期间vsyn_O和 vsyn_l的值都没有更新,就会丢掉边缘的检测。
数据写入SRAM的进程是用Mealy状况机来完结的,程序具有通用性。若运用其他类型的SRAM,只需求依据器材的读写时序在相应的状况中修正凹凸电平。状况机使程序的结构明晰,调试便利。
3.2 ARM部分程序规划
现在,依据PC机的视觉处理算法有许多,但在依据微处理器的嵌入式视觉体系中,体系在硬件资源和处理速度上都无法与PC机比较。特别是在有实时性要求的状况下,需求编写合适嵌入式体系特色的快速有用的算法。下面编写的算法都是依据这个思维来编写的。
色彩盯梢:色彩盯梢的使命能够分解为色彩标定和色彩切割两个过程。色彩标定的使命是经过一个已知的色彩,找出其在色彩空间内与之对应的一个关闭区域。色彩切割则是经过比较器判别图画中像素点在色彩空间中是否落在标定的空间内,若在已标定的空间内,则以为其色彩与已标定的色彩相同,这样就能够依据标定的关闭区域辨认出图画中具有与标定色彩相同的物体。为了满意不同状况下运用的需求,色彩盯梢设置了2种形式。
(1)帧处理形式
该形式需求用户输入要盯梢的R、G、B三个色彩鸿沟,构成一个RGB盯梢的色彩空间。然后处理器从图画的左上角开端,次序逐行逐点的查看每一个像素。假如被查看的像素正好落入用户界说的色彩规模,就将这个像素符号为盯梢的;一起,需求记载被盯梢点中的最高点、最低点、最左点和最右点。假如检测到的像素方位在当时盯梢区域的符号框外,则需求增大符号框来包括该像素;一起,需求记载契合要求的像素的数量,当一帧图画扫描完结后,能够别离用契合要求的点的横纵坐标和除以契合要求的像素点数,得出被追寻物体的中心坐标。
这样在对一帧图画的一次扫描后,就能够得到被盯梢物体的中心坐标,一起处理器只需记载较少的大局变量,在时刻杂乱度和空间杂乱度上都合适嵌入式体系。
上述办法中,只要一个盯梢点就能够改动符号框,因而假如在盯梢进程中呈现噪声点,就会对符号框产生影响。去噪的思维是:假如一个像素点周围的其他点也落在用户输入的RGB规模内,那么这个点就被以为是契合要求的。
(2)行处理形式
与帧处理形式不同的是,行处理形式在扫描完一行数据后就记载下所内行中契合要求的接连点的最左端坐标和最右端坐标,无妨别离记为(XnL,YnL)和(XnR,YnR)。在一帧图画处理完结后,会得到图3所示的图形。
依据得到的成果,能够核算出更多关于盯梢物体的信息:
①核算区域面积。核算每条线段的长度l(n),然后将l(n)进行累积叠加,即可取得盯梢区域面积值S。
④辨认物体的形状。依据得到的每行盯梢点的长度,以及同一行中有几段契合要求的接连盯梢点,能够得知物体从摄像头视点看到的形状。特别是在检测平面上线条时,能够辨认是否有分支,这一点是帧处理形式无法做到的。
需求指出的是,行处理形式虽然会得到关于盯梢方针的更多信息,可是每行处理的办法增大了处理器的担负,处理速度也没有帧处理快。
4 进步体系的作业速率
现在,体系作业在帧处理形式下的作业速率是25帧/s,作为体系功用的验证,这儿选用的算法是色彩盯梢。假如仅做朴实的图画收集,而不做图画处理,那么体系能够到达OV6620的最高作业速率,即60帧/s。而在图画处理方面,不同的图画处理程序功率对体系的作业频率有较大的影响。下面给出在通用ARM处理器下进步程序功率的几个主张:
①内嵌(inline)可经过删去子函数调用的开支来进步功用。假如函数在其他模块中不被调用,一个好的主张是用staTIc标识函数;不然,编译器将在内嵌译码里把该函数编译成非内嵌的。
②在ARM体系中,函数调用进程中参数个数≤4时,经过R0~R3传递;参数个数>4时,经过压栈办法传递(需求额定的指令和慢速的存储器操作)。一般约束参数的个数,使它为4或更少。假如不可防止,则把常用的前4个参数放在R0~R3中。
第1种办法比较需求2条指令ADD和CMP,而第2种办法只需一条指令SUBS。
④ARM核不含除法硬件,除法一般用一个运转库函数来完结,运转需求许多个周期。一些除法操作在编译时作为特例来处理,例如除以2的操效果左移替代余数的操作符“%”,一般运用模算法。假如这个值的模不是2的n次幂,则将花费很多的时刻和代码空间防止这种状况的发作。详细办法是运用if()作状况查看。
比方,count的规模是0~59;
count=(count+1)%60;
用下面句子替代:
if(++count>=60) count=0;
⑤防止运用大的部分结构体或数组,能够考虑用malloc/free替代。
⑥防止运用递归。
本文介绍了一种依据ARM和CPLD的嵌入式视觉体系,能够完结色彩盯梢。在硬件规划上,图画收集和图画处理别离,更利于体系功用的晋级。而视觉处理算法更重视处理的功率和实时性,一起依据不同的需求有两种形式可供挑选。最终给出了进步程序功率的一些主张和办法。与依据PC机的视觉体系比较,该体系功耗低、体积小,合适运用于移动机器人等范畴。