一文讲解Android车载系统camera架构 - EVS
发布时间:2025-05-13 03:41:50 发布人:远客网络
一、一文讲解Android车载系统camera架构 - EVS
本文将深入解析Android车载系统中为适应汽车环境而设计的EVS(Exterior View System)架构。在Android的camera开发中,广泛使用的camera2与cameraX架构主要针对手机移动端camera的流程,而EVS架构则专注于汽车外景系统,如倒车影像和360全景影像。本文将逐步剖析EVS架构的四个关键组件:EVS APP、EVS Manager、EVS HAL,以及Vehicle HAL。
EVS APP作为用户界面,接收并处理来自EVS Manager的底层HAL传递的camera数据。在Android 12中,EVS APP仅支持简单的图像预览。EVS APP的基本流程涉及枚举底层配置的video设备节点,筛选支持的格式,最后将符合条件的设备纳入sCameraList。在需要Vehicle HAL的前提下,EVS APP连接Vehicle HAL以订阅车辆挡位和转向灯信息,并在外部输入变化时通过回调处理这些数据。同时,EVS APP通过EvsStateControl状态更新线程调整运行状态,实现图像绘制。
EVS Manager作为EVS架构的中心,为APP提供与EVS HAL交互的接口。它实现与底层HAL驱动程序相同的API,支持多个客户端并发访问相机流。EVS Manager管理EVS Camera与EVS Display,并提供权限管理和诊断功能。EVS Manager对HAL接口进行封装,增加额外功能,如数据统计、诊断等,并支持虚拟Camera设备。
EVS HAL作为硬件抽象层,与内核驱动交互,获取摄像头数据。它提供EVS Camera与EVS Display两个抽象对象,是OEM厂商关注的核心部分。EVS HAL存在1.0与1.1两个版本,1.1版本在HIDL接口中增加了IEvsUltrasonicsArray.hal与IEvsUltrasonicsArrayStream.hal文件,为可能存在的超声波Sensor提供API,支持自动驾驶需求。
Vehicle HAL作为整体Android Automotive版本的通信桥梁,向下接入通信接口,向上服务于Java Framework和Native Framework。它定义和实现接口,用于汽车其他控制器之间的通信。
相较于camera2,EVS架构专注于车外摄像头,这些摄像头位置固定,视角较为统一,因此系统对摄像头的控制相对较少。而camera2则用于手机camera控制,提供更灵活的调节方法和参数设置。EVS架构强调快速启动、响应和低延迟,适合车载系统需求,而camera2架构则在Java Framework层提供了丰富API,简化应用开发。
EVS架构的开发难度相对较高,需要开发者构建Input管理、View子系统,并使用OpenGL ES API进行图像绘制。市面上关于camera2架构的资源较多,而关于EVS架构的分析较少,本文旨在提供基本介绍和分析,鼓励感兴趣的读者共同研究学习。
总结,EVS架构是针对汽车外景系统设计的camera架构,其组件包括EVS APP、EVS Manager、EVS HAL和Vehicle HAL。EVS架构在控制、启动速度和延迟方面满足车载系统需求,与camera2架构在应用场景、控制复杂度和开发难度上存在显著差异。未来,我们将对EVS架构的使用细节进行深入分析。
二、RE: 从零开始的车载Android HMI(一) - Lottie
1、多年以前汽车还是以机械仪表主体的年代,各大汽车主机厂商并不十分关注操作系统UI的交互功能,但是随着车载SOC算力的不断提高以及主机厂商对汽车座舱竞争的白热化。座舱的HMI在设计上在强调功能性的同时也开始关注UI的艺术性,HMI的设计师们期望艺术与功能应该协同工作,让用户沉浸在“第三空间”的体验中。
2、有了需求程序员就需要关注如何实施和落地,然而Android应用本身虽然有着完整的动画框架支持,但是开发复杂、调试耗时,大型的gif或逐帧动画对于CPU&内存占用都不太理想,所以许多Android的手机应用基本上不怎么有动画。而且车载HMI上越来越多的开始引入各种光影、粒子效果,如果基于Android的原生控件来实现这些粒子效果,难度非常大,这就需要今天的主角Lottie来实现了。
3、 Lottie是一种基于JSON的动画文件格式,它使设计师能够在任何平台上发布动画,就像发布静态资产一样简单。它们是在任何设备上工作的小文件,可以在不进行像素化的情况下放大或缩小。
4、可以修改属性,动态生成可交互的动画(使用视频动画难以实现交互功能)
5、可以更轻松的实现粒子、光影等特效
6、然后就可以在布局文件中使用LottieAnimationView了
7、 LottieAnimationView继承自AppCompatImageView,所以ImageView支持的属性, LottieAnimationView都是支持的,这部分就不再介绍了。
8、如果设定 app:lottie_fileName="other/HamburgerArrow.json",那么lottie就会读取assets/other/HamburgerArrow.json。
9、 void setAnimationFromJson(String jsonString,@Nullable String cacheKey)
10、 void setCacheComposition(boolean cacheComposition)
11、 Lottie的Demo中内置了很多官方自己开发的动画效果,目的是为我们展示Lottie的常见用法,作为开发者我们必须掌握,并在适当的时候运用到我们的应用中。
12、该效果展示了lottie支持动态修改json,让动画中的一小部分属性发生改变。
13、 KeyPath中的 LeftArmWave是Json中的一个属性
14、修改的效果如下。注意看右手的摆动频率X3后比X1高,以至于录制的GIF直接丢帧了。
15、该效果展示了动画文字效果。这个效果实现起来其实不难,从程序中捕获输入的字母,再替换成lottie的资源文件即可。
16、注意,这里其实用了两个lottieView,分别设定了不同的文字。
17、该效果展示通过监听点击事件来播放不同的lottie动画。这个效果最常见,APP中的点赞效果大多都是这样的实现思路。
18、在车载HMI开发中往往我们会在实现、调试UI上花费大量的时间,如果能够灵活的运用Lottie,就可以显著节省程序的开发时间。例如,光影、粒子等特效虽然可以也考虑用Kanzi等3D引擎实现,但是3D引擎会消耗成倍的SOC性能,实际开发过程中,简单的特效使用Lottie实现,可以极大的优化应用的性能,给用户一个更优秀的体验。
19、本篇很多内容参考了《Android自定义控件高级进阶与精彩实例(博文视点出品)》(启舰)【摘要书评试读】-京东图书这本书的内容,写得相当不错,非常值得认真阅读。
20、下一篇来讲讲车载HMI开发时都会用到的一个系统组件- Widget
21、还不知道什么是汽车HMI设计?进来带你快速了解
22、《Android自定义控件高级进阶与精彩实例(博文视点出品)》(启舰)【摘要书评试读】-京东图书
三、androidauto无法完成设置
1、androidauto无法完成设置目前来说应该是不能用,很多国产手机或者设备明显不支持:首先,Android Auto面向第三方开发者开放了首批 API,虽然支持的 App仅仅是 audio和 message类,但这是个好的开始。
2、第一步,找到车辆的USB接口,该接口有一个手机和平板的标志,这个接口有可能在点烟器边上,也有可能在中央扶手箱里面;第二步,用旋钮点击屏幕上的电话菜单2次,也可以直接按面板上的TEL按键2次,屏幕将会出现电话功能界面。只有电话、互联网、电话信息这3个选项,说明当前车辆没有CarPlay。显示有电话、互联网、电话信息、Apple CarPlay、Android Auto这5个选项,则说明当前车辆有CarPlay功能;第三步,用苹果原厂数据线一端插入USB接口,另一端插入苹果手机,CarPlay就会自动启动可选择Android auto,carplay或者baodu carlife中的一种进行手机车机连接。连接后即可将相应的导航显示在车机屏幕上。