APP下载

快速处理倒车影像的设计研究与实现

2021-03-31孙德生

汽车电器 2021年3期
关键词:后视镜内核图层

孙德生

(深圳智者行天下科技有限公司, 广东 深圳 518133)

从2018年5月开始,在美国销售的所有新车必须配备后视摄像系统[1]。倒车影像显示系统由最初的倒车雷达改进而来,装在车尾的倒车摄像头摄取车辆尾部的画面,通过传输线送到车载终端上[2],比如智能后视镜,通过图像的方式显示车辆周围的障碍物,帮助驾驶者了解车辆后方情况,及时发现障碍物,增强视野、辅助驾驶员安全倒车。

目前车载中控主机和智能后视镜基本上是基于Android系统,都有倒车影像显示功能,但是基本上都是等系统启动完成后才能处理倒车影像,因此在车辆熄火时,系统只是做低功耗待机,一旦打火可以立即唤醒响应倒车事件,但是为了保障汽车蓄电池电量不影响下次打火不能过多消耗,系统都设计了待机超过了一定时间就主动关机切断电源,比如3天、7天。Android系统在关机后系统重新启动时间较长,一般都要15s以上,在启动的这段时间里,若需要倒车就只能等待系统启动完成。少数优质产品提供在系统内核中倒车的解决方案,启动系统的内核层后当检测到有倒车信号,启动摄像头并将图像数据存储在特定位置内存中,然后显示内存从该内存中读取图像数据并显示图像数据形成倒车影像[3]。提供了快速显示倒车影像的方法,一定程度上解决了系统启动时倒车影像显示慢的问题。但是系统从上电要先经过bootloader引导,加载、初始化内核,到具备内核倒车能力也需要5s左右。有些车载终端还设计了双系统,加入一个小系统来专门处理倒车影像,但是这种系统的成本比较高,市场接受度不高。

本文提出在bootloader中完成倒车影像显示的方法,通过改造bootloader,在bootloader中检测倒车,有倒车时直接初始化摄像头驱动,将获取的图像原始数据存储到物理内存中再传递给显示引擎图层,显示引擎启动两个图层,靠前的图层用于显示倒车警示线,靠后的图层用于显示视频图像,这样就快速处理了倒车影像的显示功能,从系统上电到完成倒车影像显示在2.5s以内,大大减少了系统启动时等待倒车影像的时间,提高了驾驶安全系数,该方法不增加任何硬件成本,经济性好便于普及应用。

1 倒车影像系统设计

本文提出快速处理倒车影像的系统运行在智能后视镜上,基于全志T3平台,起到了辅助驾驶员安全倒车的作用。

1.1 系统倒车硬件框架设计

在智能后视镜系统中倒车影像显示处理的硬件原理框图如图1所示。

图1 系统倒车硬件原理框图

倒车摄像头将车尾的图像通过串行器转化为AHD模拟高清信号,再通过AHD传输线束送到智能后视镜,先通过AHD解串器将模拟高清信号解码转换成BT656信号再接入主控T3的CSI模块,CSI控制器将收到图像数据交给运行在T3上的软件系统再做其他处理,比如颜色空间转换、图像翻转、裁剪等,将处理好的视频图像信号交给显示模块通过LVDS信号输出到显示屏幕上。为了检测倒车信号,倒车检测线需要接到车辆的制动信号线或者制动灯上,倒车信号的检测是基于GPIO电平触发,倒车时系统收到中断信号再做倒车处理。也可来自于汽车的CAN总线获取倒车信号关键信号,缩短信号解析周期,提高快速倒车的响应速度[4]。

1.2 Android系统启动流程

Android系统启动流程如图2所示。

图2 Android系统启动流程图

系统上电,引导固化在芯片自带ROM里的代码预定义的地方开始执行,加载引导程序BootLoader到RAM中,Boot-Loader初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,加载内核kernel,然后跳转到kernel运行,kernel启动时会设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设置时,它首先在系统文件中寻找init.rc文件,并启动init进程。Init再去引导Zygote,Zygote负责加载各种系统服务,Activity Manager Service运行完成后会拉起Launcher,显示系统安装的应用程序的快捷图标,发送BOOT_COMPLETED通知系统启动完成。

从启动流程上,BootLoader是系统运行的引导程序,是最早运行的可控制程序,因此在系统上电后最快能处理倒车影像系统的最优阶段,但是因为BootLoader里面没有系统的概念,处理复杂的倒车影像难度大,也正是本文要解决的核心创新点。

2 BootLoader处理倒车影像功能设计

BootLoader是一段裸机程序,是直接与硬件打交道的。U-boot 就 是 这 样 一 种BootLoader,U-boot 全 称 为Universal Boot Loader,是遵循GPL条款的开放源码项目。本节将深入分析在U-boot中实现倒车影像显示功能。

2.1 U-boot工作流程

U-Boot启动可以两个阶段,第1阶段由汇编语言完成,完成一些与平台相关的硬件设置,完成CPU模式切换,关闭看门狗,初始化内存控制器,设置堆栈,加载第2阶段代码到RAM空间,最后跳转到第2阶段代码入口运行。第2阶段代码主要由C语言完成,与板相关,主要完成所有设备的初始化工作,配置电源输出,初始化环境变量,设置可用的RAM,显示RAM大小,初始化EMMC,初始化显示引擎,加载图片解码库,打开LCD背光,显示开机图片,最后加载系统内核,再把CPU的控制权交出并跳转到内核入口地址启动操作系统[5]。

从U-boot的启动流程上分析,在显示开机图片的位置系统的显示系统已经工作起来,并且EMMC也已经做操作,因此在开机图片显示前面来实现倒车影像功能具备了一定基础,是最佳位置。

2.2 处理倒车影像显示

实现倒车影像显示功能,还需要完成几个功能,首先需要做倒车信号的检测,发现有倒车信号,然后进入倒车影像处理功能模块做相关处理。工作流程如图3所示。

图3 U-boot倒车影像处理流程图

检测倒车信号基于GPIO电平,无倒车信号继续正常运行U-boot顺序执行,如果有倒车信号就立即进入倒车处理,首先初始化解码信号做AHD信号解码,再初始化CSI模块接收摄像头数据到指定安全此阶段不会被自动分配的物理存储位置,如何开启主控的视频显示图层,将视频数据的位置、格式、分辨率等重要参数传给视频显示图层,完成摄像头数据到视频图层的数据绑定,实现最核心的一步。接着读取EMMC中存储的倒车相关设置信息,比如视频显示区域裁剪参数、是否开启倒车警示线。如果要显示倒车警示线,需要再从EMMC指定文件分区读取倒车警示线图片,再做图片解码,再将解码后的数据送到主控的UI显示图层[6]。至此倒车影像显示已经工作起来,需要持续监测倒车信号是否退出了,若没有退出就持续显示倒车,若退出倒车需要做相应处理,比如关闭显示的视频图层,关闭复位解码器芯片、CSI控制器,清零视频数据用到的内存空间。然后继续执行Uboot,显示开机图片,加载内核,让内核继续引导Android系统正常启动。

2.3 系统内核能处理倒车影像前如何处理

在系统的硬件设计上有一个MCU,负责主控供电,考虑防抖延时监测倒车信号持续有效超过500ms后有稳定信号后才会给到主控T3[7]。U-boot在启动过程中检测倒车信号处理倒车。内核启动完成后可以处理倒车影像功能[3]。内核从开始启动到启动完成最快也要3s时间,显然在U-boot运行中过了倒车信号检测代码段到内核启动完成可以处理倒车影像之间这段时间,是一个盲区时段。在内核启动完成后可以跟MCU进行握手通知MCU系统能够处理倒车了,可以通过主控和MCU连接的GPIO电平控制来实现。在这个盲区时间段内若有倒车信号,立即复位主控T3,让T3重新启动快速运行到U-boot里再处理倒车影像显示功能。

3 结束语

本文详细分析了当前基于Android系统的车载中控和智能后视镜倒车影像显示系统在系统启动阶段显示慢的问题,如果驾驶员强行倒车可能会带来安全隐患,以及双系统的处理方案成本高,市场接受度不高。通过深入分析车载中控和智能后视镜的Android系统启动流程,提出了一种在U-boot中处理倒车影像显示的解决方案,可以快速处理倒车影像显示,从系统上电到显示倒车画面在2.5s左右完成非常迅速,也充分考虑了在U-boot过了倒车检测点到内核启动完成具备倒车显示功能时这段盲区的处理方案,充分保障了启动阶段能够快速处理倒车影像显示的功能。该设计不增加硬件成本,经济性好便于普及,为驾驶员安全倒车增加了保险系数,保障倒车安全。

猜你喜欢

后视镜内核图层
人民情怀:柳青为文为人的内核(评论)
为《飞舞的空竹龙》加动感
下雨天,车窗和后视镜起雾怎么办
初春
以假乱真窥探湿玻璃后的风景
微软发布新Edge浏览器预览版下载换装Chrome内核
车辆防雾后视镜
与众不同“跳出”画面更个性
臂戴后视镜
回忆是……