一、CARLA仿真器入门: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为例)
- 下载CARLA包——去官网下载预编译包,大概2-3GB
- 解压——
tar -xzf CARLA_0.9.13.tar.gz - 安装依赖——
pip install -r requirements.txt - 启动服务端——
./CarlaUE4.sh - 启动客户端——运行Python脚本连接
小技巧:我个人习惯把CARLA的路径加到.bashrc里,这样随时都能启动。另外,如果你用Windows,记得关闭杀毒软件,不然解压时可能会误删文件。
1.3 基本架构:一张图看懂CARLA
CARLA的架构其实不复杂。我画了一张图,你看完就明白了。
你看,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配置,使用时先跑通最简单的示例脚本。