HUTB_air 从源码编译指南

前提条件

系统要求

  • 操作系统: Ubuntu 18.04 / 20.04 / 22.04 (推荐 22.04)
  • GPU: NVIDIA GPU,显存 >= 8GB (推荐 12GB+)
  • 内存: >= 32GB RAM
  • 磁盘: >= 100GB 可用空间
  • 显示: 需要 X11 显示服务 (或 VNC/Xvfb)

软件依赖

# 基础编译工具
sudo apt install build-essential cmake git clang-10 lld-10

# UE4 依赖
sudo apt install libvulkan1 vulkan-utils mesa-vulkan-drivers

# Python 环境
conda create -n simworld python=3.7
conda activate simworld
pip install carla==0.9.16 airsim numpy opencv-python pygame

源码位置

组件 路径
UE4 4.26 (CARLA fork) /mnt/data1/tianle/carla_ue4/
CARLA 源码 /mnt/data1/tianle/carla_source/
AirSim 插件 Unreal/CarlaUE4/Plugins/AirSim/
CarlaAir 核心文件 Plugins/AirSim/Source/SimWorldGameMode.h/.cpp

编译步骤

1. 设置环境变量

export UE4_ROOT=/mnt/data1/tianle/carla_ue4
cd /mnt/data1/tianle/carla_source

2. 编译 AirSim 模块(~100 秒)

# 仅编译 AirSim 插件(快速迭代时使用)
make CarlaUE4Editor ARGS="-module=AirSim"
# 或直接使用 Build.sh
./Util/BuildTools/BuildCarlaUE4.sh --build

3. 编译 CARLA 模块(~290 秒)

# 编译 CARLA 插件
make CarlaUE4Editor ARGS="-module=Carla"

4. 在 Editor 模式中运行(开发调试)

# 使用一键启动脚本
./carlaAir.sh                    # 默认 Town10HD, 1280x720
./carlaAir.sh Town03             # 指定地图
./carlaAir.sh Town10HD 1920 1080 # 指定分辨率

5. 打包 Shipping 构建(发布用)

# 完整打包流程(编译 ~805s + Cook ~2h)
./Util/BuildTools/Package.sh --config=Shipping --no-zip

# 输出目录
ls Dist/CARLA_Shipping_*/LinuxNoEditor/

注意: Package.sh 在最后 rsync PythonAPI wheel 时可能失败(因为 .whl 文件未构建),但这不影响主要构建。手动复制 PythonAPI 文件到输出目录即可。

6. 运行 Shipping 构建

cd Dist/CARLA_Shipping_*/LinuxNoEditor/
./CarlaUE4.sh /Game/Carla/Maps/Town10HD -nosound -carla-rpc-port=2000

关键配置文件

DefaultGame.ini

位于 Unreal/CarlaUE4/Config/DefaultGame.ini。打包时需要确保以下条目存在:

# AirSim 资源目录(必须)
+DirectoriesToAlwaysCook=(Path="/AirSim/Blueprints")
+DirectoriesToAlwaysCook=(Path="/AirSim/HUDAssets")
+DirectoriesToAlwaysCook=(Path="/AirSim/Models")
+DirectoriesToAlwaysCook=(Path="/AirSim/Weather")
+DirectoriesToAlwaysCook=(Path="/AirSim/StarterContent")
+DirectoriesToAlwaysCook=(Path="/AirSim/VehicleAdv")

# AirSim 地图
+MapsToCook=(FilePath="/AirSim/AirSimAssets")

settings.json

位于 ~/Documents/AirSim/settings.json,控制 AirSim 行为:

{
    "SettingsVersion": 1.2,
    "SimMode": "Multirotor",
    "Vehicles": {
        "SimpleFlight": {
            "VehicleType": "SimpleFlight",
            "AutoCreate": true
        }
    }
}

编译时间参考

步骤 时间 说明
AirSim 模块编译 ~100s 仅 AirSim 相关 C++
CARLA 模块编译 ~290s CARLA 插件 C++
Shipping 编译 ~805s 656 个编译单元
Cook (资源烘焙) ~2h 13459 个包
TaggedMaterials ~977s 实例分割材质
总计 (完整打包) ~3.5h 首次;增量编译更快

常见问题

Q: 首次启动非常慢(~10分钟)

A: 首次运行时 UE4 需要编译 DDC (Derived Data Cache) 和着色器。后续启动约 1 分钟。

Q: Package.sh 最后报错

A: 通常是 PythonAPI wheel rsync 失败(set -e 导致脚本中断)。主要的可执行文件和资源已经正确打包,手动复制 PythonAPI 即可。

Q: 打包后的构建缺少地图

A: 检查 DefaultGame.ini 中的 MapsToCook 条目。确保包含所有需要的地图。

Q: AirSim API 无法连接

A: 检查 ~/Documents/AirSim/settings.json 是否存在且格式正确。Editor 模式下需要等待 AirSim 端口 41451 就绪。