CARLA 仿真系统搭建本节点的目标是在Ubuntu 22.04机器上完成 CARLA 0.9.16 的源码编译与环境配置使仿真器可正常运行Python API 可连接调用。一. 系统依赖与环境准备 (Ubuntu 22.04)此处已更新为 22.04 源 (jammy) 及 Python 3.10 建议。# 1.1 更新系统源 sudo apt-get update sudo apt-get install wget software-properties-commonUbuntu 22.04 (Jammy) 官方 LLVM 源中已经移除了 Clang 10。因此 UE4.26 在 Ubuntu 22.04 上编译时可以使用Clang 11或Clang 12替代 Clang 10。CARLA 的 UE4 分支通常兼容 Clang 11。我们需要安装 Clang 11 并将其设置为系统默认编译器同时清理错误的 apt 源以避免后续更新报错。安装 Clang 11 和 LLD 11Ubuntu 22.04 默认源中直接包含 Clang 11无需添加额外 LLVM 源sudo apt-get install -y clang-11 lld-11配置系统默认编译器 (update-alternatives)UE4 编译脚本通常调用clang和clang我们需要将它们指向版本 11# 配置 clang sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-11 100 sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-11 100 # 配置 lld (链接器) sudo update-alternatives --install /usr/bin/lld lld /usr/bin/lld-11 100 sudo update-alternatives --install /usr/bin/ld.lld ld.lld /usr/bin/ld.lld-11 100 # 验证版本 clang --version # 输出应显示 version 11.x.x补充 UE4.26 编译所需的其他依赖Ubuntu 22.04 默认可能缺少 UE4.26 需要的一些旧版库或开发包请确保以下包已安装sudo apt-get install -y build-essential cmake ninja-build libvulkan1 python3-dev python3-pip \ libpng-dev libtiff5-dev libjpeg-dev tzdata sed curl unzip autoconf libtool rsync libxml2-dev \ libssl-dev libcurl4-openssl-dev libpng16-16 libfreetype6-dev libfontconfig1-dev \ libxi-dev libxcursor-dev libxinerama-dev libxrandr-dev libasound2-dev libpulse-dev \ libglu1-mesa-dev libgl1-mesa-dev libudev-dev libdbus-1-dev libgtk-3-dev libatspi2.0-dev注意关于g-7在 Ubuntu 22.04 上安装g-7非常困难且不稳定。由于我们已配置clang为默认编译器UE4 将主要使用 Clang 进行编译因此可以跳过g-7的安装。二. Python 环境配置 (关键修正)安装Anoconda环境并创建虚拟环境下载安装脚本建议在家目录下进行这里下载的版本要适配自己的电脑cd ~ wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh运行安装程序bash Anaconda3-2024.10-1-Linux-x86_64.sh按照提示操作 一直按 Enter 浏览协议最后输入 yes 接受。安装位置直接按 Enter 确认默认路径~/anaconda3。关键步骤当询问 “You can undo this by running conda init --reverse $SHELL? [yes|no]” 时输入 yes 。激活配置安装完后刷新配置文件source ~/.bashrc完成后命令行前面会出现 (base) 字样说明 Anaconda 已就绪 。验证安装conda --version需要更换源为国内源,否则会比较慢.使用下面的指令实现换源:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ conda config --set show_channel_urls yes使用conda创建python3.10的虚拟环境,命名为carla_py310conda create -n carla_py310 python3.10 -y激活虚拟环境conda activate carla_py310在虚拟环境下,再进行pip 的升级和换源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple接着安装carla 的pythonAPI所需要的依赖库:pip install pygame numpy pip install carla0.9.16 sudo apt-get install -y libomp5三. 安装并编译 Unreal Engine 4.26sudo apt install git3.1 关联 Epic 与 GitHub 账号登录Feed - Unreal Engine可以直接使用Epic账号邮箱密码登录。3.2 克隆 UE4 源码 (Carla 定制分支)cd ~ git clone --depth 1 -b carla https://github.com/CarlaUnreal/UnrealEngine.git /carla_disk/UnrealEngine_4.26情况一Git 克隆时需要输入GitHub 用户名如liuliujingjing77而不是邮箱地址liuliujingjing77gmail.com密码认证已废弃GitHub 已不再支持使用账户密码进行 Git 操作必须使用Personal Access Token (PAT)使用 Personal Access Token推荐1. 生成 Personal Access Token登录 GitHub 网页https://github.com点击右上角头像 →Settings左侧菜单底部 →Developer settings选择Personal access tokens→Tokens (classic)点击Generate new token→Generate new token (classic)填写信息Note:UE4_Carla_BuildExpiration: 选择No expiration或合适的时间Scopes: 必须勾选repo(完整权限)点击Generate token立即复制生成的 Token关闭页面后无法再次查看# 先清理失败的克隆目录如果存在 rm -rf /carla_disk/UnrealEngine_4.26 # 重新克隆 git clone --depth 1 -b carla https://github.com/CarlaUnreal/UnrealEngine.git /carla_disk/UnrealEngine_4.26当提示输入凭证时Username for https://github.com: 输入您的 GitHub 用户名不是邮箱 Password for https://用户名github.com: 粘贴刚才生成的 Personal Access Token注意输入 Token 时终端不会显示任何字符这是正常的。粘贴后直接回车。这个方法速度很快就clone下来了。情况二这是典型的GitHub 网络连接问题在国内访问 GitHub 时经常遇到。TLS 连接被中断导致克隆失败。使用 SSH 方式克隆推荐一劳永逸如果您之前配置过 SSH 密钥# 1. 检查 SSH 密钥是否存在 ls -la ~/.ssh/id_rsa.pub 2/dev/null || ls -la ~/.ssh/id_ed25519.pub 2/dev/null # 2. 如果没有生成 SSH 密钥 ssh-keygen -t ed25519 -C liuliujingjing77gmail.com # 一路回车 # 3. 查看公钥 cat ~/.ssh/id_ed25519.pub # 复制输出内容 # 4. 添加到 GitHub # 登录 GitHub → Settings → SSH and GPG keys → New SSH key # 粘贴公钥Title 填 Ubuntu-PC点击 Add SSH key # 5. 测试 SSH 连接 ssh -T gitgithub.com # 6. 使用 SSH 克隆 git clone --depth 1 -b carla gitgithub.com:CarlaUnreal/UnrealEngine.git /carla_disk/UnrealEngine_4.26/3.3 编译 UE4cd /carla_disk/UnrealEngine_4.26/ ./Setup.sh ./GenerateProjectFiles.sh make -j4 # 根据 CPU 核心数调整耗时较长make -j4 可以多执行几遍直至每次秒完成 。就是成功了。3.4 测试 UE4 并配置环境变量cd /carla_disk/UnrealEngine_4.26/Engine/Binaries/Linux ./UE4Editor # 启动成功后将路径添加到 ~/.bashrc echo export UE4_ROOT/carla_disk/UnrealEngine_4.26 ~/.bashrc source ~/.bashrc随便选一个项目进去测试成功。四.安装Carla0.9.16清除代理 重新下载使用代理依旧下载不成功第一步清除所有代理环境变量# 1. 清除当前终端的代理变量 unset http_proxy unset https_proxy unset HTTP_PROXY unset HTTPS_PROXY unset all_proxy unset ALL_PROXY unset ftp_proxy unset FTP_PROXY # 2. 清除 Git 代理配置 git config --global --unset http.proxy git config --global --unset https.proxy # 3. 验证代理已清除 env | grep -i proxy # 应无输出 # 4. 配置 aria2 不使用代理 echo all-proxy ~/.aria2/aria2.conf 2/dev/null || mkdir -p ~/.aria2 echo all-proxy ~/.aria2/aria2.conf第二步重新执行 aria2 下载# 1. 清理旧文件 cd /carla_disk/ rm -rf carla/ carla-0.9.16/ *.tar.gz # 2. 重新下载这次应该正常 aria2c -x 16 -s 16 -k 1M https://github.com/carla-simulator/carla/archive/refs/tags/0.9.16.tar.gz -o carla-0.9.16.tar.gz下载过程中会显示进度[#xxxxxx 123.4MiB/456.7MiB(27%) CN:16 DL:3.5MiB ETA:1m23s]第三步如果下载中断可续传# 如果网络中断直接重新执行相同命令即可续传 aria2c -x 16 -s 16 -k 1M https://github.com/carla-simulator/carla/archive/refs/tags/0.9.16.tar.gz -o carla-0.9.16.tar.gz第四步下载完成后解压# 1. 验证下载完成 ls -lh /carla_disk/carla-0.9.16.tar.gz # 应显示约 400-600 MB # 2. 解压 tar -xzf carla-0.9.16.tar.gz mv carla-0.9.16 carla rm carla-0.9.16.tar.gz # 3. 验证 ls -la /carla_disk/carla/ du -sh /carla_disk/carla/第五步执行完整编译流程1.配置环境变量# 1. 编辑 ~/.bashrc nano ~/.bashrc # 2. 在文件末尾添加 export UE4_ROOT/carla_disk/UnrealEngine_4.26 export CARLA_ROOT/carla_disk/carla export CARLA_UE4_ROOT/carla_disk/carla # 3. 使配置生效 source ~/.bashrc # 4. 验证 echo $UE4_ROOT echo $CARLA_ROOT2.下载 CARLA 资源Content# 1. 进入 CARLA 目录 cd /carla_disk/carla/ # 2. 激活 Conda 环境 conda activate carla_py310 # 3. 修改 Update.sh解决下载失败 cp Update.sh Update.sh.bak nano Update.sh # 找到 CONTENT_LINK约第 50 行替换为 # CONTENT_LINKhttps://carla-assets.s3.us-east-005.backblazeb2.com/${CONTENT_ID}.tar.gz # 4. 执行 Update.sh下载约 10-15GB 资源 ./Update.sh验证是否执行成功方式1 echo $? # 输出含义 # 0 ✅ 成功 # 非 0 ❌ 失败1, 2, 127 等 方式2 # 检查 Content 目录 ls -la /carla_disk/carla/Unreal/CarlaUE4/Content/Carla/ 方式 3 # 检查资源目录大小 du -sh /carla_disk/carla/Unreal/CarlaUE4/Content/Carla/ # 预期约 10-15 GB如果只有几 MB 说明下载失败 方式4 # 检查地图文件 ls /carla_disk/carla/Unreal/CarlaUE4/Content/Carla/Maps/ # 应看到 # Town01.umap, Town02.umap, Town03.umap, Town04.umap, Town05.umap 等第六步执行 Setup.sh1.找到正确的 Setup.sh 路径# 确认 Setup.sh 位置 ls -la /carla_disk/carla/Util/BuildTools/Setup.sh2. 备份并修改# 1. 备份原文件 cp /carla_disk/carla/Util/BuildTools/Setup.sh /carla_disk/carla/Util/BuildTools/Setup.sh.bak # 2. 修改 Boost 下载链接 sed -i s|boostorg.jfrog.io/artifactory/main/release|archives.boost.io/release|g /carla_disk/carla/Util/BuildTools/Setup.sh # 3. 修改 LibPNG 下载链接如下 LIBPNG_REPOhttps://download.sourceforge.net/libpng/libpng-1.6.37.tar.xz # 4. 验证修改 grep -n archives.boost.io /carla_disk/carla/Util/BuildTools/Setup.sh grep -n older-releases /carla_disk/carla/Util/BuildTools/Setup.sh3.执行 Setup.sh 安装依赖这部分会比较长会报错要耐心多等待一会# 1. 进入 CARLA 根目录 cd /carla_disk/carla/ # 2. 激活 Conda 环境 conda activate carla_py310 # 3.设置使用 gcc 而不是 clang export CCgcc export CXXg # 4.验证环境变量 echo $CC echo $CXX # 应输出gcc 和 g # 5. 确保 NumPy 已安装版本 2.0 pip install numpy1.24.3 # 6. 获取 NumPy 头文件路径 python3 -c import numpy; print(numpy.get_include()) # 应输出类似/home/ljj/miniconda3/envs/carla_py310/lib/python3.10/site-packages/numpy/core/include # 7. 清理 Boost 缓存 cd /carla_disk/carla/Util/BuildTools/ rm -rf boost_* b2-* boost_1_84_0.tar.gz # 8. 设置环境变量告诉 Boost 哪里找 NumPy export CPLUS_INCLUDE_PATH$(python3 -c import numpy; print(numpy.get_include())):$CPLUS_INCLUDE_PATH # 9.执行正确的 Setup.sh 路径 ./Util/BuildTools/Setup.sh # 10. 检查退出码 echo $? # 应输出 0 当前进度追踪步骤状态说明UE4 4.26 编译✅ 完成已编译完成CARLA 源码下载✅ 完成1.1GB 已下载解压Update.sh (Content)✅ 完成资源已下载Setup.sh (Boost)✅ 完成Boost 1.84.0 已编译Setup.sh (rpclib)✅ 完成已手动下载Setup.sh (完成)⏳ 待执行修改 Setup.sh 后应成功make PythonAPI⏳ 等待下一步make launch⏳ 等待最后一步啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊终于啊五.编译 Python API第一步检查 NumPy 版本# 1. 激活 Conda 环境 conda activate carla_py310 # 2. 检查 NumPy 版本必须 2.0 pip install numpy1.24.3 # 3. 验证 python3 -c import numpy; print(numpy.__version__) # 应输出 1.24.3第二步安装 Python 依赖cd /carla_disk/carla/ python3 -m pip install --upgrade -r PythonAPI/carla/requirements.txt第三步编译 Python API# 1. 确保在 CARLA 根目录 cd /carla_disk/carla/ # 2. 设置代理根据您的实际端口调整 7890 export http_proxyhttp://127.0.0.1:7890 export https_proxyhttp://127.0.0.1:7890 # 3. 配置 Git 代理 git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy http://127.0.0.1:7890 # 4. 清理失败的插件目录(如果失败了 rm -rf /carla_disk/carla/Unreal/CarlaUE4/Plugins/Streetmap/ # 5. 编译 Python API约 10-20 分钟 make PythonAPI # 6. 检查退出码 echo 退出码$?第四步验证 Python API 编译成功# 检查是否生成 whl 文件 ls -la /carla_disk/carla/PythonAPI/carla/dist/ # 应显示 carla-0.9.16-cp310-cp310-linux_x86_64.whl 或类似文件第五步安装 Python API# 1. 进入 PythonAPI 目录 cd /carla_disk/carla/PythonAPI/ # 2. 卸载旧版本如果有 pip uninstall carla -y # 3. 安装新生成的 whl 文件 pip install /carla/dist/carla-0.9.16-cp310-cp310-linux_x86_64.whl # 如果文件名不同用 tab 补全 # pip install dist/carla-*.whl # 4. 验证安装 验证 CARLA Python API 安装成功 # 1. 测试能否导入 carla 模块 python3 -c import carla; print(✅ CARLA 模块导入成功) # 2. 测试能否创建客户端 python3 -c import carla client carla.Client(127.0.0.1, 2000) print(✅ CARLA 客户端创建成功) print(fCARLA 模块路径{carla.__file__}) # 3. 检查安装的 carla 版本 pip show carla六.编译 CARLA 服务器Launch不要ssh连接# 1. 回到 CARLA 根目录 cd /carla_disk/carla/ # 2. 编译服务器约 30-60 分钟 make launch # 或使用更多核心加速这个这个 make launch -j4 # 3. 检查退出码 echo 退出码$?首次编译时间会久一些。七验证编译完成并启动测试这时候终端已经不持续输出没有报错仅一些warnings这时候点击play,等待一会没有报错另开终端调用pythonAPI测试# 1. 编辑器已经运行点击 Play 即可仿真 # 2. 新开终端测试 Python API conda activate carla_py310 python3 -c import carla client carla.Client(127.0.0.1, 2000) client.set_timeout(10.0) world client.get_world() print(✅ CARLA 连接成功) print(f当前地图{world.get_map().name}) # 3. 运行手动控制脚本 cd /carla_disk/carla/PythonAPI/examples/ python3 manual_control.py这就算成功了。八更换地图依旧是启动服务器。在/carla_disk/carla/PythonAPI/example下创建python文件。import carla def change_carla_map(map_name): # 1. 连接到服务器 (默认端口 2000) client carla.Client(localhost, 2000) client.set_timeout(20.0) # 换地图很耗时建议设置较长的超时时间 try: print(f正在尝试切换到地图: {map_name}...) # 2. 执行换地图操作 # 注意这会导致现有的所有车辆和传感器被销毁 world client.load_world(map_name) print(f✅ 成功切换到 {map_name}) except Exception as e: print(f❌ 切换失败: {e}) if __name__ __main__: # 建议先从轻量的 Town01 或 Town02 开始 change_carla_map(Town02)直接运行脚本。在下方的内容浏览器中搜索Town02点击左下角Town02的橙色标志即可切换成。