去年十月份Toyota Lexus 的2007 年最新车款Lexus LS 460 和Lexus LS 460L 在美国市场上市,两部车子都装置了Toyota 最新发展的”高级停车导引系统(Advanced Parking Guidance System)”,这个系统是使用一个向后的摄像头和停车声纳传感器侦测周边状况,驾驶人靠在一个停车位旁边,按个按钮,踩煞车以控制速度,系统便会自动接手控制电动动力方向盘,完成路边停车的动作。除此之外,在目前最常应用于工厂自动化系统之中的自动导引车辆(Automatic Guided Vehicle, AGV)系统,可按照程序所下的命令及导引路线进行、停止、转弯,并能和搬运系统作连结;AGV是一种物料搬运设备,能在固定位置自动进行货物的装载,并自动行走到另一位置,以完成货物的卸载的全自动运输设备。AGV基本功能为能自动依循固定的轨道行走,虽然说这个技术早己引用在工厂中,但是由于路线必须是规划好并在地上画上行走路径,并无法应用于较复杂的环境之中,而我们所提出来的设计,是利用图像来辨别标志,而标志摆放位置也可以根据实际的应用环境来做改变,所以应用范围较传统AGV更为广泛。
不仅如此,本设计也具有特定标志搜寻功能,能够自动的分析现有的图像信息,自动锁定目标物并进行自动化车控的控制,故我们设计这套系统来协助民众自动停车、自动倒车入库,也可应用于机场对飞机的管控或是任何具有动力的交通运输工具。本文将机械视觉算法以硬件加速的模块实现,结合多核的高效能的嵌入式处理器Nios,完成一个自动化汽车导引的平台,未来可实现很多汽车驾驶安全方面的应用,包括防撞、车道偏离警报和车道维持(可导引驾驶人回到原车道)、背面障碍物警报、行人监测、车距监测(让驾驶人和前车保持适当的距离)、夜视、自动头灯调节、交通/限速标志识别和盲点监测等等。
设计介绍
我们使用“软硬件共同设计 (Co-design)方法”集成图像输入端、车控平台及动力控制模块,完成自动化目标追踪的实验平台,通过效能佳的软核CPU来控制外围的模块,并利用VHDL自制图像处理核心电路,建立智能型图像追踪的嵌入式系统平台,如图1所示。
图1 智能型图像追踪的嵌入式系统平台
系统核心组成器件可分成以下三类:
1. CMOS 传感器硬件模块:CMOS 传感控制器 、数据简化、SDRAM 控制器
(1) CMOS 传感器控制器:驱动CMOS 传感器并进行连续图像撷取,将动态图像数据流传入。
(2) 数据简化:将CMOS 传感器撷取的图像数据(GB&GR)进行压缩,以便大幅减少计算量及分析时间。
(3) SDRAM 控制器:通过六组FIFO控制器,将SDRAM资源规划给两组CMOS传感器控制器及VGA控制器来使用(三写三读)。
2. VGA硬件模块:
(1) VGA 控制器:通过其器件,可以实时将图像直接显示在VGA上。
(2) XY Histogram:并通过XY坐标标示出目标位置,并在实时图像上进行X轴及Y轴的图像数据统计(Histogram)。
3. 动力控制:
通过第二颗软核CPU来依序执行外部给入的命令,CPU通过四组PIO来驱动车体前后轮的控制电路,达到车体前进、后退、左转、右转的控制。
主要硬件器件
以SOPC Builder完成双CPU核心的设定,并利用Verilog设计硬件电路器件,以waveform进行时序仿真并验证,再通过PIO方式和CPU连结,除了SOPC Builder所提供的外围电路以外尚有双CMOS 传感器图像撷取电路、六端口SDRAM控制器、VGA控制器(含图像处理电路),说明如下,如图3所示,自行开发的硬件电路已集成为一个较大的模块(在图2左方的方块),而图3右方的方块则是利用SOPC Builder所建立的双CPU模块。
图2 硬件器件
1. 双核处理器:
在图3中的cpu_0是用来控制CMOS 传感器及图像处理所用,而cpu_1是用来控制车控动力的。
图3 双CPU系统
2. 2个 CMOS 传感器撷取:
撰写镜头图像撷取的控制硬件电路,并利用DE2发展板上的双IDE接口(Expansion Header1,2)可同时撷取到双重镜头的图像。
3. 多端口SDRAM 控制器:
利用Mega Wizard Plug-In Manager来生成三写三读的六接口FIFO(以内置RAM实现),让二组CMOS 传感器撷取及一组VGA 控制器能读写SDRAM设备。
4. VGA 控制器 和图像处理:
撰写VGA输出的硬件控制电路,并在图像输出的同时,进行X轴及Y轴的图像数据统计,并将结果存于片上内存(On-Chip Memory)之中,以便Nios处理器来读取。
SOPC系统端接口设定
图4 系统端SOPC接口设定
由DE2发展板所提供的范例新增用户自定脚位来控制自制的外围电路,并通过PLL生成100MHz频率的时钟源供SDRAM来使用,如图5所示。
图5 cpu_0在SOPC(上)及在NIOS IDE(下)中的内存配置
系统软件执行时内存的配置
由于开发板上的SDRAM已被CMOS 传感器撷取及VGA 控制器所使用,所以cpu_0及cpu_1的程序内存是放于Flash上,而cpu_0执行程序时的例外向量是放于SRAM上;而cpu_1是放于片上内存之中,当然在NIOS IDE开发该CPU的软件时,也必须分别要把变量堆叠区指定到相关的内存之中,如图5、图6所示。 |