APP下载

基于ARM架构的全景泊车系统设计*

2017-08-07臧春华李仲年

微处理机 2017年3期
关键词:鱼眼泊车全景

项 嵘,杨 刚,臧春华,李仲年

(南京航空航天大学电子信息工程学院,南京211106)

基于ARM架构的全景泊车系统设计*

项 嵘,杨 刚,臧春华,李仲年

(南京航空航天大学电子信息工程学院,南京211106)

以飞思卡尔IMX6 cortex a9 ARM平台为核心,构建嵌入式Linux操作系统。硬件上采用PCIE接口,连接4路鱼眼摄像头,编写与移植基于Linux下V4L2框架和PCIE框架的4路摄像头驱动。软件上采用开源计算机视觉库OpenCV对采集到的4路摄像头数据矫正、透视变换以及图像融合。基于Ubuntu操作系统利用交叉编译工具和CMAKE开发调试基于ARM-LINUX系统的应用,将经过变换后的全景图像在LCD屏幕上以30fps的频率显示。

ARM架构;Linux系统;OpenCV视觉库;PCIE协议;鱼眼摄像头;V4L2框架

1 引言

随着经济的发展,家庭汽车保有量近些年逐步提高,城市道路变得越发拥堵,泊车环境变得更加狭小。如何提高驾驶人员的驾驶体验,保障人身及财产安全,将汽车变得更加人性化智能化,是当今汽车工业界非常关心并且一直在解决的问题。在这个应用背景下,设计一款低成本高性能的全景泊车系统,为驾驶员在低速行驶过程及泊车过程中,提供基于俯视角度的全景图像,将汽车周围环境、障碍物显示出来,可以有效提高驾驶员在驾驶过程中的安全性。目前市面上的产品多以FPGA专用芯片的形式,将图像算法在硬件中实现。这种方案成本较高,可拓展性较弱,开发迭代周期较长[1]。

随着嵌入式系统的发展,ARM架构芯片在性能和功耗上都非常适合在汽车电子领域中使用。通过软件形式实现算法,将应用在通用平台和通用操作系统上实现,可以大大减少成本,增加系统的可扩展性。项目在前期已经完成了基于Ubuntu系统的原型算法验证。

系统着重于实际工程上的实现,将验证后的算法结合实际情况移植到飞思卡尔ARM平台上。硬件上完成了基于ARM-LINUX平台通过PCIE接口获得4路摄像头的数据,软件上完成OpenCV计算机视觉库在ARM平台上的移植,以及图像数据的矫正、透视变换和图像融合算法,初步实现了工程样机。

2 系统架构

系统硬件主要由Freescale IMX6 4核处理器核心板,LCD模块,4路鱼眼摄像头,以及4-in-1视频解码模块构成。IMX6核心板带有PCIE接口,运行频率达1.2GHz。视频解码模块采用Intersil公司的TW6865芯片,该芯片是一款高度集成的支持多路音视频采集的视频解码芯片,支持格式有NTSC/PAL/SECAM,将模拟信号转换成YCbCr信号。为了使整个系统可以360度无死角地采集到视频数据,采用鱼眼镜头。这是一种焦距为16mm或更短的并且视角接近或等于180°的镜头,这种摄影镜头的前镜片直径很短且呈抛物状向镜头前部凸出,与鱼的眼睛颇为相似[2-3]。图1为全景泊车系统示意图。

图1 全景泊车系统示意图

通过将软件进行分层,使得整个系统的可拓展性更强。基于IMX6移植Linux操作系统,编写基于Linux框架下的PCIE驱动程序,采集4路摄像头数据,将每个鱼眼摄像头抽象成Linux文件系统下的/dev/video*设备,应用程序就与底层硬件完全分离,硬件开发与软件开发就完全剥离开来。图2为系统框架。

图2 系统框架

开源Linux操作系统具备完整的设备驱动框架。TW6865解码芯片通过PCIE接口向外提供视频数据流,结合Linux下的PCIE框架驱动和V4L2视频输入子系统框架,移植驱动程序到IMX6平台上。应用程序通过标准的读取视频流方式获取到4路摄像头数据后,将4路图像数据由OpenCV进行算法处理,处理完毕后将图像在LCD屏幕上实时显示[4-5]。

3 PCIE总线与V4L2

3.1 PCIE总线

4路模拟摄像头接入TW6865视频解码芯片,TW6865将模拟信号转换成数字信号后通过PCIE接口传入IMX6平台。TW6865和IMX6都支持PCIE3.0,这样就充分解决了4路摄像头数据并发产生的大量数据。PCI-Express由Intel首先提出,并将它作为第三代I/O接口标准[6-7]。

第一代PCIE是2002年推出的,单通道带宽为2.5Gbps*2,因为PCIE收发通道独立,可以同时工作,所以带宽加倍,有效带宽为2.5Gbps*2*0.8=4Gbps=500MByte/s。PCIE通道中传输的数据经过了8B/10B编码,编码效率为80%。

第二代是2006年推出的,单通道带宽为5Gbps*2,有效带宽为 5Gbps*2*0.8=8Gbps=1GByte/s。

第三代是2008年推出的,单通道带宽为10Gbps*2,有效带宽为 10Gbps*2*0.8=16Gbps=2GByte/s。

每路摄像头都是720P图像分辨率,每秒30帧图像,因此一路摄像头每秒产生的数据是1280*720*2*30=55296000Byte=52.734MB,4 路摄像头产生的数据就是每秒211MB字节,可以分析得出PCIE总线完全能够满足要求。

随着PCIE总线应用日益广泛,Linux也早就支持PCIE协议。PCIE设备上有三种地址空间:PCIE的I/O空间、PCIE的存储空间和PCIE的配置空间。CPU可以访问PCIE设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCIE初始化代码使用。内核在启动时负责对所有PCIE设备进行初始化,配置好所有的PCIE设备,包括中断号以及I/O基址,并在文件/proc/pci中列出所有找到的PCIE设备,以及这些设备的参数和属性。图3为Linux下编写PCIE驱动的流程与框架[6-7]。

3.2 V4L2

Video4Linux2是Linux内核中关于视频设备的内核驱动框架,为上层访问底层的视频设备提供了统一的接口[6-7]。

图3 PCIE驱动框架

项目主要工作是基于Linux内核中有关V4L2与PCIE驱动的文档以及内核中开源的驱动程序,编写与移植TW6865芯片在Linux下的驱动程序。这款驱动首先是以PCIE协议与硬件进行通信交互,配置参数,然后将自身注册成4个linux下的视频设备,分别为/dev/video0,/dev/video1,/dev/video2,/dev/vid-eo3。这样上层的应用程序就可以基于Linux以标准的方式操作4路模拟摄像头设备。V4L2设备驱动框架如图4所示。

图4 V4L2设备驱动框架

V4L2支持三种访问方式,分别是READ模式;内存映射缓冲区(V4L2_MEMORY_MMAP)模式以及用户空间缓冲区(V4L2_MEMORY_USERPTR)模式。READ方式属于帧IO访问方式,每一帧都要通过IO操作,需要用户和内核之间数据拷贝;而后两种是流IO访问方式,不需要内存拷贝,访问速度更加快。其中内存映射缓冲区访问方式是比较常用的方式。项目实现了基于此种方式的图像采集驱动。

应用程序通过V4L2接口采集视频数据分为五个步骤:

首先,打开视频设备文件,进行视频采集的参数初始化,通过V4L2接口设置视频图像的采集窗口、采集的点阵大小和格式;

其次,申请若干视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取/处理视频数据;

第三,将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集;

第四,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据;

第五,停止视频采集。

对视频设备的操作本质上已经属于应用程序范畴了,但是在编写程序时仍然需要程序员对V4L2框架有所了解,为了更好地分层,使得上层应用开发无须关注硬件的任何细节,这里对V4L2的操作进行了类封装,编写了一个Video类,程序员只要传入需要打开的摄像头名字还有图像帧的宽度和高度,就可以获得摄像头数据了。

4 OpenCV图像算法

4.1 鱼眼摄像头参数标定

全景泊车系统在图像拼接时要求4幅图像包括车四周所有的区域且图像之间存在一定的共同区域,例如基于特征点匹配的方法要求图像的重叠区域大约50%,因此一般摄像头无法应用到这个系统中来。而鱼眼摄像头具有超广角特性,其成像视场角能达到180度,在汽车四周安装鱼眼摄像头,可以保证图像具有足够的视野和重叠区域[6-8]。但是,鱼眼摄像头存在严重的桶型畸变,在进行拼接前需要对其进行标定,得到线性特性图像。采用张正友标定法对鱼眼图像进行标定,一幅视图通过透视变换将三维空间中的点投影到图像平面[9]。投影公式如下:

其中(X,Y,Z)是世界坐标系中的一个具体点,(u,v)是世界坐标点投影在图像平面的坐标。A表示被称作鱼眼摄像机内参数矩阵,(cx,cy)是基准点(通常在图像的中心),fx,fy是以像素为单位的焦距。鱼眼摄像头的内部参数矩阵与环境无关可以被重复使用,所以在系统初始化时只需要进行一次变换。旋转平移矩阵被称作外参数矩阵,它用来描述相机相对于一个固定场景的运动,或者,物体围绕相机的刚性运动。也就是[R|t]将点(X,Y,Z)变换到某个坐标系,这个坐标系相对于摄像机来说是固定不变的。

因此基于OpenCV求解鱼眼相机的内部参数可以归纳为以下几步:

第一:根据式1编写基于OpenCV的鱼眼摄像头标定C++程序;

第二:将一幅7×8的棋盘图平整的放在鱼眼摄像头前方,保持棋盘图的有效区域能被鱼眼摄像头接收到。采集图像输入到OpenCV标定程序内;

第三:用寻找角点函数找出棋盘图中56个角点,将坐标保存到C++容器中;

第四:将棋盘图旋转一定角度和姿态,再次执行第二、三的操作,重复大约20次左右才能获得较好效果的相机参数值;

第五:将上述多次得到的角点坐标送入标定程序的参数计算模块,计算得到相机内外参数和畸变系数。

4.2 图像去畸变

在获得了4幅相机的图片和相机的内部参数以及畸变系数后,便可以将广角图像变换为具有透视特性的图像,这时图像只存在线性失真,有利于接下来的透视变换和固定参考点的图像配准。将式(1)化简可得:

图5 矫正之前的鱼眼图像

图6 矫正之后的鱼眼图像

图5为矫正之前的图像,图6为矫正之后的图像,矫正之前的图像存在明显的桶型畸变,而经过矫正后的图像棋盘格可以看出只存在线性透视失真,为下一步透视变换提供条件[10-12]。

4.3 透视变换原理

汽车四周的摄像头是按照一定角度安装的,一方面是为了获得汽车四周一定范围内的图像(2-3米),一方面是由于安装条件的限制。所以图像必然出现图6所示的线性失真,这种失真可以通过透视变换来处理。透视变换是将图像从所在平面线性地投影到另一个平面。也就是说将图6中标准的棋盘方格投影到新的俯视平面,使方格的大小和位置变为原来方格的大小和位置。

4.4 透视变换与图像拼接

传统的图像拼接是将多张含有重叠部分的图形经过一系列处理而得到拼接图像,过程包括特征点提取,特征点匹配,图像融合三个重要步骤[18]。但是这种方法过于复杂,对设备和环境要求较高,在光线较弱等不利条件下很容易出现找不到足够特征点的情况,这样也就无法进行拼接。

因此项目使用了一种基于参考点配准的方法。该方法原理是构建4幅相对位置固定的参考点群。汽车每个方向都有一张标准参考点图且各相对位置已知,设分别为4个方向上原始图像向最终合成图的变换矩阵。在系统初始化时通过角点查找[19],在图6中找到各棋盘图的对应角点,计算出对应实际棋盘图的变换矩阵。再将各图像代入到(4)式则可以恢复全景图像的场景。

基于参考点配准的图像拼接可以归纳为以下几步:

第一步:铺设好4合1标定板,标定板间的位置信息事先存入处理器,再将待标定汽车放入标定板中间位置,在汽车四周架设好鱼眼摄像头,使摄像头画面有效覆盖棋盘图;

第二步:前后左右各拍摄一幅图像,按鱼眼矫正程序矫正图像,得到有透视效果的图像;

第三步:用OpenCV进行角点查找,找到棋盘图的矩形角点(矩形角点在透视图中呈现出梯形形状),并存储起来,结合式(4)透视变换原理求出

图像透视变换效果图如图7所示,中间区域为汽车车体。

5 应用软件设计

应用软件利用已经封装好的视频操作类以及LCD操作类,就可以非常容易地操控硬件。将开源计算机视觉库OpenCV移植到ARM平台上,应用程序就可以利用其非常强大的图像处理功能。移植过程中需要对不需要的功能进行剪裁与优化从而达到精简系统的目的。例如OpenCV支持GTK图形环境,但是嵌入式Linux环境下没有GTK所以在移植的时候需要将这个功能剪裁。IMX6是一款4核心的ARM芯片,而Linux是支持多进程多线程的操作系统。目前多线程是常见的提高CPU利用率的手段,通过Linux系统提供的IO复用select操作结合多线程,可以将应用程序分为三个线程,主线程主要是初始化各种系统资源,加载硬件,然后创建摄像头采集线程和摄像头数据处理显示线程,最后等待用户控制命令。三线程并发可以大大提高CPU的利用率,整个应用程序的流程如图8所示。

图7 ARM板上经过OpenCV图像透视变换处理后的效果图

图8 应用软件流程图

6 结束语

针对当前道路交通中驾驶员遇到的驾车难泊车难问题,项目研究并改进了一种适用于嵌入式系统实现的全景泊车系统,结合具体硬件完成了一套功能完整的工程样机。针对目前市面上全景泊车系统中存在的一些不足,提出了基于ARM-LINUX架构,以PCIE高速通信总线为基础,配合OpenCV开源计算机视觉库中提供的算法,结合提出的参考点配准的图像拼接方法,完成了整个系统。

[1] 诸葛晓宇,刘恒.倒车辅助系统研究分析[J].轻型汽车技术,2012(4):26-29.ZhuGe Xiaoyu,LiuHeng.Research and Analysis of Auxiliary Parking[J].Light Vehicle Technology,2012(4):26-29.

[2] 陈烁,华冯桑,康迂福.倒车辅助系统的技术的发展[J].汽车与配件,2010(42):40-43.Chen Shuo,Hua Fengsang,Kang Yufu.Reversing the development of auxiliary systems technology[J].Automotive and accessories,2010(42):40-43.

[3] 高波.汽车全方位数字视频监视系统[J].科技信息,2008(23):34-35.Gao Bo.Full Digital Video Surveillance System[J].Science and Technology Information,2008(23):34-35.

[4] 白长清,陈沛.嵌入式终端基于Linux V4L2的图像采集系统[J].科技资讯,2012(2):22-23.Bai Changqing,Chen Pei.Image Acquisition System Based on Linux V4L2 for Embedded Terminal[J].Science and Technology Information,2012(2):22-23.

[5] 徐家,陈奇.基于V4L2的视频设备驱动开发 [J].计算机工程与设计,2010,31(16):3569-3572.Xu Jia,Chen Qi.Development of video device driver based on V4L2[J].Computer Engineering and Design,2010,31(16):3569-3572.

[6] 刘洋.基于PCIe的视频监控系统研究与实现 [D].成都:电子科技大学,2014.Liu Yang.Research and Implementation of Video Monitoring System based on Pcie[D].Chengdu:University of Electronic Science and Technology,2014.

[7] 周小波.嵌入式Linux下PCIE数据采集卡驱动开发[D].成都:电子科技大学,2013.Zhou Xiaobo.Driving Development of PCIe Data Acquisition Card Based on Embedded linux system[D].Chengdu:University of Electronic Science and Technology,2013.

[8] MILAN S,VACLAV H,ROGER B.图像处理、分析与机器视觉(第3版)[M].北京:清华大学出版社,2011.MILAN S,VACLAV H,ROGER B.Image Processing,Analysis and Machine Vision(3rd Edition)[M].Beijing:Tsinghua University Press,2011.

[9] 路明辉.奥迪Q7视觉驻车辅助系统[J].汽车电器,2009,48(1):23-26.Lu Minghui.Audi Q7 visual parking aid system[J].Automotive electrical appliances,2009,48(1):23-26.

[10] KOICHI K,MAKOTO S,YUKIO F.Image synthesis play method and apparatus for vehicle camera: US,US7139412B2[P],2006.

[11] 丁鑫.全景视觉泊车辅助系统研究[D].浙江:浙江大学,2010.Ding Xing.Research on Panoramic Visual Parking Assist System[D].Zhejiang:Zhejiang University,2010.

[12] 赵凯.全景可视化辅助泊车系统研究 [D].安徽:合肥工业大学,2011.Zhao Kai.Research on Panoramic Visualization Assisted Parking System[D].Anhui:Hefei University of Technology,2011.

[13] 张铖伟,王彪,徐贵力.摄像机标定方法研究[J].计算机技术与发展,2010,20(11):174-179.Zhang Chenwei,Wang Biao,Xu Guili.Research on Camera Calibration Method[J].Computer Technology and Development,2010,20(11):174-179.

[14] 陈铎.摄像机标定方法研究与实现[D].辽宁:东北大学,2008.Chen Duo.Research and Realization of Camera Calibration[D].Liaoning:Northeastern University,2008.

[15] 茂林,马颂德,李毅.计算机视觉中摄像机定标综述[J].自动化学报,2001,26(1):43-55.Mao Ling,Ma Songde,Li Yi.Survey of Camera Calibration in Computer Vision[J].Journal of Automation,2001,26(1):43-55.

[16] SCARAMUZZA D,MARTINELLI A and SIEGWART R.A flexible technique for accurate omnidirectional camera calibration and structure from motion [C].IEEE International Conference of Computer Vision Systems,2006:45-53.

[17] 李洪海,王敬东.摄像机标定技术研究 [J].光学仪器,2007,29(4):7-12.Li Honghai,Wang Jingdong.Research on Camera Calibration Technology[J].Optical Instruments,2007,29(4):7-12.

Design of Panoramic Parking System Based on ARM Architecture

Xiang Rong,Yang Gang,Zang Chunhua,Li Zhongnian
(College of Electronic and Information Engineering,Nanjing University of Aeronautics and Astronautics,Nanjing 211106,China)

The IMX6 cortexA9 ARM platform is used as the core to build the embedded Linux operating system.The hardware adopts PCIE interface to connect 4 fisheye camera,codes and transplants diver based on the V4L2 framework and PCIE framework of Linux.The open source computer vision library OpenCV is used to handle 4 channels camera data flow by the method of rectification,perspective transformation and image fusion, and cross compiler tool and CMAKE tool is used to develop and debug the application based on ARM-LINUX system by Ubuntu.Finally,the panoramic image,after the transformation on the LCD screen,is displayed at 30fps.

ARM architecture;Linux system;OpenCV vision library;PCIE procotol;Fisheye camera;V4L2 framework

10.3969/j.issn.1002-2279.2017.03.013

TP368.1

A

1002-2279-(2017)03-0060-06

南京航空航天大学研究生创新基地(实验室)开放基金(kfjj20150401)

项嵘(1993-),男,安徽省芜湖市人,硕士研究生,主研方向:电路与系统。

臧春华(1964-),男,副教授,主研方向:数字系统设计与计算机应用。

2016-10-25

猜你喜欢

鱼眼泊车全景
基于MATLAB的平行泊车路径规划
面向鱼眼图像的人群密度估计
基于CarSim的平行泊车仿真分析
戴上耳机,享受全景声 JVC EXOFIELD XP-EXT1
Arrive平台新增智能泊车推荐引擎 帮助找到最佳泊车地点
全景敞视主义与侦探小说中的“看”
微信扫一扫马上看视频鱼眼视频 小程序每天带你看最有意思的摄影视频
鱼眼明目鱼头补脑是真的吗?
从5.1到全景声就这么简单 FOCAL SIB EVO DOLBY ATMOS
全景搜索