1. CARLA仿真器入门

1.1 什么是CARLA?我为什么选它?

说实话,我第一次接触CARLA是在2019年。那时候团队要做自动驾驶决策算法验证,但实车测试成本太高,一天烧掉几万块都是常事。后来我发现了CARLA——一个开源的自动驾驶仿真器。

CARLA的全称是「Car Learning to Act」。它基于Unreal Engine 4开发,说白了就是给你一个虚拟世界,让你在里面跑自动驾驶算法。你可以在里面放车、放行人、调天气、改光照,甚至模拟传感器噪声。

我个人觉得,CARLA最大的优势在于三点:

  • 开源免费——不像某些商业仿真器,一套license几十万
  • 场景丰富——内置了城镇、高速公路、乡村道路等多种地图
  • 接口灵活——支持Python API,方便和深度学习框架对接

核心定位:CARLA不是用来做最终验证的,而是用来做算法快速迭代和初步验证的。我在项目中经常把它和实车测试搭配使用——先在CARLA里跑1000个场景,没问题了再上实车。

1.2 安装与配置:那些年我踩过的坑

嗯,这里我要重点说说安装。CARLA的安装其实不复杂,但有几个坑我当年都踩过,你注意避开。

系统要求

组件 最低配置 推荐配置
操作系统 Ubuntu 18.04 / Windows 10 Ubuntu 20.04
GPU NVIDIA GTX 1060 NVIDIA RTX 3070+
内存 16 GB 32 GB
硬盘 20 GB 空闲 SSD 50 GB+

我曾经踩过的坑:第一次装CARLA时,我用的是一块GTX 1050 Ti显卡,结果启动后帧率只有个位数,根本没法用。后来才发现,CARLA对GPU要求其实挺高的。如果你用笔记本,记得插电源、开独显模式。

安装步骤(Ubuntu 20.04为例)

  1. 下载CARLA包——去官网下载预编译包,大概2-3GB
  2. 解压——tar -xzf CARLA_0.9.13.tar.gz
  3. 安装依赖——pip install -r requirements.txt
  4. 启动服务端——./CarlaUE4.sh
  5. 启动客户端——运行Python脚本连接

小技巧:我个人习惯把CARLA的路径加到.bashrc里,这样随时都能启动。另外,如果你用Windows,记得关闭杀毒软件,不然解压时可能会误删文件。

1.3 基本架构:一张图看懂CARLA

CARLA的架构其实不复杂。我画了一张图,你看完就明白了。

CARLA 仿真器核心架构 服务端 (Server) Unreal Engine 4 渲染引擎 负责物理模拟、传感器渲染、场景管理 世界管理器 (World Manager) 管理地图、天气、交通流、行人 传感器管理器 摄像头、LiDAR、雷达、GPS、IMU RPC 通信接口 (端口 2000) 客户端 (Client) Python API 接口 控制车辆、读取传感器、管理场景 自动驾驶算法 感知、规划、控制模块 数据记录与分析 保存传感器数据、分析算法表现 RPC 通信接口

你看,CARLA采用的是经典的客户端-服务端架构。服务端负责渲染和物理模拟,客户端通过Python API发送指令。这种架构的好处是——你可以把服务端跑在一台高性能机器上,客户端在另一台机器上开发算法。

1.4 核心概念:你必须搞懂的几个东西

刚开始用CARLA时,有几个概念我花了好几天才搞明白。这里给你梳理一下:

1.4.1 World(世界)

World是CARLA里最顶层的对象。它管理着地图、天气、车辆、行人等一切。你想想看,每次启动仿真,你首先要做的就是获取World对象:

import carla

# 连接服务端
client = carla.Client('localhost', 2000)
client.set_timeout(10.0)

# 获取世界
world = client.get_world()

1.4.2 Blueprint(蓝图)

Blueprint就是对象的模板。你要生成一辆车,得先选一个Blueprint。CARLA内置了各种车型、传感器、行人的蓝图。

# 获取车辆蓝图
vehicle_bp = world.get_blueprint_library().find('vehicle.tesla.model3')

# 获取摄像头蓝图
camera_bp = world.get_blueprint_library().find('sensor.camera.rgb')

个人经验:我建议你先把蓝图库打印出来看看,熟悉一下有哪些可用的模型。有时候你想要的车型可能没有,得找个替代品。

1.4.3 Actor(参与者)

Actor是World里所有动态对象的统称。车辆、行人、传感器都是Actor。生成Actor后,你可以控制它的运动、读取它的状态。

# 生成车辆
vehicle = world.spawn_actor(vehicle_bp, transform)

# 生成摄像头并附着在车上
camera = world.spawn_actor(camera_bp, transform, attach_to=vehicle)

# 控制车辆
vehicle.apply_control(carla.VehicleControl(throttle=0.5, steer=0.0))

1.4.4 Sensor(传感器)

传感器是自动驾驶算法的眼睛。CARLA支持多种传感器:

传感器类型 输出数据 典型用途
RGB摄像头 图像 (HxWx3) 目标检测、语义分割
LiDAR 点云 (Nx3) 3D目标检测、建图
雷达 目标列表 障碍物检测
GPS 经纬度 定位
IMU 加速度、角速度 姿态估计

1.4.5 天气与场景

CARLA的天气系统很强大。你可以调晴天、雨天、雾天、夜晚,甚至动态切换。我在做算法鲁棒性测试时,经常用这个功能:

# 设置天气
weather = carla.WeatherParameters(
    cloudiness=80.0,
    precipitation=60.0,
    sun_altitude_angle=30.0
)
world.set_weather(weather)

避坑指南:我曾经在测试中只用了晴天场景,结果算法一到雨天就崩了。后来我养成了习惯——至少测试5种不同天气下的表现。你想想看,自动驾驶要是下雨天就失灵,谁敢坐你的车?

1.5 第一个Python脚本:让车跑起来

说了这么多,我们来写个最简单的脚本。让一辆车在CARLA里直线行驶:

import carla
import time

# 连接服务端
client = carla.Client('localhost', 2000)
client.set_timeout(10.0)

# 获取世界和蓝图
world = client.get_world()
bp_lib = world.get_blueprint_library()

# 选择车辆
vehicle_bp = bp_lib.find('vehicle.audi.a2')

# 找个出生点
spawn_points = world.get_map().get_spawn_points()
transform = spawn_points[0]

# 生成车辆
vehicle = world.spawn_actor(vehicle_bp, transform)

# 让车动起来
vehicle.apply_control(carla.VehicleControl(throttle=0.5, steer=0.0))

# 跑5秒
time.sleep(5)

# 清理
vehicle.destroy()

这段代码虽然简单,但包含了CARLA的核心流程:连接→获取World→选择Blueprint→生成Actor→控制→清理。你把这个流程跑通了,后面的事情就好办了。

小提示:记得在运行脚本前先启动CARLA服务端。我刚开始时经常忘了这步,然后脚本报错半天找不到原因。

好了,第一章的内容就到这里。CARLA的基本概念和安装配置你都了解了,接下来就可以动手试试了。记住,仿真器只是个工具,真正重要的是你用它来验证什么算法、解决什么问题。

一句话总结:CARLA是一个开源、灵活、功能丰富的自动驾驶仿真器。它的核心是客户端-服务端架构,通过Python API让你控制虚拟世界中的车辆和传感器。安装时注意GPU配置,使用时先跑通最简单的示例脚本。