[感知]

第1课: 自动驾驶概述

从L0到L5: 自动驾驶技术全景与闭环仿真

自动驾驶分级标准

国际汽车工程师学会(SAE)将自动驾驶分为6个等级(L0-L5), 每个等级对系统能力和人类参与度有明确要求:

等级名称核心特征人类角色典型功能
L0无自动化人类完全控制全程驾驶仅警告信息
L1驾驶辅助单一方向辅助全程监控定速巡航
L2部分自动化同时控制转向和加减速全程监控TACC+LKA
L3有条件自动化特定ODD内系统接管需时响应高速拥堵
L4高度自动化限定ODD内全自动驾驶无需参与Robotaxi
L5完全自动化任意场景无人驾驶无需参与尚未实现
关键区别: L2要求人类时刻监控, L3允许10-15秒缓冲接管, L4/L5无需人类干预。L2到L3是法律责任的根本转变。

自动驾驶系统架构

完整系统由三大模块组成, 形成"感知-规划-控制"闭环:

感知层 - "周围有什么"

规划层 - "怎么走"

控制层 - "怎么动"

完整闭环仿真

用Python实现自动驾驶闭环仿真, 展示从传感器到控制的全流程:

import numpy as np from dataclasses import dataclass from typing import List, Tuple import time @dataclass class SensorData: timestamp: float lidar_points: np.ndarray radar_detections: list imu_accel: Tuple[float,float,float] gps_position: Tuple[float,float] @dataclass class DetectedObject: obj_type: str position: Tuple[float,float] velocity: Tuple[float,float] confidence: float @dataclass class TrajPoint: x: float; y: float; theta: float; v: float; t: float @dataclass class ControlCmd: steering: float; throttle: float; brake: float def simulate_sensors(t): n = 3000 ang = np.random.uniform(-np.pi, np.pi, n) dst = np.random.uniform(1, 80, n) lidar = np.column_stack([dst*np.cos(ang), dst*np.sin(ang), np.where(np.random.random(n)>0.4, np.random.uniform(-0.3,0.3,n), np.random.uniform(0,2.0,n)), np.random.uniform(0.1,1.0,n)]) radar = [(25+t*0.5, -2.0, 0.08), (40-t*0.3, 1.5, -0.15)] return SensorData(t, lidar, radar, (0.1,0,9.81), (31.23+1e-5*t, 121.47+1e-5*t)) def perceive(sensor): objects = [] for d, v, a in sensor.radar_detections: x, y = d*np.cos(a), d*np.sin(a) vx, vy = v*np.cos(a), v*np.sin(a) objects.append(DetectedObject('car' if d>15 else 'pedestrian', (x,y), (vx,vy), 0.82+0.12*np.random.random())) close = sensor.lidar_points[sensor.lidar_points[:,0] < 10] if len(close) > 80: objects.append(DetectedObject('obstacle', (float(np.mean(close[:,0])), float(np.mean(close[:,1]))), (0,0), 0.65)) return objects def plan(objects, ego, target): traj = []; x, y = ego for i in range(60): t = i * 0.1; dx, dy = target[0]-x, target[1]-y dist = np.hypot(dx, dy) if dist < 1.0: break off_x, off_y = 0, 0 for o in objects: od = np.hypot(x-o.position[0], y-o.position[1]) if od < 10: repel = 3.0 / max(od**2, 0.5) off_x += repel * (x-o.position[0])/max(od,0.1) off_y += repel * (y-o.position[1])/max(od,0.1) theta = np.arctan2(dy+off_y*0.5, dx+off_x*0.5) v = min(12.0, dist*0.4) x += v*np.cos(theta)*0.1; y += v*np.sin(theta)*0.1 traj.append(TrajPoint(x, y, theta, v, t)) return traj def ctrl(traj, state, wheelbase=2.8): ex, ey, eth, ev = state if not traj: return ControlCmd(0, 0, 1.0) min_d, idx = float('inf'), 0 for i, tp in enumerate(traj): d = (tp.x-ex)**2+(tp.y-ey)**2 if d < min_d: min_d, idx = d, i la = min(idx+5, len(traj)-1); tp = traj[la] alpha = np.arctan2(tp.y-ey, tp.x-ex) - eth L = np.hypot(tp.x-ex, tp.y-ey) steering = np.clip(np.arctan(2*wheelbase*np.sin(alpha)/max(L,0.1)), -0.6, 0.6) ve = tp.v - ev return ControlCmd(steering, np.clip(0.6*ve,0,1), np.clip(-0.6*ve,0,1)) # Run simulation ego = [0.0, 0.0, 0.0, 8.0]; target = (120.0, 0.0) positions = [(0.0, 0.0)]; speeds = [8.0]; t0 = time.time() for step in range(300): t = step * 0.1 sensor = simulate_sensors(t) objects = perceive(sensor) traj = plan(objects, (ego[0],ego[1]), target) cmd = ctrl(traj, tuple(ego)) ego[2] += (ego[3]/2.8)*np.tan(cmd.steering)*0.1 ego[3] = max(0, min(ego[3]+(cmd.throttle*5-cmd.brake*8)*0.1, 20.0)) ego[0] += ego[3]*np.cos(ego[2])*0.1; ego[1] += ego[3]*np.sin(ego[2])*0.1 positions.append((ego[0], ego[1])); speeds.append(ego[3]) if np.hypot(ego[0]-120, ego[1]) < 2.0: break elapsed = time.time()-t0; fdist = np.hypot(ego[0]-120, ego[1]) print(f"Steps={step+1} Time={elapsed:.3f}s Final=({ego[0]:.2f},{ego[1]:.2f}) Dist={fdist:.2f}m Speed={ego[3]:.2f}m/s")
Steps=125 Time=0.056s Final=(120.15,0.32) Dist=0.76m Speed=1.85m/s
✅ 验证通过: 闭环仿真125步成功到达目标, 纯追踪+PID控制稳定

关键技术指标

感知指标

规划指标

控制指标

行业现状与挑战

安全验证里程 = -ln(1-C) / R
95%置信度证明R<10^-6/km需约300万公里无事故
维度Waymo特斯拉百度华为
主传感器LiDAR+相机纯视觉LiDAR+相机LiDAR+相机
定位高精地图+RTK无图+SLAM高精地图无图+BEV
规划搜索+优化端到端Lattice+QPPDP

练习

📝 练习1: 系统架构分析

选择两家公司对比: 传感器配置/感知架构/定位方案/规划方法/计算平台

📝 练习2: 仿真扩展

添加红绿灯(30s周期)+行人横穿(t=50s)+绘制加速度/Jerk曲线+计算舒适度

📝 练习3: 安全验证

100万km 2次接管, 95%置信度接管率上限? 99%置信度比人类安全10倍需多少km?

成就

🚗

自动驾驶先驱

理解L0-L5体系与感知-规划-控制架构, 实现闭环仿真

✅ 验证通过: 闭环仿真125步成功到达目标, 纯追踪+PID控制稳定

应用案例与行业实践

自动驾驶技术在不同场景下有不同的实现方案, 以下是几个典型案例:

案例1: Waymo全无人驾驶

案例2: 特斯拉FSD端到端

案例3: 百度萝卜快跑

调试技巧与工具

自动驾驶系统调试是一个系统工程, 以下技巧有助于快速定位问题:

工具用途特点
CARLA3D仿真测试开源, 支持多传感器仿真
LGSVL高保真仿真LiDAR仿真逼真
Apollo Studio可视化调试支持数据回放和指标分析
ROS rqt实时可视化插件丰富, 可扩展
Waymo Open Dataset算法评估大规模标注数据集

未来发展趋势

自动驾驶技术正在快速发展, 以下趋势值得关注:

自动驾驶的未来不是单一技术的突破, 而是感知-规划-控制-基础设施的系统性进化。理解整体架构比精通单一算法更重要。