1. 项目概述:为什么在Win11上部署CARLA 0.9.12是个“技术活”?
如果你是一个自动驾驶、机器人仿真或者游戏开发领域的开发者,那么CARLA这个名字对你来说肯定不陌生。作为一个开源的自动驾驶仿真平台,它基于虚幻引擎(Unreal Engine)构建,提供了高度逼真的城市环境、灵活的传感器模拟和丰富的API,是算法验证和系统测试的利器。然而,当项目标题指向“Windows11”和“CARLA 0.9.12”时,任何一个有经验的从业者都会立刻意识到,这趟旅程绝不会轻松。这不仅仅是简单的“下载-安装-运行”,而是一次对系统兼容性、依赖管理、编译工具链和问题排查能力的综合考验。
我之所以想写这篇东西,是因为在过去几年里,我亲眼见过也亲身经历过太多团队和个人在搭建CARLA环境时折戟沉沙。尤其是在Windows系统上,官方文档的指引往往过于理想化,而社区里零散的解决方案又良莠不齐。CARLA 0.9.12是一个比较经典的版本,它稳定、功能相对完善,但它的依赖——特别是Python 3.7和特定版本的UE4——与如今主流的Windows 11、Python 3.8+乃至UE5生态存在着天然的“代沟”。你遇到的每一个报错,背后可能都纠缠着路径问题、环境变量冲突、编译器版本不匹配、动态链接库缺失等一堆“陈年老坑”。
所以,这篇内容的目的非常直接:手把手带你走通从一台干净的Windows 11系统,到成功运行起CARLA 0.9.12仿真器的完整路径。我会把重点放在那些官方文档一笔带过、但实际操作中一定会卡住你的地方,比如如何无冲突地管理多个Python版本,如何搞定UE4的源码编译,以及如何解读和解决那些令人头疼的运行时报错。这不是一篇照本宣科的教程,而是一份融合了多次踩坑经验的“生存指南”。无论你是刚接触CARLA的学生,还是需要在Windows环境下快速搭建仿真平台的工程师,我希望接下来的内容能帮你省下大量搜索和试错的时间。
2. 核心思路与前置认知:理解CARLA 0.9.12的“技术债”
在动手之前,我们必须先理解我们要对付的“对手”。CARLA 0.9.12发布于2020年左右,其技术栈深深烙上了那个时代的印记。盲目安装只会导致一团乱麻,理清思路是关键。
2.1 CARLA 0.9.12的官方依赖“铁三角”
根据官方文档,CARLA 0.9.12在Windows上的构建与运行,严格依赖于三个核心组件,版本号几乎不可动摇:
- Python 3.7:这是CARLA客户端API(carla包)唯一官方支持的Python版本。尝试使用3.8、3.9或更高版本,在安装
carla的.whl文件时,极大概率会因ABI不兼容而失败。 - Unreal Engine 4.24/4.26:CARLA 0.9.12是基于UE4开发的。官方推荐使用4.24或4.26版本。请注意,它不支持UE5。标题中提到的“UE5安装”可能是一个常见的误解或搜索热词误导,我们必须明确:CARLA 0.9.12与UE5不兼容。后续的源码编译、地图制作都必须在这个版本的UE4编辑器中进行。
- Visual Studio 2019:用于编译C++源码(包括CARLA服务器和UE4插件)。需要安装“使用C++的桌面开发”工作负载,并确保包含Windows 10 SDK(版本号如18362或19041)。
这“铁三角”构成了一个相对封闭的旧环境。而我们的Windows 11系统,则是一个追求新运行库、新SDK的新环境。矛盾就此产生。
2.2 Windows 11带来的新挑战
Windows 11作为较新的操作系统,预装或默认更新的开发组件可能与旧工具链冲突:
- VC++ Redistributable:系统可能已安装更新的版本(如2015-2022的合并版本),可能与CARLA构建时链接的旧版本产生冲突。
- Windows SDK:CARLA 0.9.12可能依赖于较旧的Windows 10 SDK,而VS2019或系统可能倾向于使用更新的版本。
- 系统路径与环境变量:频繁安装不同版本的Python、VS等,会导致
PATH环境变量异常臃肿和混乱,引发“命令找不到”或“版本错误”等问题。
我们的核心思路,就是在Windows 11这个新舞台上,为CARLA 0.9.12搭建一个干净的、隔离的旧环境,并确保新老组件之间能够正确对话。
2.3 方案选型:为什么推荐“虚拟环境+源码构建”路线?
你可能在网上看到两种主要安装方式:1) 下载官方编译好的发布包;2) 从源码编译。对于Windows上的0.9.12,我强烈推荐从源码编译。
- 发布包的局限:官方提供的Windows发布包可能版本不全,或者其内置的Python绑定恰好与你的系统环境不匹配。更重要的是,你失去了自定义和调试的能力。当出现运行时崩溃时,你几乎无从下手。
- 源码编译的优势:
- 可控性:你能清晰看到所有依赖的获取和编译过程。
- 可调试性:你可以生成带调试符号的版本,在出现复杂崩溃时,有机会定位问题。
- 灵活性:你可以针对自己的需求进行小幅修改。
- 学习价值:通过编译,你能更深入地理解CARLA的模块构成。
当然,这条路更漫长,但换来的是一劳永逸的稳定性和掌控感。接下来,我们就将这条路线拆解为具体的、可操作的步骤。
3. 手把手环境搭建:打造专属的CARLA工作区
这一部分,我们将一步步搭建所有必需的环境。请严格按照顺序操作,并注意每一步的检查点。
3.1 阶段一:系统级基础准备
这个阶段的目标是安装大型、系统级的工具,避免后续干扰。
3.1.1 安装与配置Visual Studio 2019
- 前往Visual Studio官网,下载VS 2019 Community版安装程序。
- 运行安装程序,在选择工作负载时,必须勾选“使用C++的桌面开发”。
- 在右侧的“安装详细信息”中,确保勾选了以下组件:
- MSVC v142 - VS 2019 C++ x64/x86 生成工具
- Windows 10 SDK (选择版本号,如10.0.18362.0 或 10.0.19041.0,一个即可)
- C++ CMake 工具
- (可选但建议)C++分析工具、测试工具等。
- 完成安装。安装完成后,建议运行一次VS 2019,完成初始配置。
注意:避免同时安装多个版本的Visual Studio(如VS 2022),虽然理论上可以共存,但环境变量容易混乱。如果已有VS 2022,可以尝试,但优先保证VS 2019组件完整。
3.1.2 安装Git和CMake
- Git:从git-scm.com下载并安装。安装时,在“Adjusting your PATH environment”选项,建议选择“Git from the command line and also from 3rd-party software”,这将把Git添加到系统PATH。
- CMake:从cmake.org下载安装包(版本3.10以上即可)。安装时,务必勾选“Add CMake to the system PATH for all users”或“Add CMake to the system PATH for current user”。
安装完成后,打开一个新的命令提示符(CMD)或PowerShell,分别输入git --version和cmake --version,确认命令可用且版本正确。
3.2 阶段二:Python环境隔离管理
这是避免版本冲突的核心步骤。我们将使用conda来创建一个独立的Python 3.7环境。
3.2.1 安装Miniconda
- 访问Miniconda官网,下载适用于Windows 64位的Python 3.7版本安装包。注意,这里下载的是Miniconda安装程序,它自带一个基础的Python环境,我们选择对应Python 3.7的安装包是为了方便,后续会创建独立环境。
- 运行安装程序。安装路径建议选择非系统盘(如
D:\Miniconda3),并务必勾选“Add Miniconda3 to my PATH environment variable”。虽然这会污染系统PATH,但对于后续在各类终端中激活conda环境至关重要。另一个选项“Register Miniconda3 as my default Python 3.7”可以不勾选。
3.2.2 创建CARLA专用环境安装完成后,打开“Anaconda Prompt (Miniconda3)”。
- 首先,为了从国内镜像加速下载,执行以下命令添加清华镜像源(可选但强烈推荐):
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes - 创建一个名为
carla的Python 3.7环境:conda create -n carla python=3.7 - 激活这个环境:
激活后,命令行提示符前会出现conda activate carla(carla)字样,表示你已进入该隔离环境。后续所有与CARLA相关的Python操作(包括安装依赖、运行客户端脚本)都应在激活此环境后进行。
3.3 阶段三:获取并编译Unreal Engine 4.26
CARLA无法直接使用Epic Games启动器安装的UE4,必须使用源码编译的版本,并关联GitHub账户。
3.3.1 关联GitHub账户
- 访问虚幻引擎官网,注册并登录Epic Games账户。
- 在账户设置中,找到“连接”部分,关联你的GitHub账户。
- 接受虚幻引擎的贡献者许可协议。
3.3.2 克隆并编译UE4源码
- 在你选择的目录(如
D:\UE4)下打开命令提示符。 - 克隆UE4的源码仓库(此过程需要已关联GitHub):
这是一个超过2GB的仓库,下载时间较长。git clone -b 4.26 https://github.com/EpicGames/UnrealEngine.git - 进入克隆的目录:
cd UnrealEngine - 运行设置脚本,下载必要的依赖:
Setup.bat - 依赖下载完成后,开始生成项目文件并编译:
此步骤会生成GenerateProjectFiles.batUE4.sln等Visual Studio工程文件。 - 使用Visual Studio 2019打开
UE4.sln,或者直接在命令行编译:MSBuild UE4.sln /p:Configuration="Development Editor" /p:Platform="Win64" /m/m表示使用多核并行编译,可以加快速度。整个编译过程可能需要2-4小时,取决于你的CPU和硬盘速度。请耐心等待。
编译成功后,你会在UnrealEngine\Engine\Binaries\Win64目录下找到UE4Editor.exe。可以运行它测试UE4编辑器是否能正常启动。
3.4 阶段四:获取并编译CARLA 0.9.12
这是最核心,也是最容易出错的步骤。
3.4.1 克隆CARLA仓库
- 打开一个新的命令提示符(不需要在conda环境下,因为CARLA服务端是C++程序)。
- 选择一个合适的路径(如
D:\Projects),克隆CARLA 0.9.12的源码:git clone https://github.com/carla-simulator/carla.git cd carla git checkout 0.9.12
3.4.2 获取资产和更新子模块CARLA使用Git子模块来管理一些依赖库和资源。
- 获取预编译的资产(这是一个很大的下载,约10GB):
Update.bat - 初始化并更新Git子模块:
git submodule update --init --recursive
3.4.3 设置环境变量为了让构建脚本找到UE4,需要设置一个关键的环境变量UE4_ROOT。
- 在Windows搜索栏输入“环境变量”,打开“编辑系统环境变量”。
- 点击“环境变量”。
- 在“系统变量”或“用户变量”中,点击“新建”。
- 变量名:
UE4_ROOT - 变量值:你的UE4源码编译目录的绝对路径(例如:
D:\UE4\UnrealEngine)。 - 确认所有窗口。
3.4.4 编译CARLA
- 在CARLA根目录(
D:\Projects\carla)下,打开“VS2019的开发人员命令提示符”(在开始菜单中搜索“Developer Command Prompt for VS 2019”)。务必使用这个特殊的命令提示符,因为它已经配置好了VS2019的编译环境。 - 在命令提示符中,导航到CARLA目录(如果不在的话):
cd D:\Projects\carla - 执行构建命令:
或者,如果你想构建带调试信息的版本(运行慢但可调试):make buildmake debugmake脚本会依次编译LibCarla(C++客户端库)、CARLA服务器插件和Python API等。这个过程同样耗时较长(1-2小时)。
3.4.5 构建Python API客户端在CARLA服务端编译完成后,我们需要为之前创建的conda环境(Python 3.7)生成Python wheel包。
- 确保你已经激活了conda的
carla环境(在“Anaconda Prompt”中)。 - 在激活的
(carla)环境下,导航到CARLA目录。 - 执行Python API的构建和安装:
这个命令会在make PythonAPIPythonAPI\carla\dist目录下生成一个类似carla-0.9.12-cp37-cp37m-win_amd64.whl的文件。 - 安装这个wheel包到当前conda环境:
至此,CARLA的Python客户端库就安装到了你的隔离环境中。pip install PythonAPI\carla\dist\carla-0.9.12-cp37-cp37m-win_amd64.whl
4. 运行测试与核心问题排查实录
环境搭建完毕,到了最激动人心也最容易“见鬼”的环节——运行。我们分服务端和客户端来测试。
4.1 启动CARLA服务器(服务端)
CARLA服务器是一个UE4编辑器项目。我们需要用编译好的UE4编辑器来打开它。
- 找到CARLA项目文件:在CARLA源码根目录下,有一个
Unreal\CarlaUE4\CarlaUE4.uproject文件。 - 右键点击这个
.uproject文件,选择“生成Visual Studio项目文件”。这会在同目录下生成一个CarlaUE4.sln文件。 - 双击
CarlaUE4.uproject文件。系统应该会调用你之前编译的UE4编辑器(UE4Editor.exe)来打开这个项目。如果弹出选择编辑器版本的窗口,请手动定位到D:\UE4\UnrealEngine\Engine\Binaries\Win64\UE4Editor.exe。 - UE4编辑器启动并加载CarlaUE4项目。第一次加载会编译着色器,需要等待。
- 加载完成后,在编辑器界面点击工具栏的“播放”按钮(一个向右的三角形)。此时,CARLA服务器就开始运行了。你会看到一个城市场景的窗口。不要关闭这个UE4编辑器窗口,它就是服务器。
4.2 运行Python客户端脚本
保持服务器运行,我们来测试Python客户端连接。
- 打开一个新的“Anaconda Prompt”,激活
carla环境:conda activate carla。 - 导航到CARLA源码中的Python示例目录:
cd D:\Projects\carla\PythonAPI\examples。 - 运行一个简单的示例脚本,例如
automatic_control.py(这是一个自动驾驶演示):
如果一切顺利,你应该能看到UE4服务器窗口中的车辆开始自动行驶,同时客户端命令行会输出传感器数据等信息。python automatic_control.py
4.3 常见报错与解决方案速查表
在实际操作中,你几乎不可能一次成功。下面是我总结的、在Windows 11上部署CARLA 0.9.12时最高频的几个报错及其解决方法。
| 报错现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
运行make build时,编译失败,提示LNK1181: 无法打开输入文件“xxx.lib” | 1. 未在“VS2019开发人员命令提示符”中执行。 2. 环境变量 UE4_ROOT设置错误或未生效。3. UE4编译不完整,缺少某些模块的lib文件。 | 1.绝对确保在“Developer Command Prompt for VS 2019”中运行make命令。2. 在新开的命令提示符中执行 echo %UE4_ROOT%,检查路径是否正确。重启命令提示符或电脑使环境变量生效。3. 返回阶段三,确认UE4编译过程无报错,并尝试在VS2019中重新编译 UE4.sln的Development Editor配置。 |
运行make PythonAPI或pip install时,提示Python版本错误或ABI不兼容 | 1. 当前激活的Python环境不是3.7。 2. 使用了32位(win32)的Python,而CARLA wheel是64位(amd64)。 | 1. 在Anaconda Prompt中执行conda activate carla和python --version,确认版本为3.7.x。2. 确认Python是64位: python -c "import sys; print(sys.maxsize > 2**32)"应输出True。使用conda install python=3.7重新创建环境。 |
双击CarlaUE4.uproject后,UE4编辑器崩溃或无法打开 | 1..uproject文件关联的编辑器版本不对(关联到了Epic启动器安装的版本或UE5)。2. 项目文件损坏或生成不正确。 3. 显卡驱动问题。 | 1. 右键.uproject-> “打开方式” -> “选择其他应用” -> 浏览并定位到你编译的UE4Editor.exe,并勾选“始终使用此应用打开 .uproject 文件”。2. 删除 CarlaUE4目录下的Binaries、Intermediate、Saved文件夹以及CarlaUE4.sln文件,然后重新右键“生成Visual Studio项目文件”。3. 更新显卡驱动到最新稳定版。 |
| UE4编辑器能打开,但点击“播放”后,场景是空的(灰色或黑色),或客户端无法连接 | 1. 资产未正确下载或加载。 2. 服务器默认地图未设置或加载失败。 3. 客户端连接参数错误。 | 1. 确保运行过Update.bat且下载完整。检查Unreal\CarlaUE4\Content\Carla目录下是否有Maps、Static等子目录及内容。2. 在UE4编辑器的“世界场景设置”中,确保“游戏模式重载”设置为 CarlaGameModeBase。在客户端脚本中,确保连接参数正确:client = carla.Client('localhost', 2000)。3. 在客户端脚本中尝试增加连接超时: client.set_timeout(10.0)。 |
Python客户端脚本运行时,导入carla成功,但连接时提示timeout或connection refused | 1. CARLA服务器(UE4编辑器)未在“播放”模式运行。 2. 防火墙阻止了端口2000(默认RPC端口)和2001(默认流式端口)。 3. 服务器和客户端不在同一台机器,或IP地址设置错误。 | 1. 确认UE4编辑器窗口处于“播放”模式(工具栏按钮显示“停止”)。 2. 在Windows Defender防火墙中为UE4Editor.exe添加入站规则,允许TCP端口2000和2000-2002端口范围。 3. 如果是本地运行,使用 ‘localhost’或‘127.0.0.1’。 |
| 运行过程中,UE4编辑器或Python脚本突然崩溃,无明确错误 | 1. 内存不足。CARLA非常消耗内存。 2. 显卡显存不足。 3. 系统运行库(如VC++ Redist)冲突或缺失。 | 1. 关闭不必要的程序。在UE4编辑器的“编辑”->“编辑器偏好设置”->“性能”中,可以尝试降低一些预览设置。 2. 在CARLA客户端脚本中,降低渲染质量,减少同步传感器(如摄像头、激光雷达)的数量和分辨率。 3. 使用Visual Studio Installer,为VS2019修复或添加安装“Microsoft Visual C++ Redistributable”。也可以尝试从微软官网单独安装最新版的VC++ Redistributable。 |
4.4 进阶配置与优化建议
当基础功能跑通后,你可以考虑以下优化,让开发体验更好:
- 使用VSCode进行Python开发:在VSCode中,选择解释器路径为你的conda环境(
D:\Miniconda3\envs\carla\python.exe)。安装Python扩展后,可以获得代码提示、调试等功能。这对于编写复杂的自动驾驶算法脚本非常有帮助。 - 降低资源占用:在
CarlaUE4\Config目录下的DefaultEngine.ini中,可以调整渲染设置。例如,在[/Script/Engine.RendererSettings]部分下添加r.ScreenPercentage=70可以降低渲染分辨率比例,提升帧率。 - 制作自定义地图:你可以使用UE4编辑器编辑CARLA地图,或导入自己的OpenDRIVE地图。这需要学习UE4的地图编辑功能,但这是进行特定场景仿真的必经之路。
- 同步模式与异步模式:在Python客户端中,默认是异步模式。对于需要严格时序控制的算法测试,可以使用
world = client.get_world(); settings = world.get_settings(); settings.synchronous_mode = True; world.apply_settings(settings)开启同步模式,并用world.tick()来逐步推进仿真。
5. 总结与持续维护的心得
走完这一整套流程,你可能会觉得在Windows上部署CARLA确实是一项系统工程。我的体会是,整个过程的核心难点不在于某个步骤有多复杂,而在于环境的严格隔离与版本的高度匹配。一旦你成功搭建起来,这个环境其实是相当稳定的。
有几个小技巧可以帮你更好地维护这个环境:
- 善用Conda环境导出:在一切配置妥当后,可以在Anaconda Prompt中执行
conda env export -n carla > carla_env.yaml,将当前环境的精确配置导出到一个YAML文件。以后如果环境损坏,可以快速用conda env create -f carla_env.yaml重建。 - 备份关键目录:将完整编译成功的
UnrealEngine和carla目录打包备份。下次在新机器或重装系统后,可以省去大量的编译时间,只需重新设置环境变量和Python环境即可。 - 关注CARLA社区:GitHub Issues和Discord频道是解决问题的宝库。你遇到的绝大多数奇怪报错,很可能已经有人遇到并提供了解决方案。
最后,虽然过程曲折,但当你看到自己编写的Python脚本控制着UE4中逼真的车辆在虚拟城市中驰骋时,那种成就感足以抵消所有配置的烦恼。CARLA提供了一个无与伦比的仿真平台,让你能够在零风险的环境下测试感知、规划、控制等自动驾驶全栈算法。希望这份详尽的指南,能为你打开这扇大门,铺平最初也是最坎坷的一段路。如果在操作中遇到了本指南未覆盖的“新坑”,也欢迎在技术社区分享你的发现,这正是开源社区的魅力所在。