第二章 系统架构总览:自动驾驶软件与硬件的骨架
各位同学,欢迎来到第二章。上一章我们聊了自动驾驶的分级和行业现状,算是打了个底。这一章,咱们直接切入核心——系统架构。
说白了,自动驾驶系统就像一个人。传感器是眼睛和耳朵,计算平台是大脑,执行器是手脚。而软件架构,就是让这些器官协同工作的神经系统。我习惯把整个架构拆成两大部分来看:软件分层和硬件概览。咱们一个一个聊。
2.1 软件架构分层:感知-预测-规划-控制
先问大家一个问题:你开车时,大脑是怎么工作的?
你看到前方有个行人(感知),你判断他下一步可能要过马路(预测),你决定减速并准备刹车(规划),最后你的脚踩下刹车踏板(控制)。
自动驾驶的软件架构,本质上就是模仿这个流程。我把它分成四个核心模块,环环相扣。
2.1.1 感知层:让车“看见”世界
感知层的任务很简单:从传感器原始数据中提取有意义的信息。比如,识别出车道线、交通标志、行人、车辆、障碍物。
我在项目中遇到过一个问题:摄像头在强光下会过曝,导致车道线丢失。后来我们加了HDR(高动态范围)处理,才解决了这个问题。嗯,这里要注意,感知层不能只依赖单一传感器,必须做传感器融合。
常见的感知输出包括:
- 目标检测结果(位置、类别、速度)
- 可行驶区域(Free Space)
- 车道线/路沿检测
- 交通标志与信号灯识别
2.1.2 预测层:猜猜别人想干嘛
感知层告诉你“那里有辆车”,预测层要回答“这辆车接下来3秒会怎么走”。
你想想看,如果预测不准,规划层就会做出错误的决策。预测通常分为两类:
- 基于物理模型:用卡尔曼滤波、匀速/匀加速模型预测轨迹。简单,但不够智能。
- 基于行为模型:用神经网络预测意图,比如“这辆车可能要变道”。
我个人习惯把预测结果表示成概率分布。比如,“有80%的概率直行,15%的概率左转,5%的概率急刹”。这样规划层可以更灵活地应对不确定性。
2.1.3 规划层:决定怎么走
规划层是自动驾驶的“大脑决策中心”。它接收感知和预测的结果,输出一条安全、舒适、高效的轨迹。
规划层又细分为三个层级:
- 全局路径规划:从A点到B点的宏观路线,通常用A*或Dijkstra算法。说白了,就是导航。
- 行为决策:决定下一步动作,比如“跟车”、“变道”、“停车让行”。
- 运动规划:生成具体的轨迹(路径+速度曲线)。常用方法有Frenet坐标系下的五次多项式、优化方法(如MPC)。
这里我分享一个代码片段,展示运动规划中常用的Frenet坐标系转换:
# Python示例:Frenet坐标系转笛卡尔坐标系
def frenet_to_cartesian(s, d, ref_path):
"""
s: 纵向距离
d: 横向偏移
ref_path: 参考路径点集
"""
# 找到最近的参考点
nearest_idx = find_nearest_point(s, ref_path)
ref_point = ref_path[nearest_idx]
# 计算法向量方向
theta = ref_point.yaw
x = ref_point.x - d * sin(theta)
y = ref_point.y + d * cos(theta)
return x, y
2.1.4 控制层:把想法变成动作
控制层是最后一步。它接收规划层输出的轨迹,计算出方向盘转角、油门、刹车等控制指令。
常用的控制算法有:
- PID控制:简单、稳定,适合低速场景。我刚开始做控制时,调PID参数调了一周。
- 模型预测控制(MPC):能处理约束,适合高速和复杂场景。但计算量大。
控制层的输出通常包括:
| 控制指令 | 描述 | 典型范围 |
|---|---|---|
| 方向盘转角 | 控制车辆转向 | -720° ~ 720° |
| 油门开度 | 控制加速 | 0% ~ 100% |
| 制动压力 | 控制减速 | 0 ~ 200 bar |
2.2 硬件架构概览:传感器、计算平台、执行器
软件跑在硬件上。硬件选型决定了系统的上限。我把它分成三大块。
2.2.1 传感器:车的“感官”
主流传感器包括:
- 摄像头:提供丰富的语义信息(颜色、纹理、文字)。缺点是受光照影响大。
- 激光雷达(LiDAR):提供精确的3D点云,测距远。缺点是成本高,雨雾天性能下降。
- 毫米波雷达:测速准,全天候工作。缺点是分辨率低,无法识别物体类别。
- 超声波雷达:用于近距离泊车,成本低。
- IMU+GPS:提供车辆自身的位置和姿态。
我个人习惯的传感器配置是:前向长距摄像头+侧向鱼眼+顶部激光雷达+四角毫米波雷达。这个组合在成本和性能之间取得了平衡。
2.2.2 计算平台:车的“大脑”
计算平台负责运行感知、预测、规划、控制算法。常见方案有:
- NVIDIA Drive Orin/Thor:算力强,生态好。我项目里用的就是Orin,254 TOPS,够用。
- Qualcomm Snapdragon Ride:功耗低,适合量产车。
- 华为MDC:国产方案,性价比高。
选型时要注意:算力不是唯一指标。内存带宽、I/O接口、散热设计同样重要。我曾经因为选了算力高但内存带宽不足的平台,导致数据搬运成了瓶颈。
2.2.3 执行器:车的“手脚”
执行器包括:线控转向、线控制动、线控油门。它们接收控制层的指令,并执行物理动作。
这里有个关键点:执行器必须有冗余设计。比如,制动系统要有两套独立的液压回路。万一主系统失效,备份系统能接管。
2.3 数据流与通信机制
最后,我们聊聊数据怎么在系统里流动。这就像人体的血液循环系统。
典型的自动驾驶数据流如下:
- 传感器采集原始数据(图像、点云、雷达信号)
- 数据通过高速接口(如GMSL、以太网)传输到计算平台
- 感知模块处理数据,输出结构化信息
- 预测模块基于感知结果,输出预测轨迹
- 规划模块结合预测和地图信息,输出规划轨迹
- 控制模块将轨迹转换为控制指令
- 控制指令通过CAN总线或车载以太网发送给执行器
通信机制方面,我推荐使用DDS(数据分发服务)作为中间件。它支持发布-订阅模式,实时性好,适合自动驾驶这种高带宽、低延迟的场景。
好了,第二章的内容就到这里。这一章我们搭建了自动驾驶系统的整体骨架。下一章,我们会深入感知模块,聊聊摄像头和激光雷达的数据处理。到时候见。