1. 课程导入
在自动驾驶研发链条中,感知负责“看见世界”,规划负责“决定怎么走”,控制负责“把决定变成方向盘、油门和刹车的动作”。三者中,规划与控制直接决定车辆行为是否安全、平滑、可解释。而 CARLA 作为开源高保真仿真器,提供了城市道路、交通参与者、传感器与车辆动力学模型,是验证规划控制算法最常用的工程平台之一。本课程的目标,不是零散地讲几个 API,而是带你搭建一条可运行、可观测、可复现的规划控制闭环仿真工程链路。
一、学习目标:从“会调 API”到“会做闭环工程”
很多初学者学 CARLA 的路径是:装好环境、跑通示例、调用几个 Python 接口,然后卡在“我的算法怎么接进去”。本课程要解决的就是这个断层。学完后你应当具备四层能力:
- 环境层:能独立完成 CARLA 服务端启动、Python 客户端连接、地图与天气加载、同步模式配置。
- 接口层:能读懂并使用 CARLA 的车辆控制接口(
carla.VehicleControl)、世界快照(WorldSnapshot)、传感器回调与坐标系约定。 - 算法层:能实现或接入横向控制(如纯跟踪、Stanley、LQR)与纵向控制(如 PID、速度规划),并完成轨迹跟踪。
- 工程层:能设计闭环评测指标(横向误差、速度误差、舒适度、碰撞率),并做参数标定与回归测试。
二、核心概念:闭环仿真到底“闭”在哪里
“闭环”是相对“开环”而言的。开环仿真只把一条预设轨迹喂给控制器,看输出对不对;闭环仿真则让控制输出真正作用于车辆模型,车辆运动后改变自身状态与所处场景,再反馈给规划模块,形成持续迭代。CARLA 中这条闭环的关键概念包括:
- 同步模式(synchronous mode):让仿真时间步与客户端 tick 对齐,保证每帧数据可复现,是闭环实验的前提。
- 固定时间步(fixed_delta_seconds):决定控制周期,例如 0.05 s 对应 20 Hz 控制频率。
- 车辆状态反馈:位置、姿态、速度、加速度、航向角,是规划与控制之间的“共同语言”。
- 参考轨迹:由全局路径规划或地图车道中心线生成,是控制器的跟踪目标。
- 控制量:油门/刹车(throttle/brake)与转向(steer),经车辆动力学模型转化为下一时刻状态。
下面这张图展示了本课程要搭建的闭环数据流与模块关系,也是后续各章节的骨架:
三、整体框架:一条主线、四个层次
本课程按“环境 → 接口 → 算法 → 工程”四层递进组织。前几章解决“跑得起来”,中间章节解决“接得进去”,后段章节解决“评得清楚”。具体主线如下:
- 环境与接口:CARLA 安装、Python API、同步模式、坐标系与车辆控制接口。
- 规划基础:全局路径、参考轨迹、局部轨迹生成与轨迹平滑。
- 控制算法:横向 Pure Pursuit / Stanley / LQR,纵向 PID 与速度规划。
- 闭环工程:评测指标、参数标定、场景回归、日志与可视化。
一个最小可运行的闭环控制循环,代码骨架大致如下:
import carla, time
client = carla.Client("localhost", 2000)
world = client.get_world()
settings = world.get_settings()
settings.synchronous_mode = True
settings.fixed_delta_seconds = 0.05 # 20 Hz 控制周期
world.apply_settings(settings)
vehicle = spawn_vehicle(world)
controller = PurePursuitController(wheelbase=2.8)
while True:
world.tick() # 推进一帧
state = get_vehicle_state(vehicle) # 位置/速度/航向
ref_traj = planner.update(state) # 生成参考轨迹
control = controller.run(state, ref_traj)
vehicle.apply_control(control) # throttle/brake/steer
四、工程价值:为什么值得用 CARLA 做闭环
真实车辆测试成本高、风险大、场景难复现。CARLA 的价值在于把“危险场景”和“极端参数”变成可重复实验:
| 维度 | 实车测试 | CARLA 闭环仿真 |
|---|---|---|
| 成本 | 高,需车辆、场地、人员 | 低,单机即可运行 |
| 安全性 | 碰撞风险真实存在 | 碰撞可无限次复现 |
| 可复现性 | 受天气、交通影响大 | 同步模式 + 固定种子可复现 |
| 场景覆盖 | 难以构造极端场景 | 可脚本化生成切入、鬼探头等 |
| 评测效率 | 人工记录,周期长 | 自动采集指标,批量回归 |
五、常见误区与复盘建议
误区一:把开环当闭环。只验证控制器输出曲线,不把控制量真正作用于车辆,等于没做闭环。判断标准是:车辆状态是否反过来影响了下一帧的规划输入。
误区二:忽略同步模式。异步模式下仿真时间与客户端不同步,实验不可复现,指标波动大。闭环实验务必开启同步模式并固定时间步。
误区三:只调控制参数,不看规划质量。横向误差大,很多时候是参考轨迹本身不平滑或曲率突变,而非控制器不行。
复盘建议:每完成一个闭环实验,至少记录四项数据——控制周期、横向误差 RMS、速度误差 RMS、是否发生碰撞。把这三类指标做成表格横向对比,比“看起来跑得还行”可靠得多。