02 构建 UE4 与 CARLA

CARLA 0.9.16 基于 UE4.26(CARLA 的 fork)。先编 UE4,再编 CARLA。整个过程较长(数小时),且本教程环境踩了 4 个坑,都配有修复。

2.1 构建 Unreal Engine 4.26

CARLA 用的是 UE4.26 的专用 fork(含 CARLA 补丁)。需要 GitHub 账号关联 Epic Games 组织。

1
2
3
git clone --depth 1 -b carla https://github.com/CarlaUnreal/UnrealEngine.git ~/carla_project/UnrealEngine_4.26
cd ~/carla_project/UnrealEngine_4.26
./Setup.sh && ./GenerateProjectFiles.sh && make

⚠️ 不要用 make -j$(nproc),会失败。Clang 会自动用满核心。

验证:cd Engine/Binaries/Linux && ./UE4Editor 能打开编辑器即可。

设置环境变量(加到 ~/.bashrc / ~/.zshrc):

1
export UE4_ROOT=~/carla_project/UnrealEngine_4.26

2.2 克隆 CARLA 0.9.16

1
2
git clone -b 0.9.16 https://github.com/carla-simulator/carla.git ~/carla_project/carla
cd ~/carla_project/carla

下载 CARLA 资源(地图/车辆/行人,约几 GB):

1
./Update.sh

2.3 ⚠️ 构建 CARLA 前的 4 处修复

当前环境编 0.9.16 会踩 4 个坑,需先改源码/脚本。升级或换分支时注意保留这些修改。

修复 1:libpng 下载地址 404

Util/BuildTools/Setup.sh 里 libpng 的 sourceforge URL 已失效(404)。改成可用镜像:

1
2
- LIBPNG_REPO=https://sourceforge.net/projects/libpng/files/libpng16/${LIBPNG_VERSION}/libpng-${LIBPNG_VERSION}.tar.xz
+ LIBPNG_REPO=https://download.sourceforge.net/libpng/libpng-${LIBPNG_VERSION}.tar.xz

修复 2:PROJ 头文件 std::int64_t 找不到

PROJ 7.2.1 的 Build/proj-src/src/proj_json_streaming_writer.hpp 用了 std::int64_t 却没 #include <cstdint>,新 libstdc++ 下报错。

在该文件 #include <string> 后加一行:

1
#include <cstdint>

同时在 Util/BuildTools/Setup.sh 的 PROJ 段加守卫,避免重编时重新解压 tarball 覆盖补丁:

1
2
3
4
5
if [[ -d ${PROJ_SRC_DIR} ]] ; then
log "PROJ source already present; skipping download/extract to preserve patched source."
else
# 原来的 wget / tar / mv 逻辑
fi

⚠️ make clean 会删 Build/,PROJ 源码重新解压后补丁会丢失,需重新加 #include <cstdint>

修复 3:StreetMap 插件 git fetch 失败

Util/BuildTools/BuildUE4Plugins.sh 每次构建会 git fetch StreetMap。若 GitHub 不可达会卡住。StreetMap 已在正确 commit,fetch 是空操作,关掉即可:

1
2
- GIT_PULL=true
+ GIT_PULL=false # GitHub 不可达,Streetmap 已在正确 commit,跳过 fetch

修复 4:MDL/SimReady 禁用

构建会下载 MDL SDK(NVIDIA packman),但该版本已下架,导致 mi/mdl_sdk.h 缺失。MDL/SimReady 转换器用于导出 USD/MDL(Omniverse 用),与跑仿真无关,构建时加 --no-simready 跳过。

2.4 编译 Python API 客户端

1
2
3
cd ~/carla_project/carla
export UE4_ROOT=~/carla_project/UnrealEngine_4.26
make PythonAPI

生成的 wheel 在 PythonAPI/carla/dist/,装到 conda 的 carla 环境:

1
2
conda activate carla
pip install PythonAPI/carla/dist/carla-0.9.16-cp310-*.whl

2.5 编译并启动服务端

1
make launch ARGS="--no-simready"

首次启动会编译着色器(较慢),编辑器打开后按 Play 开始仿真。用示例脚本测试:

1
2
3
conda activate carla
cd PythonAPI/examples
python3 generate_traffic.py # 生成交通

能看到画面里有车和人,说明 CARLA 构建成功。

日常没改代码时,可直接跑 editor 二进制启动(跳过 make 检查,更快):

1
2
~/carla_project/UnrealEngine_4.26/Engine/Binaries/Linux/UE4Editor \
~/carla_project/carla/Unreal/CarlaUE4/CarlaUE4.uproject -vulkan