第一讲:Carla仿真结果可视化与报告生成——课程介绍、环境搭建与数据准备

大家好,我是你们这门课的主讲。说实话,做自动驾驶仿真这么多年,我踩过的坑比走过的路还多。今天咱们要聊的这门课,说白了就是帮大家解决一个实际问题:仿真跑完了,结果怎么展示?报告怎么生成?

我个人习惯是,先看结果再讲原理。所以第一讲,咱们先把环境搭好,把数据准备好。别急,一步步来。

1.1 这门课到底讲什么?

先说说这门课的定位。它不是教你如何用Carla做仿真——那是另一门课的事。它要解决的是:仿真跑完之后,你怎么把数据变成有价值的报告

我遇到过不少团队,仿真跑了上千公里,结果就是一堆log文件。领导问「效果怎么样?」答不上来。你想想看,这多尴尬。

所以这门课的核心就三件事:

  • 可视化:把传感器数据、车辆轨迹、碰撞检测这些结果,用图表、动画展示出来
  • 分析:从数据里提取关键指标,比如平均速度、碰撞次数、路径偏差
  • 报告生成:自动生成PDF或HTML报告,方便分享和存档

说白了,就是让仿真结果「看得见、说得清、存得下」。

1.2 环境搭建——别在这步卡住

嗯,这里要注意。环境搭建往往是新手最容易放弃的地方。我刚开始做Carla开发时,光装依赖就折腾了两天。后来总结了一套「稳如老狗」的安装流程,分享给大家。

1.2.1 硬件要求

组件 最低配置 推荐配置
CPU 4核8线程 8核16线程
内存 16GB 32GB
显卡 GTX 1060 6GB RTX 3070 8GB
硬盘 50GB空闲 SSD 100GB
⚠️ 避坑指南: 我曾经用笔记本跑Carla,结果显存爆了,仿真直接崩掉。如果你用笔记本,建议先检查显卡是否支持CUDA。集成显卡基本没戏。

1.2.2 软件安装步骤

我个人习惯用Python 3.8 + Carla 0.9.14这个组合,兼容性最好。为什么?因为我在项目中试过3.10,有些库不兼容,折腾半天。

  1. 安装Carla:去官网下载预编译包,解压即可。别从源码编译,除非你想体验「编译两小时,报错一分钟」的快感。
  2. 创建虚拟环境
python -m venv carla_env
source carla_env/bin/activate  # Linux/Mac
carla_env\Scripts\activate     # Windows
  1. 安装依赖
pip install carla==0.9.14
pip install numpy matplotlib pandas
pip install opencv-python  # 图像处理
pip install fpdf2          # PDF报告生成
💡 小技巧: 安装carla包时,如果遇到网络问题,可以用国内镜像源:pip install carla -i https://pypi.tuna.tsinghua.edu.cn/simple

1.3 数据准备——仿真结果从哪来?

环境搭好了,接下来就是数据。你可能会问:「数据从哪来?」其实就两个来源:

  • 实时采集:仿真运行时,通过Carla的传感器接口实时获取数据
  • 离线日志:Carla可以记录仿真过程,生成.log文件,事后回放分析

我建议初学者先用离线日志,因为可以反复调试,不用每次都跑仿真。我曾经为了调试一个可视化脚本,跑了20遍仿真,后来发现用日志文件一次搞定。

1.3.1 启动Carla并记录数据

先启动Carla服务端:

./CarlaUE4.sh -quality-level=Low -fps=10

然后运行一个简单的客户端脚本,记录数据:

import carla
import time

client = carla.Client('localhost', 2000)
world = client.get_world()

# 设置记录器
client.start_recorder("simulation.log", True)

# 跑一段仿真
vehicle = world.spawn_actor(...)
vehicle.set_autopilot(True)
time.sleep(30)

# 停止记录
client.stop_recorder()
📌 关键点: start_recorder的第二个参数是additional_data,设为True可以记录更多信息,比如碰撞事件、交通灯状态。我建议一直开着,数据多了总比少了强。

1.3.2 数据文件结构

记录完成后,你会得到一个.log文件。但别急着打开——它是二进制格式,需要用Carla的API读取。数据内容大致包括:

数据类型 说明 频率
车辆状态 位置、速度、加速度、转向角 每帧
传感器数据 相机图像、激光雷达点云、GPS坐标 取决于传感器设置
事件记录 碰撞、车道偏离、交通灯违规 发生时记录
交通参与者 其他车辆、行人、自行车的位置和状态 每帧

1.3.3 读取日志文件

读取日志的代码也很简单:

import carla

client = carla.Client('localhost', 2000)
log_data = client.show_recorder_file_info("simulation.log", True)

# 解析每一帧
for frame in log_data:
    print(f"帧号: {frame.frame}, 时间: {frame.timestamp}")
    # 这里可以提取车辆位置、速度等
💡 实战经验: 如果你只想分析某一段仿真,可以用show_recorder_file_info查看时间范围,然后用start_replaying从指定时间开始回放。我在做碰撞分析时经常这么干,省时间。

1.4 数据预处理——别让脏数据坑了你

数据拿到手了,但别急着可视化。你想想看,仿真过程中难免有异常帧——比如车辆瞬移、传感器丢包。这些脏数据如果不处理,画出来的图表会误导人。

我遇到过最离谱的一次,仿真里一辆车突然飞到天上,然后掉下来。如果不做滤波,平均速度曲线会多出一个尖峰,看起来像「超音速汽车」。

所以,预处理这一步不能省:

  • 去除异常值:比如速度超过200km/h的帧,直接过滤掉
  • 插值补全:传感器丢包导致的数据缺失,用线性插值补上
  • 时间对齐:不同传感器的采样频率不同,需要对齐到统一时间轴
import pandas as pd
import numpy as np

# 假设data是DataFrame,包含时间戳和速度
# 去除速度大于50m/s的异常帧
data = data[data['speed'] < 50]

# 线性插值补全缺失值
data = data.interpolate(method='linear')

# 重采样到固定频率(10Hz)
data = data.set_index('timestamp').resample('0.1S').mean()
⚠️ 注意: 插值虽然好用,但别过度使用。如果连续缺失超过5帧,建议直接丢弃这段数据。否则插出来的数据会「看起来很平滑,实际上全是假的」。

1.5 课程后续内容预告

好了,第一讲的内容就到这里。我们搭好了环境,学会了记录和读取仿真数据,还做了基本的预处理。下一讲,我们会开始真正的可视化——用Matplotlib画出车辆的轨迹、速度曲线,甚至做一个简单的动画。

说实话,看到数据变成图表的那一刻,还是挺有成就感的。咱们下节课见。


公众号:蓝海资料掘金营,微信deep3321