当前位置: 首页 > news >正文

我做了一个 CARLA 自动驾驶仿真测试平台——项目复盘与技术架构

我做了一个 CARLA 自动驾驶仿真测试平台——项目复盘与技术架构

作者:chuyue-setsnua | 项目地址:carla-adas-test-platform


项目背景

我是智能车辆工程专业大三学生,目标岗位是台架测试开发工程师(自动驾驶仿真方向)。这个岗位的核心要求就几个:Python/C 自动化测试、CAN 总线、HIL/SIL 测试框架、至少一个仿真平台(CARLA 或 CarMaker)。

网上能找到的 CARLA 教程基本是"怎么 spawn 一辆车然后按 WASD 开",跟台架测试完全不搭边。真实台架测试要的是:自动化运行场景 → 采集传感器 + CAN 数据 → 批量回归测试 → 生成测试报告。所以我决定从零搭一个完整的 ADAS 仿真测试平台,既能练技术,又能写进简历。


系统架构

整个平台围绕 CARLA Client-Server 架构搭建,核心分层如下:

┌─────────────────────────────────────────┐ │ Pygame UI Layer │ │ Camera View | HUD Panel | Live Charts │ ├─────────────────────────────────────────┤ │ Scenario Controller │ │ State Machine (IDLE → RUNNING → DONE) │ │ Keyboard Input (SPACE/R/Q) │ ├──────────────────┬──────────────────────┤ │ AEB Controller │ CAN Bus Logger │ │ - TTC Graded │ - 7 CAN IDs @ 20Hz │ │ - Persistent │ - Vector .asc format │ │ - Lane Keeping │ - CANalyzer compat │ ├──────────────────┴──────────────────────┤ │ CARLA Client API │ │ world.tick() | spawn_actor | sensors │ ├──────────────────────────────────────────┤ │ CARLA Server (CarlaUE4.exe) │ │ Unreal Engine 4 | Physics | Rendering │ └──────────────────────────────────────────┘

每一层做了一件事且只做一件事:场景控制器管状态机和用户输入,AEB 控制器只管跟车和制动逻辑,CAN 日志只负责数据编码和落盘。这种分层的好处是你换一个场景(比如从跟车 AEB 变成行人 AEB),只需要改场景控制器层,AEB 和 CAN 层完全不用动。


三个核心场景

1. AEB 跟车场景(scenario_aeb_test.py)

两车场景。Ego 以巡航速度跟随 Lead,Lead 在某个时刻踩死刹车。评估 ego 能否在碰撞前刹停。这是 Euro NCAP 的 Car-to-Car AEB 基础测试项。

2. Cut-in 切入场景(scenario_cutin.py)

三车场景,复杂度大幅提升。Ego 在自己的车道巡航,前方有 Lead,相邻车道有一辆 Cut-in 车比 ego 稍快,在设定的时间点变道切入 ego 前方。这个场景要同时跟踪两个目标(Lead 和 Cut-in),AEB 要判断哪个更近、哪个更危险。

三车放置是个技术难点——不是直接取三个 spawn_point 就行的。我的方案:ego 占 spawn_point,Lead 用几何投影在 ego 前方同车道,Cut-in 从 spawn_points 中根据 road_id 和 lane_id 动态筛选相邻车道的点。

3. 行人横穿 AEB(scenario_pedestrian.py)

CARLA 里行人和车辆是不同的 actor 类型。行人 spawn 需要 walker blueprint 和 WalkerController。这个场景最大的坑是AEB 制动后 ACC 重新加速——后面会详细讲。

所有场景都集成了 CAN 日志输出,每个 tick 记录 7 帧 CAN 报文到 .asc 文件。


CAN 总线设计思路

面试官大概率会问"为什么选这 7 个 CAN ID",提前准备一下我的设计逻辑:

  • 0x0C0 车速 + 0x1A4 油门 + 0x1A0 制动:这三者构成纵向控制闭环,任何一个场景都能据此评估控制质量
  • 0x0C4 转向角 + 0x200 横摆角速度:横向控制的输入和输出,评估车道保持能力
  • 0x220 纵向加速度:二重导数,能捕捉制动的瞬态响应(刹车踩下到实际减速之间的延迟)
  • 0x300 雷达目标:AEB 的核心感知数据,记录 ego 前方最近目标的距离和相对速度

选择 Vector .asc 格式是因为它是汽车电子行业的事实标准——CANalyzer/CANoe 不认 csv 和 json,只认 .asc/.blf。这也意味着你的测试数据可以直接交给标定工程师做进一步分析,这正是台架测试开发的日常工作流。


关键数据指标

以行人 AEB 场景为例,一次通过的测试结果:

指标数值
触发 TTC2.8 s
最小距离4.2 m
最大制动力1.0(满刹)
场景耗时12.3 s
CAN 帧数~1720 帧
测试结论PASS(无碰撞)

批量测试框架跑 80 组参数,可以直接生成热力图,一眼看出哪些速度 + 间距 + 减速度组合会触发碰撞(FAIL),哪些安全通过(PASS)。这对调参和系统安全边界分析非常有用。


项目收获

做完这个项目,我对台架测试开发的理解从"大概知道"变成了"亲手做过":

  1. 仿真 ≠ 点一下 Play。自动化场景运行要考虑状态机、重置逻辑、异常处理,以及 headless 模式下没有 UI 时怎么验证结果。
  2. CAN 总线是仿真和真实台架的桥梁。理解 CAN ID 设计、信号分辨率、报文周期,这些知识在 HIL 测试中直接复用。
  3. 踩坑是最快的学习方式。spawn_actor 的 (0,0,0) 问题、AEB 制动后重新加速、CARLA server 损坏——每一个坑都让我对引擎机制的理解深了一层。

代码和完整文档都在 GitHub:github.com/chuyue-setsnua/carla-adas-test-platform。下一篇我会专门写这个项目里踩过的坑和修复过程,那些才是面试时最能让面试官点头的内容。

http://www.jsqmd.com/news/1165993/

相关文章:

  • AI如何自动识别PDF转换废标风险?智能评审项目实践
  • 招投标公告结构化解析中的序列标注方案设计与工程实践
  • RT-Thread Studio 2.2.6 + J-Link V11 调试 STM32F103RG:3步解决下载成功但无法仿真问题
  • 突破3D打印壁垒:5步为Blender添加专业级3MF格式支持
  • 硬件调试利器:ARM CoreSight 调试架构与 ETM 指令追踪在死循环定位中的实战拆解
  • Pytest的常⽤运⾏⽅式
  • Claude Code权限配置失效的7大致命错误:从越权访问到审计断层,一线攻防团队实测复盘
  • AI+零售实战:从智能巡店到数据中台,重塑零售业数字化转型
  • Hermes Agent 48项能力训练指南:从入门到生产可用
  • 【Kafka】Kafka 4.1.0版本安装、配置和服务启动问题解决过程记录
  • i.MX6ULL移植OpenWrt实战:eMMC启动、设备树修补与内核裁剪
  • GEO企业服务技术评估与选择指南
  • 为什么你的Claude Code重构总卡在“语义一致性校验”?揭秘LLM代码理解层的3层抽象漏洞(附调试沙箱)
  • ClaudeCode:面向工程理解的AI编程协作者
  • Unity动态合批原理与实战:性能优化的双刃剑使用指南
  • Muse Image扩散模型解析:从原理到社交平台集成实践
  • MATLAB 数组运算与矩阵运算:5个关键场景对比与性能实测
  • Cesium Primitive 加载 20万地下管线:4种几何实例绘制与性能实测
  • Python全套实战项目:从脚本小子到系统构建者
  • OCL/OTL/BTL 3类互补功放电路对比:效率、失真与电源方案实测分析
  • HOLLiAS MACS-K DCS 冗余架构实战:1:1热备控制器50ms无扰切换配置详解
  • GLM-5.2视觉角色扮演实战:多模态大模型在硅基流动平台的部署指南
  • Unity项目Library/Artifacts文件夹清理与优化实战指南
  • FastBee 2.0 开源版部署实战:Docker Compose 一键部署,10分钟完成物联网平台搭建
  • Anaconda Python 3.9 环境:TensorFlow 2.x CPU/GPU 双版本一键切换方案
  • AD7175-8与STM32L4S5ZI高精度数据采集系统设计指南
  • UE5材质实例化:7种常用材质参数化设计与性能优化
  • 企业动态首页插件技术解析:基于JVS低代码的多角色个性化工作台实现
  • 2025年C++性能调优:从代码优化到系统级优化的思维转变与实践
  • Turbo Intruder:Python驱动的高并发Web安全测试利器