4、跨域融合与中央计算平台:Vehicle Computer的诞生、SOA(面向服务的架构)的引入

好,我们进入第四章。这一章,我想聊聊汽车电子架构里最激动人心的变化——跨域融合和中央计算平台。

说实话,我在2015年刚入行时,车上的ECU(电子控制单元)数量已经多到让人头疼。一辆豪华车,六七十个ECU是常态。每个ECU管一摊事,门控、车窗、座椅、空调……各玩各的。这种架构,我们叫它“分布式架构”。

但问题来了。你想想看,这么多ECU,线束有多重?我记得有一次拆解一辆车,光线束就占了整车重量的5%以上。而且,软件升级?别想了。每个ECU的固件都得单独刷,4S店得拿专用设备,一刷就是半天。

所以,行业开始思考:能不能把功能相近的ECU合并?

从域控制器到跨域融合

第一步,就是域控制器(Domain Controller)。

我们把整车分成几个域:动力域、底盘域、车身域、信息娱乐域、自动驾驶域。每个域用一个高性能的SoC(系统级芯片)来接管原来十几个ECU的工作。

我在2018年参与过一个项目,把车身域里的门控、车窗、灯光、雨刮,全部整合到一个域控制器上。嗯,这里要注意:整合不是简单的“把代码堆在一起”。你得重新设计软件架构,保证实时性。比如,车窗防夹功能,响应时间必须小于100毫秒。如果域控制器负载高了,车窗夹到人怎么办?

所以,域控制器时代,我们学会了“分区隔离”。用Hypervisor(虚拟机监视器)把不同功能隔离在不同的虚拟机上。一个核跑实时操作系统(RTOS)管安全,另一个核跑Linux管娱乐。

但域控制器只是过渡。真正的目标,是跨域融合。

为什么?因为很多功能需要跨域协作。比如,自动泊车。它需要自动驾驶域的感知数据、底盘域的转向控制、动力域的动力输出。如果每个域还是各管各的,数据交互就得走网关,延迟高、带宽低。

我见过一个项目,自动泊车时,因为域间通信延迟,方向盘已经打到位了,但动力还没跟上,车在原地抖了一下。这种体验,用户能接受吗?

所以,行业开始把多个域合并到一个中央计算平台(Vehicle Computer)上。

Vehicle Computer:中央计算平台的诞生

Vehicle Computer,说白了,就是一台装在车上的高性能服务器。

它把原来多个域控制器的功能,全部集中到一块或几块高性能计算板上。这些板子通常采用多核SoC,比如NVIDIA的Orin、高通的Snapdragon Ride、或者英特尔的Aurix。

我给大家看一个典型的Vehicle Computer架构:

+------------------+     +------------------+
|   SoC Cluster    |     |   Safety Island  |
| (Orin / Snapdragon) |     | (Aurix / RH850)  |
|   - 自动驾驶     |     |   - 车辆控制     |
|   - 信息娱乐     |     |   - 功能安全     |
|   - 车身控制     |     |   - 网关路由     |
+--------+---------+     +--------+---------+
         |                        |
         +----------+-------------+
                    |
            +-------v-------+
            |   Switch/Hub  |
            +-------+-------+
                    |
         +----------+-------------+
         |            |            |
    +----v----+  +---v----+  +---v----+
    | 左域    |  | 右域    |  | 后域    |
    | 控制器  |  | 控制器  |  | 控制器  |
    +---------+  +---------+  +---------+

你看,中央计算平台通过高速网络(比如千兆以太网、甚至TSN时间敏感网络)连接各个区域控制器。区域控制器只负责IO采集和执行,真正的计算和决策,全部上移到中央平台。

这样做的好处很明显:

  • 算力集中:一块SoC的算力,顶得上几十个ECU。而且,算力可以动态分配。比如,停车时,自动驾驶的算力可以分给信息娱乐,让中控屏更流畅。
  • 软件升级:所有软件都在中央平台上,OTA(空中升级)一次搞定。不用再一个个刷ECU了。
  • 数据共享:所有传感器数据都汇聚到中央平台,做融合感知。比如,摄像头看到行人,毫米波雷达测到距离,激光雷达建出3D点云。这些数据在中央平台融合,比在各自域里处理要准确得多。

但,中央计算平台也有坑。我曾经踩过一个:散热。一块Orin芯片,满载功耗能到70瓦。如果再加上其他SoC,整个平台的功耗轻松超过200瓦。车规级环境温度要求-40°C到85°C,怎么散热?我们最后不得不设计了液冷方案,成本直接翻倍。

所以,Vehicle Computer不是简单的“把ECU堆在一起”。它需要重新设计硬件架构、散热方案、电源管理、以及最重要的——软件架构。

SOA:面向服务的架构

说到软件架构,就不得不提SOA(面向服务的架构)。

SOA不是新概念。IT行业用了十几年了。但在汽车行业,它直到最近几年才火起来。为什么?因为传统汽车软件是“面向信号”的。

什么叫面向信号?举个例子:你想打开左前车窗。传统做法是,CAN总线上发一个信号,比如“左前车窗电机正转”。车窗控制器收到信号,直接驱动电机。这种模式,信号和功能是绑死的。你想换个车窗电机?得改信号定义。你想增加一个“下雨自动关窗”功能?得重新设计信号交互。

面向服务就不一样了。我们把每个功能抽象成一个“服务”。比如,“车窗控制服务”提供三个接口:打开、关闭、停止。任何应用都可以调用这些接口,不管它运行在哪个ECU上。

我给大家看一个简单的SOA接口定义:

// 车窗控制服务接口
interface WindowControlService {
    // 打开车窗,参数:车窗ID,打开百分比
    Result openWindow(WindowId id, uint8_t percentage);
    
    // 关闭车窗
    Result closeWindow(WindowId id);
    
    // 停止车窗
    Result stopWindow(WindowId id);
    
    // 获取车窗状态
    WindowStatus getWindowStatus(WindowId id);
}

你看,这个接口是标准的、可复用的。不管你是中控屏上的触控按钮,还是语音助手说“打开车窗”,还是自动雨刮检测到下雨,都可以调用这个服务。

SOA的核心思想,就是“服务发现”和“服务调用”。

服务提供者(比如车窗控制器)启动后,会向网络注册自己的服务。服务消费者(比如中控屏应用)通过服务发现机制,找到需要的服务,然后通过RPC(远程过程调用)来调用它。

在汽车上,我们通常用SOME/IP(Scalable service-Oriented MiddlewarE over IP)或者DDS(Data Distribution Service)来实现SOA。

我个人习惯用SOME/IP。它轻量、实时性好,而且和AUTOSAR(汽车开放系统架构)深度集成。我在一个项目中,用SOME/IP实现了车身域和自动驾驶域的服务交互。自动驾驶域需要知道车门是否关好,才能决定是否启动自动泊车。通过SOME/IP,自动驾驶域直接调用车身域的“车门状态服务”,延迟不到5毫秒。

但SOA也有挑战。最大的问题是“服务粒度”。

服务粒度太细,比如把“打开车窗”拆成“解锁电机”、“启动电机”、“检测位置”三个服务,那调用链会很长,延迟高、可靠性差。服务粒度太粗,比如把整个车身控制做成一个服务,那复用性又差,每次改功能都得改整个服务。

我建议,服务粒度以“功能原子”为单位。一个服务只做一件事,但这件事是完整的、不可再分的。比如,“打开车窗”就是一个原子功能。它内部可以调用更底层的硬件驱动,但对外只暴露一个接口。

核心要点:

  • 跨域融合的本质,是把多个域控制器的功能合并到中央计算平台,减少线束、提升算力利用率。
  • Vehicle Computer是中央计算平台的物理载体,需要解决散热、电源、实时性等工程问题。
  • SOA是中央计算平台的软件灵魂,通过服务化抽象,实现功能的解耦和复用。

个人经验: 我在做SOA设计时,会先画一张“服务地图”。把整车所有功能列出来,然后问自己:这个功能会被多少个应用调用?如果超过3个,就把它做成服务。如果只有1个,那就先做成内部函数,等以后有复用需求再重构。别一开始就过度设计。

避坑指南: 我曾经在一个项目里,把SOA的服务发现机制设计得太复杂。每个服务启动时,都要向中央注册中心注册,注册中心再广播给所有节点。结果,车辆启动时,所有服务同时注册,网络瞬间拥塞,导致一些关键服务(比如制动控制)注册失败。后来,我们改成了“按需发现”——只有消费者需要时,才去查找服务。这个教训告诉我:SOA虽好,但也要考虑实际网络带宽和实时性约束。

好了,这一章我们聊了跨域融合、Vehicle Computer和SOA。下一章,我会深入讲SOA在汽车上的具体实现,包括SOME/IP协议栈、服务发现机制、以及如何做服务安全认证。到时候,我会带大家手写一个简单的SOME/IP服务。

嗯,今天就到这里。有什么问题,欢迎在评论区留言。