1 、引言
据统计,由于车后盲区所造成的交通事故在中国约占30%,美国20%。前两代倒车辅助产品,一种是倒车喇叭,一种是倒车雷达。前者只能提醒路人自行躲闪,而司机却一无所知,固定的障碍物更是无法探测,起到的作用微乎其微,后者虽能把固定的障碍物通过报警的形式告知司机,但司机还是无法判断障碍物的确切位置,更不能探测地坑或低矮障碍物。
目前,国内外的研究趋势是在倒车雷达的基础上采用数字图像处理技术,利用强大的嵌入式处理器,开发用于检测车后物距和监视车后图像的优点相结合的车载可视倒车装置。
因此本文提出一种基于S3C2410的辅助倒车系统设计,该系统不但使驾驶员可以在车内观察到汽车车尾的真实场景,而且可以通过系统所带的测距报警模块可以实时测距,并在车与障碍物过近时,对驾驶员实施语音报警,从而克服了后试镜小,视野窄的缺点,使倒车变得更加快速高效,增强倒车的安全性。
2、系统概述
系统以S3C2410为主控制器,主频最高可达266MHz,选用Linux2.6.14.1操作系统,系统总体设计可以被分为三个部分:
1) 图像数据实时显示模块设计;
2) 测距报警模块设计;
3) 人机交互界面设计。
图像数据实时显示模块主要是实现图像数据实时采集并显示在LCD显示器上,系统通过装在汽车尾部的摄像头采集车后实时图像,并将图像显示在终端 LCD上。测距报警模块以超声波测距电路来进行测距,当所测距离值超过系统设定的安全距离时实施语音报警,人机交互界面模块为系统提供了一个良好的人机交互界面,配合触摸屏,操作便利、简洁。其系统框架结构图如图1所示。
3、图像数据实时显示模块实现
图像数据实时显示模块采用Linux内核公开支持ov511芯片的网眼公司的v3000USB摄像头来采集图像,其实现分为两部分,Linux内核中摄像头驱动程序模块的加载和基于Qt的可视倒车应用程序设计。
3.1 USB驱动模块动态加载
在嵌入式Linux的内核定制和编译时,加入对Video4Linux模块及OV511设备的支持,通过Video4Linux模块提供的编程接口(API)从OV511设备中获取图像帧。如下配置Linux内核:Multimedia device-》《 M 》VideoforLinux; usb support-》《M》usb camera ov511,采用模块方式编译video4Linux驱动和OV511摄像头驱动,用命令insmod加载USB及OV511设备驱动模块。加载驱动后将 OV511摄像头插入USB接口,摄像头将被正确识别并生成 /dev/v4l/video设备。
3.2 可视倒车程序设计
倒车过程中驾驶员与软件交互操作较少,因此无需设计复杂的用户操作界面。程序的设计主要集中在摄像头图像的采集上。Linux下进行视频采集是通过Video4Linux驱动提供的接口函数和相关数据结构来完成,使用Video4Linux操作USB摄像头的流程如图2所示。
在程序设计中,与摄像头相关的操作和数据结构都被封装在VideoCapture类中。其成员函数通过Video4Linux提供的接口完成对摄像头的具体操作。VideoCapture类设计如下:
Class VideoCaPture
{ Public:
…
bool hasCamera() const
//判断是否有可用的摄像头
Void getCameralmage(Qlmage & img),
//获取摄像头的图像数据
QSize captureSize()const;//返回摄像使用的分辨率
Void setCaptureSize(QSizesize);//设置摄像使用的分辨率
int minimumFramePeriod() const;
Private:
…
struct video_mbuf mbuf;//进行内存映射的帧信息
…
void setupCamera(QSize size);//摄像头初始化及参数设置函数
void shut down();//关闭摄像头
};
VideoCapture类中的void setupCamera(QSize size)成员函数来初始化USB摄像头设备,根据系统LCD显示器的特点,主要参数设置为:图像色彩模式设置为 VIDEO_PALETTE_RGB565 格式;图像分辨率设置为640*480;图像位深设置为16位。每采集一帧数据后调用ioctl(fd,VIDIOCSYNC,&frame)函数等待采集结束,然后根据需要继续采集下一帧图像或关闭摄像头。
因为ov511不支持系统调用read的方式获取图像数据,所以使用内存映射输入/输出(MMIO)方式获取图像数,在使用MMIO方式获取图像数据时,图像的内存的信息保存video_mbuf memoryBuffer这个变量中。所以进行图像数据采集之前首先需要使用Video4Linux中的VIDIOCGMBUF接口获取MMIO所需信息,然后通过mmap函数将摄像头的图像缓冲区映射到虚拟内存中并使用Video4Linux中的VIDIOCMCAPTURE接口捕获图像。函数 voidgetCameraImage(QImage & img)用来完成对一帧图像的完整采集过程并通过定时器来实现的图像数据的连续采集和显示。每当定时器的时间到就触发一个定时器事件,在事件中调用 getCameraImage函数完成对图像的采集和显示。
4、测距报警模块实现
为提高系统的安全性和可靠性,增加测距报警功能,可视倒车功能启动后,采用超声波测距模块来实现对车后方的障碍物的实时测距并使用语音合成模块来实现障碍物距车身过近的语音报警。
4.1 超声波测距模块
超声波测距电路主要由超声波发射电路和接收电路组成,原理框图如图3所示。该模块单片机选用Freescale公司的MC68HC908QL4,该芯片可靠性高、抗干扰能力强。超声波探测车物之间的距离,并将数据传送至车内主处理器进行处理。
由于超声波测距只在汽车倒车时为驾驶员提供车后信息,而倒车时车速较慢,与声速相比可认为是静止的,因此采用渡越时间法来测距,即超声波发射器不断发射超声波,遇到障碍物后反射回来,超声波接受器接受到反射波信号并将其转变为电信号,测出从发射超声波到接受到反射波的时间差即可求出距离s。
式中,s为所测距离;c为超声波声速;t为发射超声波到接受反射波的时间差。
4.2 超声波测距软件设计
超声波测距软件主要包括测距及数据发送,其流程图如图4所示。
4.3 语音合成模块
本系统采用语音合成芯片XF-3011,与S3C2410通过串口进行通信,s3c2410与语音合成芯片XF-3011通信时,发送给XF- 3011的所有命令和数据都需要用“帧”方式进行封装后,再通过串口发送到芯片,帧的最大度为204字节(包括帧头标记字节)。具体的帧格式如表1所示。
表1 语音合成芯片通信传输数据帧格式
XF-3011收到控制命令后。当XF-3011收到一帧正确的命令帧后会立即反馈“0x41”。如果是语音合成命令,那么开始合成所接收的文本数据,所有文本合成完毕之后,向上位机反馈“0x4F”,然后进行语音播放。
4.4 语音合成模块流程图
当测距模块所测距离大小超过系统设定的安全距离时,主处理器发送控制命令给XF-3011,启动语音合成功能提醒驾驶员注意。
5、人机交互界面模块的实现
本系统采用Qtopia嵌入式桌面环境,用户不仅可以方便的管理系统资源和程序,而且能在帧缓冲机制基础上实现程序的屏幕显示,达到与用户的友好交互。
5.1 图形界面系统的建立
本系统使用的是基于Qt/Embedded的图形界面系统,Qt/Embedded的编译主要分为三个步骤:
① 编译Qt/X11,Qt/X11是运行在IBM兼容PC中标准Linux之上的,它主要为Qt/Embedded及其应用程序提供图形编译环境及仿真运行环境;
② 编译Qt/Embedded,Qt/Embedded为在嵌入式Linux平台上运行的图形界面系统及应用程序提供一系列的函数库;
③ 编译Qtopia,通过使用Qt/X11提供的编译工具以及Qt/Embedded提供的函数库,编译出最终基于嵌入式Linux平台的图形界面系统及该环境下的应用程序。
5.2 扩展可视倒车程序
Qtopia图形桌面环境为在qtopia平台上扩展应用程序提供了一个良好的机制,把应用程序发布到qtopia平台上,需要有三个文件:一个执行文件、一个启动器文件和一个图标文件,在这里可视倒车程序可执行文件就是这个执行文件取名为car,图标文件是一个.Png文件,我们可以自己制作一个car.png,启动器文件是一个.desktop文件,可以参考qtopia已有的.desktop为例,创建一个car.desktop,具体内容如下:
[Desktop Entry]
comment=A car program
Exec=car
Icon=car
Type=Application
Name=car
完成以上内容后,把这三个文件分别复制到qtopia相应的目录中。图标文件Car.png复制到qtopia目录下的pics目录,执行文件car复制到qtopia目录下的bin目录,启动器文件car.desktop复制到qtopia目录中apps/Applications 下,拷贝完成后,重新启动qtopia,点击其界面上出现可视倒车功能图标,可视倒车功能启动,结果显示如图6所示。
6、结论
本文介绍了一种基于S3C2410的辅助倒车系统设计。由于系统采用了高性能、低功耗的嵌入式微处理器s3c2410及可视倒车与测距报警功能的结合运用,系统摄像头实际捕捉到的视频信号能很够很好的显示在LCD上并满足汽车倒车实时测距的性能要求,克服了后试镜小,视野窄的缺点,消除了盲目倒车造成的事故隐患,大大提高了汽车倒车的安全效率。经实验调试,该辅助倒车系统能运行良好,操作方便,基本达到了设计要求。