1. ADAS系统概述:ADAS功能定义、传感器架构、系统层级划分、功能安全基础
各位同学,欢迎来到咱们的ADAS实战课程。我是你们的老朋友,一个在汽车电子圈摸爬滚打了十几年的工程师。今天咱们聊聊ADAS系统的基础,这部分内容虽然偏概念,但却是后续所有建模和代码生成工作的根基。你想想看,如果连系统长什么样、传感器怎么搭配、安全等级怎么划分都不清楚,后面做出来的模型谁敢往车上装?
1.1 ADAS功能定义:从辅助到自动驾驶的阶梯
ADAS,全称是Advanced Driver Assistance Systems,高级驾驶辅助系统。说白了,就是给车装上眼睛、耳朵和大脑,帮驾驶员分担点活儿。我个人习惯把ADAS功能分成三个梯队:
- 第一梯队:信息预警类——只提醒,不干预。比如LDW(车道偏离预警)、FCW(前向碰撞预警)、BSD(盲区检测)。这类功能我做过很多,算法相对简单,但误报率控制是个大坑。
- 第二梯队:主动控制类——系统会接管部分操作。比如AEB(自动紧急制动)、LKA(车道保持辅助)、ACC(自适应巡航)。嗯,这里要注意,AEB的触发时机调不好,轻则吓到驾驶员,重则引发追尾。
- 第三梯队:高阶自动驾驶类——比如HWA(高速公路辅助)、TJA(交通拥堵辅助),甚至L3/L4级别的系统。这类功能对传感器融合和决策算法的要求极高,我在项目中遇到过传感器数据打架的情况,处理起来相当头疼。
核心观点:ADAS不是一步到位的,而是从「提醒」到「辅助」再到「接管」的渐进过程。每个梯队的建模思路和代码生成策略完全不同。
1.2 传感器架构:车的眼睛和耳朵怎么搭配?
传感器是ADAS的感知层。我经常跟团队说,传感器选型决定了系统的上限。目前主流的传感器架构有以下几种搭配:
| 传感器类型 | 主要用途 | 优缺点 |
|---|---|---|
| 摄像头(单目/双目) | 车道线识别、交通标志识别、目标分类 | 成本低,但受光照影响大;双目能测距,但标定复杂 |
| 毫米波雷达(24GHz/77GHz) | 目标测距、测速、ACC/AEB核心传感器 | 全天候工作,但角分辨率低,无法识别目标类型 |
| 激光雷达(LiDAR) | 高精度3D点云、SLAM、障碍物轮廓检测 | 精度极高,但成本高、受雨雾影响 |
| 超声波雷达 | 近距离泊车辅助、盲区检测 | 成本极低,但探测距离短、精度一般 |
我曾经在一个L2+项目中,客户坚持只用摄像头+毫米波雷达,结果在隧道出入口场景下频繁出现目标丢失。后来我们不得不加入激光雷达做冗余,才把问题解决。所以,传感器架构的冗余设计,不是锦上添花,而是安全底线。
实战建议:在Simulink中做传感器模型时,我建议把每个传感器的「失效模式」也建模进去。比如摄像头被遮挡、雷达被干扰,这些场景在代码生成阶段必须考虑。
1.3 系统层级划分:从感知到执行,谁负责什么?
ADAS系统通常分为四个层级。我习惯用「感知-决策-规划-执行」这个框架来划分:
- 感知层(Perception):处理传感器原始数据,输出目标列表、车道线方程、可行驶区域等。这部分在Simulink里通常用Stateflow做状态机,配合MATLAB的计算机视觉工具箱。
- 决策层(Decision):根据感知结果和车辆状态,决定下一步动作。比如「前车减速,本车是否要跟减?」。决策逻辑我建议用有限状态机(FSM)实现,清晰且容易做MIL测试。
- 规划层(Planning):生成具体的轨迹或路径。比如ACC的目标加速度、LKA的目标方向盘转角。这部分在代码生成时要注意实时性,我遇到过规划周期超过10ms导致控制抖动的案例。
- 执行层(Actuation):将规划指令发送给底盘、动力、转向等执行器。这里涉及CAN通信和信号标定,代码生成时要注意字节序和对齐问题。
避坑指南:我曾经在代码生成阶段,因为感知层和决策层的接口数据类型不一致(一个用single,一个用fixdt),导致生成的代码在目标硬件上跑飞。所以,接口定义一定要在建模初期就统一。
1.4 功能安全基础:ISO 26262不是摆设
功能安全,说白了就是「系统出故障时,不能伤人」。ISO 26262标准把汽车安全完整性等级分为ASIL A到ASIL D,ADAS系统通常要求ASIL B或ASIL C,AEB这类关键功能甚至要求ASIL D。
我在实际项目中,功能安全主要关注三点:
- 故障检测:比如传感器自检、信号合理性检查。在Simulink里,我会用「Monitor」模块做实时监控。
- 故障响应:检测到故障后,系统要降级或安全退出。比如摄像头故障时,ACC自动退出并提示驾驶员接管。
- 冗余设计:关键信号要有备份。比如制动请求信号,我习惯用两路CAN同时发送,一路主用,一路校验。
个人经验:功能安全不是写文档,而是要落实到模型里。我建议在Simulink建模时,就把安全机制作为独立的子系统嵌入,而不是后期打补丁。否则代码生成后,安全逻辑和功能逻辑耦合在一起,改起来想死的心都有。
好了,这一章的内容就到这里。ADAS系统的基础框架搭好了,后面咱们才能放心地往里面填「肉」——也就是具体的算法模型和代码生成。下一章,我会带大家搭建第一个Simulink模型:一个简单的FCW预警算法,从需求到模型再到代码,走一遍完整流程。