当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于Linux的嵌入式视觉系统设计方案

摘 要:结合当前嵌入式产品的发展方向,提出了一种基于ARM9 和Linux 的嵌入式视觉系统,阐述了其硬件架构与软件组成,通过配置和加载各种设备驱动程序,利用V4L 接口函数实现图像采集与显示。设计的嵌入式视觉系统体积小,成本低,可移植性强,通过实验波形和数据验证了其具有良好的图像采集和显示性能。

1 引言

视觉系统在现代工业生产自动化系统中应用非常广泛,主要集中于药品检测分装、印刷色彩检测、集成电路生产、精密电子产品装配、智能机器人识别导航等领域。随着Internet 的普及,现代社会已进入后PC 时代,嵌入式技术越来越与人们的生活紧密结合。

嵌入式视觉系统可通过USB 总线等将图像的获取、图像处理、显示设备集成于一体,成本相对较低,体积小巧,可以方便地安装在载体身上,故研究嵌入式的视觉系统具有一定的实际意义。

2 嵌入式视觉系统总体方案设计

嵌入式视觉系统由嵌入式硬件平台、操作系统、图像采集和图像显示四大部分组成,原理框图如下图1 所示。

 

 

图1 视觉系统原理框图

S3C2410X 芯片是韩国三星电子公司推出的一款基于ARM920T 内核的16/32 位RISC 嵌入式微处理器。该芯片集成了支持 TFT 的 LCD 控制器 、3 个通道的UART 等控制器和丰富的外部接口,MPLL 产生主时钟,能够使处理器工作频率最高达到203MHz,此工作频率能够使处理器轻松运行WinCE、Linux 等操作系统以及进行较为复杂的数据处理。该芯片可以满足低成本、高速度、低功耗的设计需求,非常适合作为嵌入式视觉系统的硬件平台。

Linux 操作系统同目前广泛应用的嵌入式操作系统如pSOS、VxWorks、winCE 相比,具有可移植性好、网络功能强、有优秀的GNU 编译工具支持等优点,更重要的是Linux 的开放源代码和免费的优点使得系统成本显著降低,因此选用Linux 操作系统作为软件开发平台。

3 嵌入式视觉系统硬件设计

3.1 图像采集

选购摄像头,优先考虑Linux 内核公开支持的摄像头芯片。由于目前Linux 操作系统使用的内核版本仅自带了ov511 芯片的摄像头驱动,因此,系统的图像采集模块由CMOS 图像传感器OV7620 和后端处理芯片OV511+组成。本系统在IIC 总线模式下通过设置OV7620 的功能寄存器,使OV7620 工作于连续扫描方式,RGB 原始数据16 位输出方式。OV7620 有4 个同步信号:VSYNC(垂直同步信号)、FODD(奇数场同步信号)、HSYNC(水平同步信号)和PCLK(像素同步信号)[3].当采用连续扫描方式时,只使用VSYNC 和HSYNC、PCLK 三个同步信号。通过设定内部寄存器,控制输出帧率在0.5 帧/s~30 帧/s 之间变化,窗口输出设置为:640×480,经过设定后的OV7620 输出时序如图2 所示:

 

 

图2 OV7620 输出时序图

3.2 图像传输

图像采集帧率与数据传输接口的数据传输速率之间的匹配是图像采集的一个重要问题。如果图像传感器的采集频率大于接口的最大可传输数据率,会引起缓冲区内的图像数据堵塞,造成数据混乱,出现无规律的乱码。因此,为了保证图像数据传输时的完整性和可靠性,接口数据的传输速率应满足图像传感器的采集速率。下面是对本采集系统的传输匹配计算。

已知:OV7620 的最大主时钟频率27MHz,最大数据率13.5MB/S.以OV7620 默认输出为例:输出格式VGA,分辨率640×480,帧率15 帧/秒,输出数据格式为16 位彩色数据。

一帧图像的数据量: (640 × 480 × 16)/8=614400B=0.586MB.

一秒钟的最大数据量:0.586×15=8.79MB/S.

因为图像采集中图像数据不是连接不断的采集,帧与帧之间有场消隐时间,行与行之间也有行消隐时间,所以13.5MB/S> 8.79MB/S.基于这个采集速率,要实现VGA 图像15 帧/秒的图像采集,嵌入式主机与USB 接口速度应与图像传感器的采集速度相匹配,至少不能小于9MB/S 的速度,否则会出现数据在传输通道中堵塞,致使数据出现混乱。系统采用USB1.0 作为传输接口,系统采集的图像数据为9MB/S,USB 传输速率大于9MB/S,故采集频率与传输频率匹配。

3.3 图像显示

液晶显示器LCD 以省电和显示大量信息等优点而成为现代仪器仪表用户界面的主要发展方向。本视觉系统采用三菱公司的8.4‘彩色TFT-LCD 作为图像显示模块, 液晶屏大小为640 × 480 , 型号:AA084VC03.

系统需要两种电源供电,分别是5V 和12V.5V电源用于核心板供电,USB 图像采集模块由核心板供电,12V 电源给液晶屏供电,这些电压由单独的电源模块提供。整个视觉系统的硬件结构图如下图3 所示。

 

 

图3 视觉系统硬件结构图。

4 嵌入式视觉系统软件设计

视觉系统软件组成主要包括操作系统、设备驱动程序,图像采集和图像显示程序。操作系统负责整个系统的管理,进程调度等,为用户使用开发板和外部设备提供最基本的接口程序,管理着开发板上的资源。

移植Linux2.6.14 内核作为嵌入式视觉系统的操作系统。设备驱动程序包括USB 摄像头驱动和LCD 液晶屏驱动,通过在Linux 系统中配置和加载完成。

4.1 图像采集程序

确定USB 摄像头被正常驱动后,下一步就是使用Video4Linux 提供的API 函数集来编写图像采集程序。

具体图像数据的捕获过程为:打开摄像头设备文件、查询和确认设备性能、设置图像的宽和高、设置色深、建立内存映射、读取图像数据、关闭设备。在上述过程中主要考虑如何读取图像数据,V4L 在内核include/linux/videodev.h 文件中定义了一些重要的数据结构,进行图像采集时,通过对这些数据结构的操作来获得图像数据。首先需要将显示设备的地址映射到系统地址上来,调用函数mmap()。该函数返回地址就是存放图像数据的地址, 每一帧图像都偏移固定的长度, 而摄像头取得图像会包含若干帧,这样通过周而复始的进行就可以将图像数据采集下来。具体过程和涉及到的函数如下:[!--empirenews.page--]

打开设备文件: int device = open (/dev/v4l/video0,O_RDWR);

内存映射:char* memoryMap = (char*)mmap (0,memoryBuffer.size, PROT_READ PROT_WRITE,MAP_SHARED, device, 0);

图像数据: memoryMap + memory Buffer.offsets[bufferIndex]

4.2 图像显示程序

本系统采用直接将数据写入FrameBuffer 中来显示图像。FrameBuffer 设备是运行在Linux 控制台上的一个优秀的图形接口,几乎支持所有硬件,提供了统一的API 接口,很好地实现了硬件无关性。FrameBuffer的设备节点是/dev/fb* , 在编译内核时选中FrameBuffer.LCD 显示程序流程图如图4 所示:

 

 

图4 图像显示程序流程图

应用程序编写完之后,用交叉编译环境对这个文件进行编译,没有错误后可生成cam 可执行文件。然后把cam 拷贝到根目录下的bin 文件夹,在主机windows 系统超级终端下输入命令:

#ln -s /dev/v4l/video0 /dev/video0

# cam 640 480 16 video0

就可以在屏幕上看到采集的图像了。设计的嵌入式视觉系统样机如图5 所示。

 

 

图5 嵌入式视觉系统样机。

5 视觉系统性能测试

S3C2410 控制板的I/O 口资源有限,因此,对图像采集的控制信号线采用普通I/O 口,而不是用中断I/O 口与其摄像头模块相连,因此只能用软件实时检测I/O 的电平状态,决定何时采集开始,何时读数据,何时结束。为了采集到图像数据并能分辨出来,必须能够跟踪控制信号的变化状态。

由于I/O 口的电平的变化频率远低于摄像头控制信号的变化频率,如果不对摄像头模块进行降频处理,这将导致I/O 口无法跟踪控制信号变化,即将无法判断帧、行、点何时开始与结束等状态信息。当摄像头的最高频率(点象素频率最高)降到1MHZ 左右,系统就能跟踪并完整的采集到图像信息,进一步处理之后完好的显示出来。图6 是示波器对帧、行、点信号及Y0 信号的波形图。

 

 

图6 信号波形图。

从上图可以看出,系统的控制信号非常完整和稳定,没有出现毛刺、变形等情况,给检测读取带来了好处。Y0 的波形图有些段是低电平,出现的位置不一样,是因为摄像头移动时,环境光发生了变化,引起整个Y 数据变化。

表1 采集到的实验数据(示波器采用x10 档)。

 

 

把示波器调整到x10 档,在不同情况下,多次采集YSYN 信号、HREF 信号、PCLK 信号的峰-峰值、平均值、周期、频率等数据,从Y0~Y7 中选择Y0信号进行观察。从数据中可以看出各信号的峰-峰值变化幅度不大,尤其是信号的频率比较稳定。Y0 数据信号很规整,那么其他数据信号如Y1~Y7 也是如此。

多次实验数据如下表1 所示。

测试硬件性能稳定之后,在Linux 系统下把图像采集、图像显示和保存图像命令写成一个脚本,放在文件系统etc/init.d 目录下。重新把文件系统下载到开发板里,当开机启动后,系统会自动执行图像采集、显示和保存。

6 结论

本文主要基于S3C2410 开发板和Linux 操作系统设计了嵌入式视觉系统。该视觉系统不仅可以较好地实现图像采集和显示,还可实现图像存储、网络获取图像等功能,并且可以在该基础上研究图像处理等算法。与基于PC 组合的视觉系统相比,结构简单,体积和重量减小,功耗低,可移植性强、功能扩展方便,成本显著降低,所以对这种嵌入式视觉系统研究具有相当重要的实用价值。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

为了满足日益增长的数据处理需求,铁威马NAS推出了全新的性能巅峰2024年旗舰之作F4-424 Pro,并搭载了最新的操作系统--TOS 6。这款高效办公神器的问世,无疑将为企业和专业人士带来前所未有的便捷与效率。

关键字: 存储 Linux 服务器

无论您是在研究如何使用 10GigE 还是寻求所需考虑事项的建议,本文均提供有实践,帮助确保单相机 10GigE 视觉系统设置顺利并拥有良好性能。 我们列出了主机系统配置、布线和相机设置的实践。

关键字: 视觉系统 CPU 存储器

双系统将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对双系统的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 双系统 Windows Linux

全新 FPGA 能为嵌入式视觉、医疗、工业互联、机器人与视频应用提供高数量 I/O、功率效率以及卓越的安全功能

关键字: FPGA 嵌入式视觉 机器人

安装Linux操作系统并不复杂,下面是一个大致的步骤指南,以帮助您完成安装。1. 下载Linux发行版:首先,您需要从Linux发行版官方网站下载最新的ISO镜像文件。

关键字: Linux 操作系统 ISO镜像

计算机是由一堆硬件组成的,为了有限的控制这些硬件资源,于是就有了操作系统的产生,操作系统是软件子系统的一部分,是硬件基础上的第一层软件。

关键字: Linux 操作系统 计算机

Linux操作系统是一套免费使用和自由传播的类Unix操作系统,通常被称为GNU/Linux。它是由林纳斯·托瓦兹在1991年首次发布的,并基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Lin...

关键字: Linux 操作系统

所谓进程间通信就是在不同进程之间传播或交换信息,它是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息;还可以让一个程序能够在同一时间里处理许多用户的需求。

关键字: Linux 进程通信 编程接口

串口通信作为一种最传统的通信方式,在工业自动化、通讯、控制等领域得到广泛使用。

关键字: Linux 串口通信 通讯

2023年11月16日: MikroElektronika(MIKROE) ,作为一家通过提供基于成熟标准的创新式硬软件产品来大幅缩短开发时间的嵌入式解决方案公司,今天宣布推出一款基于单线设备的软硬件开源解决方案Cli...

关键字: 嵌入式 Linux 操作系统
关闭
关闭