多功能汽车行车记录仪的设计与实现

2019-12-30 01:38程望斌刘馨文梁娟刘硕卿张靖廖冰洁欧先锋
成都工业学院学报 2019年4期

程望斌 刘馨文 梁娟 刘硕卿 张靖 廖冰洁 欧先锋

摘要:对汽车行驶记录仪总体设计方案进行分析和论证,设计了以S3C6410为核心器件的视频采集和图像处理系统。重点介绍图像采集处理系统的功能模块和实现过程,分析系统软件的实现方法和过程,并对系统功能进行验证。结果表明:该设计可实现视频实时采集、记录与显示功能,具有功能多、清晰度高、效果好等优势。

关键词:S3C6410;Tiny6410;行驶记录仪;视频采集

中圖分类号:TP216.2文献标志码:A

文章编号:2095-5383(2019)04-0026-05

Design and Implementation of Multi-function Vehicle Traveling Recorder

CHENG Wangbin1, LIU Xinwen2, LIANG Juan1, LIU Shuoqing1,ZHANG Jing1, LIAO Bingjie1,OU Xianfeng1

(1.College of Information Science and Engineering, Hunan Institute of Science and Technology,  Yueyang 414006,China;

2. College of Information Engineering,

Xiangtan University,Xiangtan 411105,China)

Abstract:The vehicle traveling recorder records video information in the course of vehicle driving through camera, which is great significance to clarify the responsibility of traffic accidents, standardize driving behavior and reduce traffic violations.In this paper, the overall design scheme of the vehicle traveling recorder was analyzed and demonstrated, and video acquisition and image processing system based on S3C6410 was designed. The function module and implementation process of image acquisition and processing system were mainly introduced. The implementation method and process of system software were analyzed. And the system function was verified. The results show that the designed vehicle traveling recorder can achieve the real-time video acquisition, recording and display functions, and has the advantages of multiple functions, high definition and good effect.

Keywords:S3C6410; Tiny6410; driving recorder; video capture

随着车辆的增多,交通事故时有发生。造成交通事故的主要原因是司机的交通意识薄弱,交通管理制度和方式不够严格完善,司机的行为不正当等。为了明确交通事故责任、规范驾驶人驾驶行为和减少交通违章,人们设计了汽车行驶记录仪。然而目前市场上的记录仪普遍存在许多不足,不能满足人们的需求[1]。

本文对汽车行驶记录仪进行优化设计的基本思路:使用S3C6410为核心的Tiny6410开发板,选用USB摄像头进行视频采集,通过LCD显示屏进行视频显示,并将读取到的视频转化为AVI文件存储在SD卡中[2],再配合软件的编译与烧写,使汽车行驶记录仪具有摄像头模块数据读出、同步视频显示和同步存储到SD卡的功能,进而实现了实时监控[3]。

1 系统总体设计

以S3C6410为核心器件的信号采集和图像处理系统,主要包含核心控制器、电源模块、晶振模块、复位模块、摄像头模块、显示模块、存储模块等模块,系统总体设计方案如图1所示。

首先从USB摄像头中获取视频数据,从摄像头获取到图像格式转换成RGB格式送到LCD显示。再通过应用程序调用S3C6410的视频后,处理模块完成格式转换。当使用的是YUV摄像头时,需要经过压缩成MJPEG,通过应用程序调用S3C6410的多媒体模块完成视频压缩。最后视频压缩记录到AVI文件并储存到SD卡。

2 系统硬件设计

本设计采用S3C6410嵌入式微控制器为核心的Tiny6410开发板,由S3C6410本身系统基于ARM Tiny6410开发板开发,RESET电路、电源电路、CLK电路、内存电路、闪存电路组成[4]。本设计重点使用了MFC模块进行设计,将USB采集到的YUV格式摄像头数据编码成MJPEG数据流并转化成RGB送去屏幕显示。Tiny6410开发板,搭载了一个以太网接口,一路在线USB接口,四路USB主控制接口,一个LCD接口和一个SD卡存储接口。开发过程中能够直接使用网络接口开发程序上传到嵌入式单板中。

Tiny6410的核心板上USB接口和平常电脑上使用的是相同的,可以连接摄像头、键盘、鼠标、U盘等外部设备,因此在该设计中选用USB摄像头连接用来完成行车记录仪的摄像功能,USB Host的原理图如图2所示。

在Tiny6410板子上有3个LCD,分别为LCD1、LCD2以及LCD3。液晶显示器的1和2接口是0.5 mm间距的

40 Pin贴片座,3接口是2 mm间距的40 Pin插针座。本设计中选用4.3 in(10.922 cm)的液晶显示器,通过LCD1接口连接。核心板上带有两路安全数字输入输出接口,能够兼容一般的SD卡,为弹出式卡槽,它对应的是CON6接口,且应用广泛,最大能支持32 GB的SD卡。使同步显示视频数据的同时,还能将视频数据保存在SD卡当中,并能够插在电脑上进行视频的播放。SD卡槽在开发板上的分布图如图3所示。并且核心板引出3个串口:COM0、COM1、COM2,可以使用串口转换线与PC机实现数据交换。

3 系统软件设计

软件设计系统基于Linux系统完成Linux环境搭建、获取摄像头图片程序设计、luvcview开源程序的设计以及多媒体MFC程序设计等[5]。系统开始工作后,先依次进行USB摄像头、多媒体接口、AVI文件初始化,然后判断是否获取到了摄像头传输的一帧数据,如果获取到了数据,继续等待获取;若没有接收到数据,则把数据格式從YUV转换成MJPEG,再将MJPEG的一帧数据写入到文件中,至此便获得了一帧数据。由此反复进行采集便可形成一段视频,达到本设计的摄像要求,并储存到SD卡当中。该视频录制系统获取一帧数据的程序框架如图4所示。

3.1 Linux环境的搭建

因为嵌入式Linux系统的软件编译在PC机上进行,但是执行代码程序却在单板中,PC机和单板不是一个平台上进行的,因此需要交叉编译。宿主PC机上进行编译程序,生成可执行文件,把该执行文件通过网络下载烧写到嵌入式单板中。把目的程序烧写入FLASH获取其他存储介质,开机后运行这个程序。

本行车记录仪使用常用的arm-linux-gcc交叉编译器,一个完整的交叉编译链,需要在PC机上安装各种编译软件并设置好Linux开发环境,包括C/C++编译器、汇编器、连接器、嵌入式系统的标准C库和GDB代码调试器,以上的设置好了,就可以进行行车记录仪的应用程序的开发了。

3.1.1 u-boot编译与烧写

Bootloader类似于PC机的BIOS(基本输入输出系统),是嵌入式单板开机后执行的第一段程序,虽然整个加载程序很小,却是很重要的组成部分,不能缺少[6]。嵌入式Linux系统中,按下复位键或者重新上电后,程序开始用PC寄存器开始运行程序,而这个正是存放引导启动代码。这段代码的做作用是设备的初始化,包括设置时钟、关闭看门狗、初始化内存参数等,并建立内存映射、为运行操作系统提供一个合适的环境,为最终的Linux内核加载提供合适的环境[7]。

3.1.2 文件系统编译与烧写

嵌入式系统常常采用闪存作为存储设备,3个部分的代码都存放在闪存。因为闪存独有的特性,需要设计专门的嵌入式FS系统。嵌入式系统实现层次结构文件操作。对于应用程序开发人员来说,打开文件的方式是不变的,使用统一的文件IO函数读写文件。文件系统是Linux操作系统的一部分,作用是对文件进行区块管理,文件系统的作用是对逻辑文件的操作读写复制等操作,方便应用程序操作文件和目录。

3.2 获取摄像头图像程序设计

V4L2是Video for Linux的第二个版本的简称,是前一个版本的改进版。Video for Linux Two已经是操作系统的标准代码,作用是提供API接口,这些接口的功能是采集视频、设置参数、获取音频数据等,通过这套接口可以完成多媒体的功能开发,在多媒体应用中十分广泛,比如视频监控领域、远程视频领域等。

Linux操作系统中的所有操作都是通过文件完成,对外设操作是通过设备文件完成的,就像访问普通文件一样访问设备文件。当前系统中,把USB摄像头插入主板后,Linux把此设备识别成/dev/video2文件,之后就是通过这个文件,并通过V4L2 API完成摄像头的数据交互。标准的V4L2支持两种方式获取图像数据:内存共享方式,通过mmap把内核的内存映射到应用程序空间;另外一种是直接读写设备。使用哪一种方式,需要知道驱动的支持的方式。另外在videodev.h文件中定义了API操作相关的数据结构,获取摄像头数据的过程中,通过这些结构获取最终的图像数据。这种对API支持的配置在编译Linux内核期间就可以配置到系统中,默认是打开的,该API接口在Linux2.5之后版本就已出现。获取摄像头图像数据的流程,运行的过程与一般的程序逻辑一样。但是实际工程中,还需要增加对摄像头数据进行处理,比如视频压缩等,否则,视频帧数据非常庞大,板子上的存储空间与传输带宽将不能满足要求。

3.3 Luvcview开源程序设计

Luvcview是一个公共社区开发维护的开源的代码,用于摄像头的功能测试,只要USB摄像头符合UVC驱动规范,就可以使用luvcview获取摄像头数据,因此需要先核对使用的摄像头是否在内核UVC的支持列表中。对luvcview开源代码进行定制化的开发修改,能够使得这套代码可以运行在TINY6410板子上跑程序,并结合TINY6410特有的MFC多媒体框架,使用硬件模块完成空间色彩转换与视频图像缩放效果,也就是视频的后处理功能。修改代码的luvcview适配到Linux平台或者S3C6410嵌入式处理器中,因此开源的代码有两个makefile文件,一个针对嵌入式系统版本,另外一个针对Linux版本,嵌入式系统版本中,有软硬件实现YUV到RGB转换与软件实现YUV到RGB颜色空间的转换,默认的是使用硬件完成YUV到RGB颜色转换并通过PP模块完成视频帧的放大与缩小。

3.4 多媒体MFC程序设计

多媒体MFC程序设计主要使用6410发行的编码动态库,在这些库的函数中调用Linux API系统层函数如读写控制函数。MFC编解码过程中,该微处理器能够进行两种方式的输入处理,线性模式与环状模式。在线性模式下,上层的程序使用一帧实际的大小填入缓存。该模式支持MPEG4/H.263、H.264、VC-1解码。不同的是环状模式,缓存被分割成几个固定大小的部分来填充编码的数据。在编码任务中,环状模式被用于输入过程;线性模式被用于输出过程。

4 主要系统模块设计

4.1 开发系统设计

本次视频行车记录仪设计的开发环境为Ubnutu系统,在Windows10下安装虚拟机,在虚拟机中安装Ubuntu系统,能够屏蔽底层差异,避免不用硬件带来的麻烦,并且可以方便的使用串口或者USB接口,快速的开始实验。通过Ubuntu上创建交叉编译环境。VMware虚拟机中的Ubuntu系统界面简洁、编写代码方便,便于Tiny6410的程序开发。

4.2 摄像头系统设计

摄像头主要由镜头、图像感应阵列、放大器、AGC、A/D、同步信号发生器D/A转换电路等子模块组成。摄像头的主要图像传感部件是CMOS或者CCD感光阵列,都是理想的摄像元件。

摄像头的工作原理为:被拍摄物体反射亮度,光线进入镜头,经过镜头聚焦到CMOS或者CCD阵列上,CCD或者CMOS扫描产生表示一幅画面的电信号,经过电路放大、AGC自动增益调整,由ISP图像处理器转换成数字信号。同步信号发生器主要产生同步时钟信号(由晶体振荡电路来完成),即产生垂直和水平的掃描驱动信号,到图像处理IC。输出端子输出一个标准的复合视频信号。感光示意图如图5所示。

4.3 颜色空间与格式转换

描述颜色的方式有很多种,RGB三原色、YUV亮度色度或者极坐标方式,在不同的使用环境中,可能会有不同的色彩表达和色彩空间变换,通过软件或者硬件完成转换的需求。根据不同的划分定义,于是有了不同的颜色模型。

对于摄像头传感器,最常使用的色彩空间主要是红绿蓝与YUV这两种,现实使用中,RGB又分成如RGB888或者RGB565等。YUV可以分成YUV444,YUV422,YUV420等子类型。RGB就是把3种原色光叠加在一起来说明颜色,而YUV则按照亮度和色度差描述一个颜色点。由于YUV在很大程度上是取决于硬件,RGB和YUV变换公式有好几种,但是差距不大。变换公式为:

Y=0.30R+0.59G+0.11B (1)

U=0.493(B-Y)=-0.15R-0.29G+0.44B(2)

V=0.887(R-Y)=0.62R-0.52G-0.10B (3)

其中:Y为灰阶度;U和V为色度;R、G、B分别为红、绿、蓝3个颜色通道。公式表达式的差距主要体现在摄像头传感器上,有一些摄像头传感器能够设置YUV的输出的一定范围。需要明白关键的一点是,UV信号是蓝色差信号与红色差信号,从而在一定程度上代表的是蓝色和红色,基于这一点,可以更好地理解颜色空间变换。

5 系统测试与功能实现

5.1 测试说明

系统误差包括操作误差,外在环境误差,和仪器误差等多个方面。文中在TINY6410开发平台基础上借助于虚拟机完成安装Ubuntu系统,实现了基于USB摄像头完成视频实时显示与记录到SD卡的视频系统。当启动时出现如图6所示的企鹅图像代表系统正常启动。通过多次试验测试,逐步提高系统稳定性。

5.2 测试流程

实验测试中,视频采集运行稳定,显示的图像稳定。采用了MPEG-4通过硬件编码方式,证实了系统的可行性较高。录制在SD卡中的视频能放在Windows系统中播放,因此,实现了视频录制的功能,并反映了记录下车辆行驶过程中的数据。

6 小结

本设计使用的是S3C6410为核心的Tiny6410开发板、高清摄像头以及高速SD卡,配合软件的编译与烧写,使本汽车行驶记录仪具有摄像头模块数据读出、同步视频显示和同步存储到SD卡的功能,并且具有读取稳定、高清显示、存储高速和实用性强等特点[8]。在核心器件的选择中主要考虑的是三星公司的S3C2440和S3C6410嵌入式处理器,通过查阅互联网上的资料,对比发现S3C6410的多媒体处理能力比S3C2440要更加强大,拓展端口也更加丰富[9]。

参考文献:

[1]李东博. 汽车行驶记录的研究[J].信息技术, 2016(1):93-94.

[2]董琳. 基于S3C6410处理器U-boot SD卡启动方式的研究与实现[J]. 电子制作, 2015(19):96-97.

[3]孙春霞,孙江正.行驶记录仪关键技术研究与实现[J].自动化与仪器仪表, 2016(11): 243-246.

[4]黄相平,余水宝,夏灿.基于S3C6410平台的嵌入式Linux系统LCD驱动模块[J]. 微型机与应用, 2013, 32(13):9-12, 16.

[5]赵兴海,衡友跃.基于S3C2440平台的Linux内核引导的过程实现[J]. 淮北职业技术学院学报, 2016, 15(4):134-135, 138.

[6]LENG J W , DAI S . Research and design of embedded crane video transfer system[J]. Applied Mechanics and Materials, 2014(496-500):1609-1612.

[7]YAN Z C , FEN P X . Design and applications of embedded system in video surveillance[J]. Applied Mechanics and Materials, 2014(596):536-539.

[8]赵荣阳.基于嵌入式技术的多功能汽车行驶记录仪设计[J]. 钦州学院学报, 2013, 28(11): 6-9.

[9]张鑫,刘树昌,庄仲,等.嵌入式汽车行驶记录仪的设计[J]. 测试技术学报, 2014, 28(5):400-404.

收稿日期:2019-05-30

基金项目:国家自然科学基金项目(61473118);

湖南省大学生创新创业训练计划项目(湘教通〔2019〕219号);湖南省科技计划项目(2016TP1021)

第一作者简介:程望斌(1979—),男,副教授,硕士,研究方向:光电子技术;竞赛指导和人才培养。

通信作者简介:刘馨文(1997—),男,在读硕士研究生,研究方向:机器视觉,电子邮箱:386131592@qq.com。