微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 汽车电子 > 基于S3C2410的辅助倒车数字图象系统设计

基于S3C2410的辅助倒车数字图象系统设计

时间:01-24 来源:仪器仪表学报 点击:

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)用来完成对一帧图像的完整采集过程并通过定时器来实现的图像数据的连续采集和显示。每当定时器的时间到就触发一个定时器事件,在事件中

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top