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

发布者:WhisperingWinds最新更新时间:2014-10-16 来源: 21ic关键字:S3C2410  辅助倒车  数字图像  Linux 手机看文章 扫描二维码
随时随地手机看文章

    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->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。[page]

式中,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上并满足汽车倒车实时测距的性能要求,克服了后试镜小,视野窄的缺点,消除了盲目倒车造成的事故隐患,大大提高了汽车倒车的安全效率。经实验调试,该辅助倒车系统能运行良好,操作方便,基本达到了设计要求。

关键字:S3C2410  辅助倒车  数字图像  Linux 引用地址:基于S3C2410的辅助倒车数字图像系统设计

上一篇:一种基于DAB接收机的MP3播放器设计方案
下一篇:研究SOC/IP的智能传感器设计

推荐阅读最新更新时间:2024-03-16 13:43

s3c2410的timer定时器的使用
2410共有5个定时器,其中timer4没有引脚输出,其余都可以用作pwm。 0、1共用一个预分频器 2、3、4共用一个预分频器 TCFG0 分别对应这两个预分频器,分频值不要忘了+1,因为分频值不能为0 TCFG1 分别对应这每个定时器自己的分频值 TCNTB0 定时器的计数值 TCMPB0 定时器的比较值 我理解的PWM,在一个固定的时间周期中,也就是TCNTB0这个值,一个周期开始后,TCNTB0开始减1计数,当减到和TCMPB0 相等时,TOUT0输出反转,当TCNTB0减到0时,TOUT0输出再次反转,一个新的计数周期开始。 TCNTO0 定时器监听寄存器 TCON0 控制寄存器
[单片机]
AT91SAM9260搭建LINUX操作系统
一、编写目的 本文档用于记录AT91SAM9260 LINUX学习的过程。使用以前开发过的一个9260核心板进行开发。该核心板参考ATMEL官方的AT91SAM9260-EK开发板设计,因此与官方开发板使用相同的BOOTLOADER、KERNEL。 可从www.linux4sam.org或ftp://www.at91.com/pub/下载AT91SAM9260-EK开发板的软件支持包进行开发。后期ATMEL对此开发板没有单独进行维护了,相关软件源码都整合到最新的AT91源码中了,通过make去选择相应开发板。 www.linux4sam.org有相应软件(bootstrap、uboot、内核)源码和
[单片机]
AT91SAM9260搭建<font color='red'>LINUX</font>操作系统
如何将lua移植到arm平台的linux内核
将脚本移植到内核是一件很酷的事情,lua已经被移植到NetBSD的内核中,也有一个叫lunatik的项目把lua移植到了linux内核,只可惜只支持x86,不支持arm,在网上搜索了下,没有找到现成的,于是自己研究了下,现将它分享出来。 移植到arm平台,主要是要重新实现setjmp和longjmp两个函数,网上相关的资料很少,最后终于找到一个klibc的项目,里面有setmp和longjmp的arm平台的实现,于是直接拿来用了,不用说,当看到脚本在内核中执行并打印出 hello,world 的时候,还是很exciting的。这里讲下使用的方法,具体的代码可以去下面的位置下载: https://github.com/
[单片机]
linux驱动之中断管理(for mini2440)
2440处理器的中断组织成两层:主中断 和 次中断,一共可以处理60个中断源。 主中断 和 次中断 经过中断构架的抽象之后,编写驱动程序时,我们不用考虑这两层中断,直接使用 request_irq 注册 60个中断源的某个,就可以直接使用中断了。 err = request_irq(button_irqs .irq, buttons_interrupt, NULL, button_irqs .name, (void *)&button_irqs ); set_irq_type(button_irqs .irq, IRQT_BOTHEDGE); 像上面这样使用中断。 下面是主中断0~31共3
[单片机]
联想:今年超过36款平台将提供Linux支持
近日在科索沃召开的 DebConf22 大会上,负责联想 Linux 相关计划的马克·皮尔逊(Mark Pearson)从个人角度出发,谈公司在过去几年所获得的升级,以及在 2022 年其平台对 Linux 的支持进度。 联想的 Linux 工程师在过去一年时间里面临着多项挑战,包括面板刷新问题、WiFi更改、英特尔网络驱动问题、AMD 功耗问题、NVIDIA 对能源认证的驱动问题,以及供应链短缺问题等等。不过,好消息是通过和 OEM 硬件供应商建立更紧密的合作关系从而增加对 Linux 的支持和兼容度。 近期围绕着新款联想系统的问题是由于禁用了第三方 UEFI CA 认证,因此无法默认启动到 Linux 系统。它是由Mi
[嵌入式]
汽车级Linux的标准参考平台采用瑞萨电子R-Car入门套件,可加速下一代联网汽车的IVI开发
瑞萨电子株式会社今日宣布,汽车级Linux(AGL)已将R-Car入门套件作为其一个软件开发的标准参考软件平台而采用。 AGL是一个合作的开源项目,将汽车制造商、供应商和技术公司聚集起来,为汽车应用构建基于Linux的开放软件平台,可以作为实际应用的行业标准。采用瑞萨R-Car入门工具包使软件开发人员能够轻松获取运行该项目开发的软件和硬件环境,快速、轻松地为下一代联网汽车开发车载信息娱乐(IVI)应用软件。下面就随汽车电子小编一起来了解一下相关内容吧。 R-Car入门套件支持最新的Unified Code Base 3.0 64位软件环境 汽车级Linux标准参考平台采用瑞萨电子R-Car入门套件 R-Car 入门套件
[汽车电子]
嵌入式Linux实时化技术
引言   Linux支持PowerPC、MIPS、ARM、DSP等多种嵌入式处理器,逐渐被用于多种关键性场合。其中实时多媒体处理、工业控制、汽车电子等特定应用对Linux提出了强实时性需求 。Linux提供了一些实时扩展,但需要进行实时性改造。本文针对嵌入式Linux实时化技术中的一些关键问题进行了讨论,如Linux内核时延,实时化主流技术方案及其评价等。 Linux内核时延   主流Linux虽然部分满足POSIX 1003.1b实时扩展标准,但还不完全是一个实时操作系统,主要表现为:   * 任务调度与内核抢占   2.6版本内核添加了许多抢占点,使进程执行在内核代码时也可被抢占。为支持内核代码可抢占,在2
[嵌入式]
Google输掉Linux服务器专利官司 牵连到Android 系统
    据FOSS Patents博客报道,Google刚刚输掉了一个关于他们Linux服务器内核的重要官司。Bedrock Computer Technologies将针对5,893,120专利被Google的服务器侵权获得500万美元的赔偿,他们的专利被描述为“一种使用hashing技术和外部串联以及随时移除过期数据的针对信息存储和恢复的方式和设备”。     尽管500万美元对Google来说是小菜一碟,但输掉的官司意味着Google必须修改目前他们服务器使用的Linux内核,甚至是修改Android操作系统。     法庭的判决结果是4月15日下达的,在昨天才公布出来。Bedrock Computer
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved