
前段时间要在两台新机器上把仿真环境重新搭起来一台 Windows 工作站一台 Ubuntu 服务器。按理说 CARLA 0.9.16 的文档已经算写得比较全了但真正动手才发现CARLA 0.9.16 安装这件事的难点从来不在步骤多而在每一步的失败方式都不一样——Windows 上多半死在 Python 环境和显卡驱动Linux 上基本死在虚幻引擎编译和显存。我在两个平台上各花了大半天才跑通中间翻了不少论坛帖子、看了几十条报错最后整理出这套双平台的完整流程和排错对照表。这篇内容适合三类人第一次接触 CARLA、想快速把服务端跑起来看效果的要做感知或规控算法验证、需要稳定 Python API 环境的以及之前装过旧版本、想升级到 0.9.16 但被依赖版本劝退的。我会把每一步的意图讲清楚也会把那些官方文档一笔带过、但实际能把人卡住两三小时的细节全部摊开说。1. 装之前先想清楚0.9.16 难在哪、该走哪条路1.1 CARLA 在仿真链路里到底扮演什么角色先把定位说清楚不然装完了也不知道该拿它干嘛。CARLA 本质上是一个基于虚幻引擎构建的城市道路驾驶仿真器它提供三样东西一套带红绿灯、行人、非机动车和天气系统的城市场景一套简化但足够用的车辆动力学模型以及一整套通过 Python 暴露出来的控制接口和传感器接口。你可以用几十行代码在场景里刷出一辆车、挂上摄像头和激光雷达、按固定频率读取数据并下发油门刹车转向指令。它的价值在于可重复和可批量。真车采集一段数据成本高、场景不可复现、边缘情况基本靠运气而在仿真里你可以让同一段路口场景跑一万次每次换不同的光照、雨量、行人轨迹专门去喂那些训练集里稀缺的样本。做感知的人拿它生成带标注的图像和点云做规控的人拿它验证决策逻辑在极端工况下会不会崩做端到端模型的人拿它做闭环评测。所以它更像一个算法的试验台而不是一个游戏。理解这一点很重要因为它直接决定了你对安装质量的要求。如果你只是想看看画面、跑跑 demo预编译包足够了如果你要接自己的算法、改场景、加传感器那就必须走源码编译而且必须保证 Python API 和服务端版本严格一致——后面会反复强调这一点。1.2 为什么选 0.9.16 这个版本版本选择这件事我的建议一向是选团队里已经有人跑通的最近版本而不是无脑追新。0.9.16 相对 0.9.13/0.9.14 这一批老版本主要的价值在于 API 稳定性提升和渲染管线的一些修正传感器数据的时序对齐问题比早期版本好不少长时间跑数据采集不容易出现时间戳漂移。同时它对较新的 Python 版本支持更友好不必再死守 3.7。但反过来0.9.16 的坑也很明确它对虚幻引擎的分支版本有硬绑定官方给的是基于 4.26 的定制分支你必须用这一份不能用自己机器上装的其他版本引擎去凑。Windows 端的源码编译对 Visual Studio 版本和 Windows SDK 也有要求Linux 端则对 clang 版本敏感。这些在后面章节都会展开。还有一个常见误区很多人以为装了新版就把老版覆盖掉。实际上 CARLA 的不同版本在 API 上是有 breaking change 的比如某些传感器参数的命名、actor 的销毁时机、world tick 的行为。如果你手里的代码是照着 0.9.13 写的直接换 0.9.16 大概率要改。所以更稳妥的做法是不同版本并存用虚拟环境隔离需要哪个版本就激活哪个环境。1.3 三条安装路线怎么选我把可选路径整理成一张表你可以对照自己的需求直接定位。路线适用场景时间成本磁盘占用可修改性主要风险Windows 预编译包快速看效果、跑官方示例、纯 Python 开发30 分钟到 1 小时约 25-30 GB低只能改 Python 层显卡驱动、Python 版本不匹配Windows 源码编译需要改 C 层、加自定义传感器3-6 小时看机器60 GB 以上高VS/SDK 版本、编译中间产物污染Linux 源码编译服务器长期跑、批量采集、需要无头渲染首次 6-10 小时含引擎编译100 GB 以上高内存不足、clang 版本、Vulkan容器镜像团队统一环境、CI 里跑回归1-2 小时含拉取看镜像中显卡透传、镜像内版本与本地不一致这里给个直白建议如果你是第一次接触先在 Windows 上用预编译包把整条链路跑通包括启动服务端、连 Python 客户端、读一帧图像。这一步能帮你建立起服务端在跑、客户端在连的心智模型。等你确认自己确实需要改底层再去做源码编译否则很容易在编译阶段就被劝退还不知道问题出在哪。1.4 硬件和系统的底线清单这一节是硬指标达不到的话后面所有步骤都是白费力气所以放在最前面。项目最低建议说明操作系统Windows 10 64 位 / Ubuntu 20.04Windows 11 / Ubuntu 22.04必须是 64 位32 位系统直接放弃CPU4 核8 核以上编译引擎时核心数是决定性因素内存16 GB32 GBLinux 编译引擎低于 32 GB 极易被 OOM 杀掉显卡支持 Vulkan 或 DX116 GB 显存8 GB 显存以上独显集显基本跑不动 Epic 画质磁盘50 GB 可用200 GB SSD引擎编译中间产物非常占空间Python3.83.8 - 3.10版本必须和官方发布的 wheel 对得上关于显卡我要多说一句CARLA 的渲染压力比一般游戏大因为它要同时跑多路传感器渲染。6 GB 显存在 1080p、Epic 画质、单摄像头的情况下勉强够用一旦你挂上三个摄像头加激光雷达显存会迅速吃满表现为帧率骤降甚至进程崩溃。所以如果你的任务是多传感器融合显存这条线最好别省。2. Windows 平台安装全流程2.1 先花二十分钟把依赖对齐Windows 上的安装失败八成不是 CARLA 本身的问题而是依赖没对齐。我建议你在下载任何东西之前先把下面这几样确认一遍。首先是Visual C 运行库。预编译包虽然不需要你自己编译但它内部链接了 VC 运行时如果系统里缺 VCRUNTIME140 系列双击 exe 会直接弹窗报缺失 DLL。解决办法是装一个最新的Microsoft Visual C 2015-2022 可再发行组件包x64 版本装完重启。其次是显卡驱动。这里有个容易被忽略的点不是能玩游戏就行。CARLA 用到的部分渲染特性对驱动版本比较敏感老驱动可能出现启动后黑屏、或者跑几分钟后设备丢失对应报错里那种 DEVICE_REMOVED 的字样。我的做法是去显卡厂商官网下最新的 Game Ready 或 Studio 驱动全新安装勾选执行清洁安装装完用显卡控制面板确认一下驱动版本。第三是Python。这一步必须严格。CARLA 官方发布的 wheel 包是按 Python 小版本编译的比如 cp38 就是 Python 3.8cp310 就是 3.10。你装个 3.12 上去很可能找不到对应的包或者找到的是社区随便打的包跑起来一堆问题。我建议装 Python 3.8 或 3.10安装时勾选Add Python to PATH装完在命令行里敲python --version确认。第四是路径。这个坑我必须单独拎出来说CARLA 的整个目录路径里不要有中文、不要有空格、不要有特殊符号。虚幻引擎在编译和运行时会处理大量路径字符串一旦路径里有非 ASCII 字符某些环节会直接失败而且报错信息完全不指向路径问题你会查很久。我一般直接放在D:\CARLA_0.9.16这种根目录下。2.2 用预编译包把链路先跑通预编译包是官方打包好的、包含完整场景资源的压缩包解压即用不需要编译。下载下来的文件通常叫CARLA_0.9.16.zip体积在 10 GB 以上解压后 20 GB 出头所以要预留空间。解压完成后目录结构大概是这个样子CARLA_0.9.16/ ├── CarlaUE4.exe # 服务端主程序 ├── CarlaUE4/ # 资源与配置 ├── Engine/ # 引擎运行库 ├── PythonAPI/ │ ├── carla/ # Python 客户端源码 │ │ ├── dist/ # 打包好的 wheel / egg │ │ ├── examples/ # 官方示例脚本 │ │ └── agents/ # 自带的一些智能体实现 │ └── util/ └── Co-Simulation/ # 联合仿真相关双击CarlaUE4.exe启动第一次启动会比较慢因为要加载场景资源。启动成功的标志是出现一个可以自由飞行的城市视角窗口——这时候你看到的不是游戏而是服务端在等你连。窗口默认监听 2000 端口这个端口是后面所有 Python 脚本的连接入口。启动参数值得记几个实测很有用CarlaUE4.exe -quality-levelLow -windowed -ResX1280 -ResY720-quality-level可以取 Low / Epic调试阶段用 Low 能省一大半显存-windowed -ResX -ResY把窗口缩小方便你一边看画面一边看控制台输出。如果是纯数据采集不想看画面加-RenderOffScreen也能跑但 Windows 上这个参数偶尔会带来一些奇怪的渲染问题我一般还是开窗口。2.3 Python API 环境配置坑最多的一步这是 Windows 上最容易翻车的地方我几乎每次重装都要在这里卡一下。先说结论不要pip install carla。PyPI 上确实有一个叫 carla 的包但它不是这个 CARLA装了之后你会 import 到一个完全不相干的东西然后对着某某属性不存在的报错怀疑人生。正确的做法有两条路选一条即可。第一条是直接从 dist 目录装 wheel。进到PythonAPI\carla\dist目录你会看到一个类似carla-0.9.16-cp38-cp38-win_amd64.whl的文件文件名里的 cp38 就是它对应的 Python 版本。用对应版本的 pip 安装cd D:\CARLA_0.9.16\PythonAPI\carla\dist python -m pip install carla-0.9.16-cp38-cp38-win_amd64.whl装完验证python -c import carla; print(carla.__version__)能打印出版本号就说明装对了。如果报ModuleNotFoundError八成是你python和pip指向的不是同一个解释器用python -m pip install的形式可以强制对齐。第二条是用 PYTHONPATH 指向 egg 文件不安装到 site-packages 里。好处是环境干净多个版本可以共存切换时改个环境变量就行set PYTHONPATHD:\CARLA_0.9.16\PythonAPI\carla\dist\carla-0.9.16-py3.8-win-amd64.egg这种方式我更喜欢因为它不会污染全局环境。缺点是每次开新终端都要设一遍所以我会写一个env.bat放在桌面双击就把环境变量和常用路径都设好。注意如果你同时装了系统 Python 和 AnacondaPATH 里谁在前谁生效很容易出现我在 A 环境装了但 B 环境里 import 不到。查这个用where python会按 PATH 顺序列出所有解释器。2.4 源码编译什么时候需要走这条路只有三种情况你需要 Windows 源码编译要改 C 侧的传感器实现、要加自定义的地图或车辆模型、要用到官方预编译包里没开的功能。如果只是写 Python 脚本完全没必要预编译包的性能和功能是一样的。走这条路之前先把这些装上Visual Studio 2019 或 2022勾选使用 C 的桌面开发工作负载包含 MSVC 编译器和 Windows 10/11 SDK、.NET Framework 4.6.2 或更高、CMake3.20 以上建议 3.27、Git、以及虚幻引擎依赖的 DirectX SDK。DirectX SDK 这块要注意版本装错了会和系统里的 DX 组件冲突装完最好重启一次。流程本身不复杂git clone https://github.com/carla-simulator/carla.git cd carla git checkout 0.9.16 Update.bat Build.batUpdate.bat会下载依赖资源并生成一些中间文件Build.bat才是编译。这两个脚本都要跑很久中间会拉取大量资源包网络不稳定的环境下容易中断中断了重跑即可脚本本身有断点续传的逻辑。编译成功后用make launch启动。这里有个细节make launch走的是 Python 打包脚本需要 Python 环境里已经有 setuptools 等依赖如果它报找不到某个 module就去Util/BuildTools目录下看看对应的脚本需要什么单独补装一下。提示源码编译会产生几十 GB 的中间产物在Build和Unreal/CarlaUE4/Intermediate目录下。如果你只是临时编译一次验证能不能过编完可以清掉这些目录省空间但下次再编就要从头来。3. Ubuntu 平台安装实录3.1 系统、驱动与依赖包一次装齐Linux 这边我默认你用 Ubuntu 20.04 或 22.04桌面版和服务器版都可以服务器版后面会讲无头渲染怎么处理。先确认显卡驱动。nvidia-smi能正常输出就说明驱动在位。如果没有用系统自带的附加驱动工具装或者用官方仓库的驱动包装完务必重启。驱动版本别太老太老的驱动会导致 Vulkan 初始化失败而 CARLA 在 Linux 上默认走 Vulkan。然后是依赖包。官方文档给了一长串 apt 安装命令我把它整理成可以直接复制执行的一条sudo apt-get update sudo apt-get install -y build-essential clang lld cmake ninja-build \ libvulkan1 libgl1-mesa-glx libomp5 python3-dev python3-pip \ python3-wheel libpng-dev libtiff5-dev libjpeg-dev tzdata \ sed curl unzip autoconf libxml2-dev libglew-dev \ libboost-all-dev libssl-dev libsqlite3-dev git这里有几个点值得说明。clang和lld是虚幻引擎编译必需的Linux 上编译那套引擎用的是 clang 而不是 gcc版本对不上会出现各种链接错误libvulkan1是 Vulkan 运行时缺了它 CARLA 启动会直接报需要 Vulkan 支持然后退出libomp5是 OpenMP 运行时传感器并行计算会用到libboost-all-dev是个大包装起来慢但 CARLA 的某些模块确实依赖它。装完 clang 之后最好确认一下默认版本。多版本 clang 并存的机器上用update-alternatives指定一下sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-14 100 clang --version注意Ubuntu 22.04 自带的是 clang 1420.04 自带 clang 10。这两个版本在编译 4.26 那套引擎时都能过但如果你从别处装了更新的 clang 18 之类反而可能编译不过因为引擎源码里有些写法在新编译器下会变成错误。别追新用系统自带的。3.2 编译定制版虚幻引擎最耗时的一关CARLA 不能用你系统里随便哪个虚幻引擎必须用它维护的那份定制分支对应的引擎大版本是 4.26。这一步是整个 Linux 安装里最耗时的环节也是最容易失败的一环。克隆仓库的时候要注意用-b指定分支仓库地址在官方文档的 Linux 编译章节里给得很清楚我这里用占位说明git clone -b carla 定制引擎仓库地址 ~/UnrealEngine_4.26 cd ~/UnrealEngine_4.26 ./Setup.sh ./GenerateProjectFiles.sh makeSetup.sh会下载引擎依赖的第三方库这一步对网络要求比较高如果卡住可以重跑脚本会跳过已下载的部分。GenerateProjectFiles.sh生成工程文件。最后的make才是真正的编译。这里是最关键的避坑点内存。引擎编译是非常吃内存的默认会开满所有核心并行编译16 GB 的机器几乎必然在中途被系统 OOM killer 杀掉进程表现是编译到一半突然中断终端里看不到明显的 error只看到一个 Killed。我第一次遇到的时候以为是源码问题查了很久。解决办法有两个。一是加 swapsudo fallocate -l 16G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile free -h二是降低并行度用-j参数限制同时编译的任务数make -j48 核 32 GB 的机器用-j8比较稳16 GB 的机器建议-j4甚至-j2。并行度低意味着编译时间长但总比反复失败重来强。这一步在 8 核机器上大概要 2 到 4 小时慢的机器过夜也正常。3.3 编译 CARLA 本体与启动引擎编好之后CARLA 本体反而快了。克隆主仓库、切到对应 tag、拉资源、编译git clone https://github.com/carla-simulator/carla.git cd carla git checkout 0.9.16 ./Update.sh make launchUpdate.sh会下载场景资源、车辆模型、地图数据这部分体积很大网络不好会卡很久可以单独跑make import分步执行。make launch会先编译 Python API 再编译 UE 项目最后启动编辑器。如果你只想编译不启动用make package生成一个可以独立分发的包如果只想编译 Python API用make PythonAPI这个很快日常改 Python 代码用不到重新编译整个项目。编译 Python API 完成后产物在PythonAPI/carla/dist下装法和 Windows 一样pip3 install PythonAPI/carla/dist/carla-0.9.16-cp310-cp310-linux_x86_64.whl或者用 PYTHONPATHexport PYTHONPATH$PYTHONPATH:$HOME/carla/PythonAPI/carla/dist/carla-0.9.16-py3.10-linux-x86_64.egg3.4 无显示器的服务器怎么跑很多人是在远程服务器上装 CARLA没有物理显示器这时候直接启动会报找不到显示设备。有两种处理方式。第一种是用offscreen 渲染启动时加参数./CarlaUE4.sh -RenderOffScreen -quality-levelLow这个模式下服务端照常渲染只是不显示窗口传感器数据能正常拿到。我实测在服务器上跑数据采集就是这个模式稳定得很。第二种是装虚拟显示用 xvfb 创建一个虚拟屏幕sudo apt-get install -y xvfb xvfb-run -a -s -screen 0 1280x720x24 ./CarlaUE4.sh这种方式兼容性更好一些某些依赖真实显示上下文的插件在 offscreen 模式下会出问题用 xvfb 能绕过。提示无头环境下要注意 GPU 编号。多卡服务器上-graphicsadapter1可以指定用第二块卡避免和别人的任务抢同一张卡。查当前占用用nvidia-smi。4. 踩坑实录与排查速查表4.1 Windows 侧的高频故障启动即闪退、没有任何提示。优先怀疑显卡驱动和 Visual C 运行库。驱动太老、或者装了精简版驱动某些笔记本厂商的 OEM 驱动都会导致这个。排查方式是去事件查看器看应用程序日志通常能找到具体的异常模块名。如果异常模块是 nvoglv64 之类的显卡相关 DLL那基本就是驱动问题。能启动但画面全黑、帧率极低。先看任务管理器的 GPU 占用如果显存接近打满那就是画质太高。加-quality-levelLow试试。另一个原因是笔记本的双显卡切换程序可能跑在了集显上去显卡控制面板里把CarlaUE4.exe强制指定为高性能 GPU。ModuleNotFoundError: No module named carla。三种可能没装 wheel、装到了别的 Python 环境、或者 PYTHONPATH 设错了。按顺序排查python -c import sys; print(sys.executable)看是哪个解释器pip list | findstr carla看装没装echo %PYTHONPATH%看环境变量。连接超时客户端连不上服务端。检查 2000 端口有没有被占用netstat -ano | findstr :2000如果被别的进程占了要么杀掉要么启动服务端时用-carla-port2001换端口客户端连接时也要跟着改。另外 Windows 防火墙有时候会拦第一次启动时弹的允许提示要点允许访问。编译时报路径相关的奇怪错误。回到 2.1 节说的检查路径里有没有中文和空格。这个问题在编译阶段尤其常见因为编译脚本会把路径拼进命令行路径带空格时引号处理不当就会把路径截断。4.2 Linux 侧的高频故障编译引擎时进程被 Killed。内存不足按 3.2 节加 swap 或降并行度。这个错误最坑的地方在于它不报错只是静静地死掉。启动报 Vulkan 相关错误。检查三件事libvulkan1装了没、显卡驱动是不是正常nvidia-smi、用户有没有权限访问显卡设备ls -l /dev/dri。另外远程 SSH 会话里跑图形程序也可能出问题建议在本地终端或者用 xvfb。error: ‘numeric_limits’ is not a member of ‘std’。这是老版本引擎源码在新编译器下的经典问题缺头文件。解决办法要么换回系统自带的 clang 版本要么在报错的文件里手动加#include limits。我一般选前者因为手动改引擎源码后面再升级会很麻烦。Python API 装上了但 import 报符号错误。通常是 Python 版本和 wheel 不匹配。python3 --version确认版本然后去 dist 目录找对应 cp 号的包。Ubuntu 22.04 自带 3.1020.04 自带 3.8对不上就装个对应的 Python 或者用 conda 建个 3.10 的环境。跑一段时间后显存泄漏、进程被系统杀掉。长时间采集任务要定期重启服务端。我的做法是每跑 2 到 4 小时重启一次用脚本控制把重启逻辑写进采集流程里。这个不是配置能解决的属于引擎层面的资源管理问题接受它并绕过去。4.3 双平台通用问题速查现象最可能原因快速验证处理客户端报版本不兼容服务端与 Python API 版本不一致打印carla.__version__和服务端窗口标题卸载重装对应版本的 wheel传感器图像全黑相机没 spawn 成功或渲染质量异常切换到 RGB 相机看是否有画面检查 spawn 返回的 actor 是否有效帧率极低5 FPS画质过高或显存不足看 GPU 显存占用降 quality-level减传感器数量车辆不动没开交通管理器或没设控制打印车辆控制量检查是否调用了 apply_control时间戳不递增同步模式配置错误打印每帧 world.get_snapshot()配置 fixed_delta_seconds服务端启动后自动退出端口被占用或资源不足看终端最后几行输出换端口、降画质、查内存这张表我在排查时用得最多基本上遇到的八成问题都能在里面找到对应项。剩下两成里有一半是环境变量没生效另一半是版本错位这两种都可以通过新建一个干净的虚拟环境重装一遍来快速排除。5. 装完别急着写算法先做三步验证5.1 最小连通性验证装完之后我从来不会直接跑业务脚本而是先跑一个最小验证确认服务端在跑、客户端能连、能读到数据这条链路是通的。这个脚本我一般存成check.pyimport carla import time client carla.Client(127.0.0.1, 2000) client.set_timeout(10.0) world client.get_world() print(地图:, world.get_map().name) print(已加载的蓝图数量:, len(world.get_blueprint_library().filter(vehicle.*))) spectator world.get_spectator() print(观察者位置:, spectator.get_transform().location) # 简单挂一辆车验证 spawn 链路 bp world.get_blueprint_library().filter(vehicle.*)[0] spawn_point world.get_map().get_spawn_points()[0] vehicle world.spawn_actor(bp, spawn_point) print(已生成车辆:, vehicle.type_id, vehicle.id) time.sleep(2.0) vehicle.destroy() print(验证通过)这段代码覆盖了四个关键点连接、读世界信息、spawn 一个演员、销毁。四步都过说明基础环境没问题。如果卡在连接那是网络或服务端问题如果卡在 spawn那是场景资源或蓝图问题如果 destroy 报错那多半是版本 API 差异。5.2 渲染与传感器的冒烟测试第二步是给一辆车挂上相机确认渲染管线能出图。这一步很重要因为有些机器上服务端能跑、API 也能连但渲染一直失败表现就是相机回调永远不触发或者收到的图像全黑。import carla import numpy as np import time client carla.Client(127.0.0.1, 2000) client.set_timeout(10.0) world client.get_world() bp_lib world.get_blueprint_library() vehicle_bp bp_lib.filter(vehicle.*)[0] vehicle world.spawn_actor(vehicle_bp, world.get_map().get_spawn_points()[0]) cam_bp bp_lib.find(sensor.camera.rgb) cam_bp.set_attribute(image_size_x, 800) cam_bp.set_attribute(image_size_y, 600) cam_bp.set_attribute(fov, 90) cam_transform carla.Transform(carla.Location(x1.5, z2.0)) camera world.spawn_actor(cam_bp, cam_transform, attach_tovehicle) frames [] camera.listen(lambda image: frames.append(image)) time.sleep(3.0) print(收到帧数:, len(frames)) if frames: arr np.frombuffer(frames[-1].raw_data, dtypenp.uint8) arr arr.reshape((frames[-1].height, frames[-1].width, 4)) print(图像形状:, arr.shape, 平均亮度:, arr[:, :, :3].mean()) camera.destroy() vehicle.destroy()正常情况下 3 秒应该收到上百帧。如果帧数是 0先确认 listen 有没有生效、服务端窗口是不是在前台如果是图像全黑平均亮度接近 0那要查渲染质量设置和服务端有没有真的在渲染比如 offscreen 模式下窗口缩到最小可能出现渲染暂停。5.3 性能基准与调参手感验证通过之后我建议顺手做个性能基准把当前配置下的帧率记下来后面调参和排查都有个对照。关键参数就这么几个settings world.get_settings() settings.synchronous_mode True settings.fixed_delta_seconds 0.05 # 20 Hz world.apply_settings(settings)同步模式下仿真步长固定适合做算法评测因为每帧时间间隔确定异步模式下仿真按真实时间跑适合做可视化演示。帧率不达标时的调优顺序我的经验是先把quality-level降到 Low这一步通常能提升 2 到 3 倍帧率然后减少同时活动的传感器数量尤其是激光雷达这种开销大的再考虑降低图像分辨率最后才是换硬件。很多人一上来就想加显卡其实大部分场景下把画质降一档就够了。还有一个隐藏的性能杀手是场景里演员太多。有人喜欢一上来刷几百辆车觉得这样更真实结果帧率掉到个位数。实际上做感知验证二三十辆交通车加上几十个行人已经完全够用了密度再高对算法评测的边际收益很小但性能代价是线性上升的。6. 一些只有实际装过才会有的体会我在两台机器上折腾完之后最大的感受是CARLA 的安装问题几乎全部可以归为三类——版本错位、资源不足、路径污染。记住这三个词遇到任何报错先往这三个方向想能省下大量时间。版本错位包括 Python 版本、引擎版本、wheel 版本、API 版本之间的任意不匹配资源不足包括内存、显存、磁盘、端口路径污染就是中文、空格、权限这些。另外一个反直觉的经验Linux 上第一次装的时候不要追求一次成功。引擎编译那一步时间太长中途出任何问题都要从头判断所以我现在的做法是分步验证——先只装系统依赖跑一遍clang --version和vulkaninfo确认环境再单独编译引擎编完确认Engine/Binaries下有产物最后才编 CARLA。每一步都确认过了再往下走比一口气跑完然后对着几百行日志找错误高效得多。最后分享一个我一直在用的小技巧给每个版本单独建一个目录和一个 Python 虚拟环境目录名里带上版本号比如carla_0916虚拟环境也按版本命名。这样同一台机器上装三四个版本互不干扰切换时只要 activate 对应环境、改一下 PYTHONPATH 就行。代价是磁盘占用大一些但比起升级完老代码跑不起来还得回滚的痛苦这点空间花得很值。