算法实施
起初,我们想提供一种单处理器系统。不过很快发现,专用处理器可以简化算法开发工作每次迭代所需的集成工作。我们把主处理器和 Foot-LITE 算法处理器隔离开来,中间用MICroBlaze? Fast Simplex Link (FSL) 总线系统来实现通信。这样可以把两个处理器的存储完全隔离开来(与常见的共享存储的做法不同),可以大幅度简化集成工作,因为错误不会通过内存损坏而从一个处理器迁移到另一个处理器上。
此外,这样可以避免对处理器周期的竞相争用。这就意味着我们的合作伙伴可以放心,我们对主机应用所做的任何修改都不会影响他们的应用性能。
图 2 – 基于 Spartan 的处理模块
我们开发了一系列封装功能,允许我们访问Simulink? 编译器生成的 C 语言程序,而无需对接口进行大幅更改。我们可通过 I2C 总线提供少量非易失板上缓存空间,用于存储Foot-LITE 算法中的各种调节参数 (tune parameter)。这就需要一个简单的封装程序,以便算法在 Simulink 环境下实现轻松访问,从而在启动时读取该内存,并在关断时写回。
该系统需要测量加速度和横摆角速度,并通过CAN总线与车道和车辆检测系统通信。由于我们已经有了底层CAN 驱动程序,而且我们担心Linux应用在40毫秒的时间范围内测量车辆动态信息的及时性,我们决定在系统中再增加一个MicroBlaze。这样可以不必把 CAN 驱动程序导入Linux,而且可以通过另一个隔离的处理节点实现确定的性能。这对算法非常重要,因为算法使用的动态测量值。此外,这种方法还可以让我们把编写软件的工作拆开,进行并行开发。这里我们还是使用 FSL 作为动态处理器和Foot-LITE 算法处理器之间的接口。
视频捕获与压缩
系统的初步构想是把视觉系统的数据通过CAN 总线传输给 Foot-LITE 算法单元,为车道宽度和偏移量、与前方车辆之间的距离等提供简单的测量。项目合作伙伴决定强化其设置,将捕获到的视频帧传输到服务器,进行离线环境分析,以转译系统提供的信息的含义。鉴于这项要求只针对“互联网质量”的视频(频率为5 Hz 时,像素为 300x200),我们觉得我们可以再用一个 MicroBlaze,把视频流实时压缩成一系列 JPEG 图像。摄像头捕获的图像是宽VGA(频率为30Hz 时,像素为 720 x 480,)视频流。很明显,图像降采样工作应该交给硬件来做。
我们设计了一个简单的外设,通过交替去掉像素和行来进行降采样操作,生成360 x 240的图像。该外设还每 5 帧去掉 4 帧,以获得所需的帧率。无需进行更复杂的处理就可以获得视觉上可以接受的结果,因为JPEG 处理会让走样的人为效果不可见。我们使用系统生成器来开发该外设,因为它可以直接导出到 EDK,而且我们已经有了使用系统生成器进行更加复杂的图像处理的经验。
进入连接到 JPEG 处理器的 SDRAM 的数据由降采样外设的总线负责控制,数据随即被逐帧压缩,送入循环缓冲区,直到Foot-LITE算法发出标志。JPEG处理器将压缩后的视频帧(也是通过 FSL)发送到主机 MicroBlaze。我们使用独立 JPEG 小组提供的代码库,而且发现基本不需要优化就可以工作在 5Hz 的条件下。
另外,通过隔离的处理器让另一位软件工程师(身处异地)在进行系统相同部分开发的时候,都可以并行不悖。