1、Carla仿真基础:Carla简介、Carla架构、Carla安装与配置、Carla世界与地图

1.1 Carla是什么?—— 不止是个仿真器

说实话,我第一次接触Carla的时候,以为它就是个普通的3D游戏引擎改的仿真器。用了一段时间才发现,这东西比我想象的深得多。

Carla(Car Learning to Act)是一个开源的自动驾驶仿真平台。它基于Unreal Engine 4构建,专门为自动驾驶算法的开发、训练和验证而生。你想想看,在真实道路上测试自动驾驶算法,成本高、风险大、场景还不可控。Carla就是来解决这个问题的——它提供了一个高度逼真的虚拟世界,让你可以在里面安全地、反复地测试你的算法。

我个人习惯把Carla看作一个「虚拟试车场」。它不仅能模拟车辆动力学、传感器数据(摄像头、激光雷达、毫米波雷达等),还能控制天气、光照、交通流,甚至行人行为。我在项目中遇到过最头疼的问题就是传感器标定,Carla的传感器模型虽然不能100%替代真实硬件,但用来做算法原型验证,已经绰绰有余了。

核心定位:Carla = 开源 + 高保真 + 可编程 + 多传感器仿真

1.2 Carla架构—— 拆开看看里面长啥样

嗯,这里要注意,Carla的架构其实分两层:服务端和客户端。这个设计很有意思,我刚开始学的时候差点搞混。

  • 服务端(Server):负责渲染世界、模拟物理、管理传感器。它跑在Unreal Engine上,对显卡要求比较高。我建议至少配个RTX 3060以上的显卡,不然场景复杂了帧率会掉得很难看。
  • 客户端(Client):通过Python API控制服务端。你可以创建车辆、设置传感器、控制交通流,甚至改变天气。客户端和服务端之间走的是TCP/IP协议,所以理论上你可以把客户端跑在另一台机器上。

说白了,服务端就是那个「虚拟世界」,客户端就是你的「遥控器」。你通过Python脚本告诉服务端:「我要一辆车,装一个前视摄像头,然后让它沿着这条路开。」服务端就照做,然后把传感器数据传回来。

避坑指南:我曾经在项目里同时开了多个客户端连接同一个服务端,结果发现传感器数据串了。后来查文档才知道,每个客户端需要分配不同的端口。记住:一个服务端默认只支持一个客户端,多客户端需要自己实现端口转发。

1.3 安装与配置—— 别被第一步劝退

Carla的安装,说实话,是劝退很多人的第一步。我当年装的时候也折腾了大半天。这里我把关键步骤捋一遍。

1.3.1 系统要求

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

1.3.2 安装步骤

  1. 下载预编译包:去Carla官网的GitHub Releases页面下载对应系统的压缩包。我建议用预编译包,省去编译的麻烦。
  2. 解压:找个路径解压,比如 /home/yourname/Carla。注意路径不要有中文和空格。
  3. 启动服务端:进入Carla目录,运行 ./CarlaUE4.sh(Linux)或 CarlaUE4.exe(Windows)。第一次启动会编译着色器,大概要几分钟。
  4. 安装Python API:在Carla目录下的 PythonAPI/carla/dist 里找到 carla-0.9.xx-py3.7-linux-x86_64.egg,用pip安装:pip install carla-0.9.xx-py3.7-linux-x86_64.egg
注意:Python版本一定要匹配。Carla 0.9.13 对应 Python 3.7,0.9.14 对应 Python 3.8。我见过有人用Python 3.10装Carla 0.9.13,结果API调用各种报错。老老实实按文档来。

1.4 Carla世界与地图—— 你的虚拟试验场

Carla的世界,说白了就是一个可以编程控制的虚拟环境。你可以在里面做任何事:创建车辆、设置交通灯、改变天气、甚至让行人突然横穿马路。

1.4.1 世界对象(World)

在Carla里,一切操作都从 world 开始。它是整个仿真环境的根对象。我一般这样获取:

import carla

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

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

拿到 world 之后,你就可以做很多事情了:

  • world.get_actors():获取场景里所有物体(车辆、行人、传感器等)
  • world.get_map():获取当前加载的地图信息
  • world.set_weather():设置天气,比如晴天、雨天、大雾
  • world.tick():让仿真世界前进一步

1.4.2 地图(Map)

Carla自带了几张地图,最常用的是 Town01Town07。每张地图的侧重点不一样:

地图名 特点 适合场景
Town01 基础城镇,道路简单 新手入门、基础功能测试
Town03 有环岛、立交桥 复杂路口、变道测试
Town05 高速公路+城市道路混合 高速场景、多车道测试
Town07 乡村道路,狭窄多弯 非结构化道路测试

我个人习惯用Town03做路口测试,Town05做高速场景。你想想看,如果你的算法能在Town03的环岛里不出错,那基本就过了第一关。

1.4.3 天气系统

Carla的天气系统是我觉得最酷的功能之一。你可以实时调整:

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

我在做感知算法测试时,经常用这个功能来验证模型在不同光照和天气下的鲁棒性。有一次,我的模型在晴天表现很好,一到雨天就崩了。后来发现是训练数据里缺少雨天样本。Carla的天气系统帮我快速补上了这个短板。

小技巧:你可以用 world.get_weather() 获取当前天气参数,然后微调。比如只增加云量,不增加降雨,模拟多云天气。这样能更精细地控制测试条件。

1.5 小结—— 打好基础再上路

这一章的内容,说白了就是让你对Carla有个整体认识。安装配置虽然有点繁琐,但一次搞定后面就省心了。地图和天气系统是后续所有仿真场景的基础,建议你花点时间把每个Town都跑一遍,感受一下不同地图的布局和特点。

下一章,我们会真正动手写代码,在Carla里创建车辆、挂载传感器,开始我们的第一个仿真场景。嗯,到时候你会发现,前面这些基础工作,都是值得的。