基于图像传感器的CPLD视觉系统设计
时间:04-27
来源:互联网
点击:
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语句来实现的。例如检测时钟信号cam_pclk的上升沿:always@(posedge cam_pclk)。但从上面的分析中可以看出,需要检测的信号沿有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。
④识别物体的形状。根据得到的每行跟踪点的长度,以及同一行中有几段符合要求的连续跟踪点,可以得知物体从摄像头角度看到的形状。特别是在检测平面上线条时,可以识别是否有分支,这一点是帧处理模式无法做到的。
需要指出的是,行处理模式虽然会得到关于跟踪目标的更多信息,但是每行处理的方式增大了处理器的负担,处理速度也没有帧处理快。
系统软件主要由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语句来实现的。例如检测时钟信号cam_pclk的上升沿:always@(posedge cam_pclk)。但从上面的分析中可以看出,需要检测的信号沿有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。
④识别物体的形状。根据得到的每行跟踪点的长度,以及同一行中有几段符合要求的连续跟踪点,可以得知物体从摄像头角度看到的形状。特别是在检测平面上线条时,可以识别是否有分支,这一点是帧处理模式无法做到的。
需要指出的是,行处理模式虽然会得到关于跟踪目标的更多信息,但是每行处理的方式增大了处理器的负担,处理速度也没有帧处理快。
嵌入式 ARM CPLD 传感器 DSP FPGA 总线 CMOS Altera Verilog Quartus C语言 比较器 机器人 单片机 相关文章:
- CAN总线技术在工业码垛机器人控制系统中的应用研究(06-27)
- 基于LabVIEW构建智能的移动机器人及无人驾驶车(10-27)
- 基于混沌电路设计阵列触觉传感器的采集系统(03-01)
- 复杂路线下机器人的三点三轮寻迹系统(01-17)
- NI LabVIEW设计简单机器人(03-09)
- 机器人技术基础系列:规划与导航(03-09)