构建系统
设置中最具挑战性的部分是编译所有依赖项和模块,使其与 a) 服务器端的虚幻引擎 和 b) 客户端的 Python 兼容。
目标是能够从单独的 Python 进程调用虚幻引擎的函数。
在 Linux 中,我们使用 clang-8.0 和 C++14 标准编译 Carla 和所有依赖项。然而,我们根据代码的使用位置来链接不同的运行时 C++ 库,因为所有将与虚幻引擎链接的代码都需要使用 libc++
进行编译。
设置
命令
make setup
获取并编译依赖项
- llvm-8 (libc++ and libc++abi)
- rpclib-2.2.1 (twice, with libstdc++ and libc++)
- boost-1.72.0 (headers and boost_python for libstdc++)
- googletest-1.8.1 (with libc++)
依赖检查
建议在构建前运行依赖检查脚本,确保环境无误
./Util/CheckDependencies.sh
该脚本会检测:
- clang 和 clang++ 版本
- Python 和 pip 版本
- boost, llvm, rpclib 是否存在
- Unreal Engine 路径是否配置正确 (UE4_ROOT 环境变量)
LibCarla
使用 CMake 编译(最低版本需要 CMake 3.9)。
命令
make LibCarla
两种配置:
服务器 | 客户端 | |
---|---|---|
单元测试 | 是 | 否 |
要求 | rpclib, gtest, boost | rpclib, boost |
标准运行时 | LLVM's libc++ |
默认 libstdc++ |
输出 | 头文件和carla_server.lib |
carla_server.lib |
需要 | Carla plugin | PythonAPI |
CarlaUE4 和 Carla 插件
两者均使用虚幻引擎构建工具在同一步骤进行编译。它们需要 UE4_ROOT
环境变量。
命令
make CarlaUE4Editor
要启动虚幻引擎的编辑器,请运行
make launch
编译 0.9.15 时候出现carla/Unreal/CarlaUE4/Plugins/CarlaTools/Source/CarlaTools/Private/Online/CustomFileDownloader.cpp(11): fatal rror C1083: 无法打开包括文件: “OSM2ODR.h”: No such file or directory
解决:将 Carla 0.9.14 版本中的 Build/osm2odr-visualstudio 文件夹复制到 0.9.15 版本中对应的 carla/Build/ 目录下。
PythonAPI
0.9.12+ 版本
使用 Python 的 setuptools
("setup.py") 编译。 目前需要在机器上安装以下软件:Python, libpython-dev, 和
libboost-python-dev, pip>=20.3, wheel, 和 auditwheel。
命令:
make PythonAPI
创建两个文件,每个文件包含客户端库并对应于系统上支持的 Python 版本。一个文件是 .whl
文件,另一个文件是 .egg
文件。这允许选择两种不同的、互斥的方式来使用客户端库。
A. .whl 文件
.whl
使用以下命令安装:pip install <wheel_file>.whl
无需像以前版本或
.egg
文件中那样直接在脚本中导入库路径 (请参阅 __0.9.12_之前的版本_);import carla
就足够了。B. .egg 文件
请参阅 0.9.12 之前的版本 了解更多详细信息。
0.9.12 之前的版本
使用 Python 的 setuptools
("setup.py")编译。 目前需要在机器上安装以下软件: Python, libpython-dev, 和
libboost-python-dev。
命令
make PythonAPI
它创造了两个 "egg" 包
PythonAPI/dist/carla-X.X.X-py2.7-linux-x86_64.egg
PythonAPI/dist/carla-X.X.X-py3.7-linux-x86_64.egg
通过将其添加到系统路径,可以将该包直接导入到 Python 脚本中。
#!/usr/bin/env python
import sys
sys.path.append(
'PythonAPI/dist/carla-X.X.X-py%d.%d-linux-x86_64.egg' % (sys.version_info.major,
sys.version_info.minor))
import carla
# ...
或者,可以使用 easy_install
安装
easy_install2 --user --no-deps PythonAPI/dist/carla-X.X.X-py2.7-linux-x86_64.egg
easy_install3 --user --no-deps PythonAPI/dist/carla-X.X.X-py3.7-linux-x86_64.egg
常见问题与解决方案
问题描述 | 解决方法 |
---|---|
找不到clang-8 | 手动安装:sudo apt install clang-8 |
Unreal Engine | 确保设置正确的UE4_ROOT,并确认UE4已正确编译 |
ImportError: No module named carla |
检查 PythonAPI 是否正确编译并安装,检查 Python 版本对应关系 |
C++ 编译找不到 libc++ 相关头文件 | 确保 llvm-8 安装完整(特别是 libc++-dev,libc++abi-dev) |
PythonAPI make 失败(auditwheel 错误) | 升级 pip: pip install --upgrade pip 并重新安装 auditwheel |
快速开始
快速构建系统跑通Carla,简化步骤
1.克隆仓库并初始化子模块
bash
git clone https://your.repo.url/carla.git
cd carla
git submodule update --init --recursive
2.安装系统依赖
sudo apt update
sudo apt install -y clang-8 cmake python3-dev python3-pip \
libboost-python-dev llvm-8-dev \
libpython3-dev
pip install --upgrade pip wheel auditwheel
make setup # 下载并编译 llvm, rpclib, boost, gtest
make LibCarla # 编译核心库
export UE4_ROOT=/path/to/UnrealEngine
make CarlaUE4Editor # 编译 UE4 项目与插件
make PythonAPI # 构建并打包 Python 客户端
python3 - <<EOF
import carla
client = carla.Client('localhost', 2000)
world = client.get_world()
print("World map:", world.get_map().name)
EOF