基于FPGA平台构建汽车辅助驾驶系统算法
扫描二维码
随时随地手机看文章
辅助驾驶系统开发面临的挑战
汽车辅助驾驶(DA)系统工程师通常使用 PC 模型来创建复杂的处理算法,以便实现高度可靠的自适应巡航控制、车道偏离警告及行人检测等功能。开发人员高度重视PC算法模型,因为这种模型使他们能够尝试使用并快速评估不同的处理算法。不过,说到底,还是需要一款设计合理的电子硬件解决方案,来实现经济有效的大规模生产与部署。
验证可部署目标硬件与软件算法模型之间的算法性能一致性,对许多开发人员来说都是个问题。从浮点转到定点计算(如三角函数采用的不同方法)有时会导致参考软件算法和硬件实施模型之间出现明显差异。另外,输入图案资料集群(input stimulus)有着很大的不确定性,这使验证算法性能一致性工作变得更加复杂。
图1 LDW顶层方框图
对通常依赖远程感应装置(摄像头、雷达等)输入的DA系统来说,输入信息就是驾驶员在实际行车中可能遇到的各种路况和环境条件。工程师会发现,设计一款充分满足所有情况需求的处理算法极具挑战性,而且验证软件模型与电子硬件实施之间的算法性能一致性至关重要。
赛灵思推出的一款工具——System Generator for DSP,为算法开发人员和系统架构师从Simulink PC模型转向实时FPGA硬件实施技术提供了一种高效、直观的方法。这种具有高抽象层的设计工具在赛灵思和eVS工程师联合开展的设计项目中发挥了关键作用。该项目的目标就是利用System Generator for DSP推出一款适用于采用Xilinx FPGA的汽车车道偏离警告系统的图形处理算法,旨在提高整体性能,降低成本,并缩短开发时间。
车道偏离警告模型
车道偏离警告 (LDW) 系统的总体功能就是在车辆无意中偏离正在行驶的车道时提醒驾驶员。安装该系统的车辆前安放摄像头,可捕获到路况图形,以识别出车道边界标志。车道偏离警告系统持续跟踪车道标线以及车辆相对于车道标线的位置。如果车辆越过了车道标线,那么系统就会发出警告。
汽车产业和学术界普遍采用 MATLAB和Simulink 作为算法和系统级设计工具。尤其是Simulink 具有高抽象层,而且提供图形化输入,因此能帮助汽车算法工程师轻松快速地开发出复杂的 DSP 算法。
图1显示了 LDW 系统模型的顶层方框图,该模型就是用 Simulink 设计而成。标记为车道检测的绿色块包括图形预处理子系统,图2中将给出该子系统的各处理步骤。车道检测功能旨在提取出最有可能代表车道标线的路况图形。
为了提高边缘设备噪声检测的性能,处理流程 (pipeline) 第一步为2-D 5×5高斯噪声抑制 (GNR);第二步为直方图拓宽 (HST),开发人员可用该技术增强图形对比度,尽可能利用整个灰度范围;第三步则为水平/垂直梯度 (HVG),可在本地强度大幅变化情况下增强像素。开发人员可通过计算图形的 2-D 5×5梯度,来执行HVG。
System Generator工具概述
System Generator for DSP设计工具运行于Simulink中。它采用赛灵思面向Simulink的DSP模块集,并将自动调用赛灵思CORE Generator工具生成高度优化的DSP构建块网表,能通过 Simulink 库浏览器访问赛灵思DSP模块集。库浏览器可从标准的MATLAB工具栏中启动。构建DSP系统可用的DSP构建块有90多个,此外还包括FIR滤波器、FET、FEC内核、嵌入式处理内核、存储器、算术块、逻辑块以及按位块(bit-wise block)等。每个块都实现了周期精确和位精确,可就延迟、面积与速度性能优化、I/O端口数、量子化以及取整等对其逐一进行配置。
图2 LDW预处理功能链
下面,不妨来仔细探讨如何在 System Generator for DSP中构建图形处理算法模型,为了简单起见,这里选择GNR为例,这也是图形预处理流程的第一个模块。
System Generator实施GNR功能
强度值(即噪声)的随机变化通常会损坏图像质量。这种变化表现为高斯或正态分布,在不同传感器(即 CMOS 摄像头)中较为常见。线性平滑滤波器是消除高斯噪声的最佳方法,在许多情况下,它还可消除其他类型的噪声。为实现该功能,可通过使用连续窗口中的像素加权和来实施线性有限脉冲响应 (FIR) 滤波器。
在开始实施GNR System Generator模块之前,我们已在 MATLAB 中实现了其行为模型。而这只需两行代码即可实现。首先,需要计算内核,具体描述掩模尺寸(本例设为 5×5)和高斯的∑值。然后,可以通过卷积过滤输入图像。
n_mask = fspecial('gaussian', 5, 0.8);
out_img = conv2(in_img, n_mask, 'same');
此外,还可使用这种行为模型,并通过实际视频数据测试滤波器,进而调节掩模系数。还可以通过验证System Generator for DSP子系统的输出是否与MATLAB函数的输出相等(在规定的误差范围内,这是因为MATLAB是以浮点方式工作,而System Generator 则以固点算法方式工作)来验证硬件。
2-D GNR模块以流线方式(即逐行方式)对输入图像进行处理。图3显示了整个预处理链的System Generator顶级方框图以及高斯噪声抑制功能的顶级方框图。
图3 顶级预处理与高斯噪声抑制方框图
System Generator FPGA综合结果
开发人员在开发辅助驾驶系统时必须以适合大规模生产的成本水平进行设计。
达到一定处理性能所需的裸片资源将决定他们所需的FPGA器件的尺寸,进而决定其成本。
在实施车道偏离警告预处理器过程中,以XA Spartan-3A DSP 3400为目标。采用这种方法,并利用该模型来支持未来规划中的开发活动。但是,对预处理功能所占用资源的分析表明,该设计适合小得多的器件。
表1给出了XA Spartan-3A DSP 3400器件上GNR块的资源占用情况。计算时,假定在VGA分辨率下灰度输入图像的帧速率为30Hz(即输入数据速率为 9.2MS/s)。
从定时性能角度,GNR 设计以168.32 MHz 的时钟频率运行,可接受数据传输速率高达 18.72 MS/s的输入数据。
整个车道检测预处理子系统所需资源总情况如表2所示。
相应的定时性能分析表明,时钟频率为128.24MHz,最高输入数据传输速率为14.2MS/s。
根据上述所需资源情况分析,预处理功能甚至可用于XA Spartan-3E 500,其密度大约为XA Spartan-3A 3400A器件的1/7。
图4 LDW处理模型输出
结果
图4给出了一个LDW系统的性能图样,包括用于车道线备用物提取的基于 FPGA的图像预处理功能。可以看到,右边两个图片中的输入帧。左边的一对图像显示的是我们在FPGA中实施的预处理功能的性能。左上角的图片显示的则是阈值化后边缘检测函数的幅值。左下角图片是在边缘细化和车道线模式搜索处理后拍摄的。很明显,LDW预处理器能非常有效地摄取道路图景,并能将数据减少至基本车道线选取物。右上角和右下角图片中的黄线和红线分别表示对基于简单直线道路模型的车道标线的瞬间跟踪计算结果。