工具 / 系统

基于ubuntu20.04基镜像编译安装Carla 0.9.16仿真器

1. 宿主机环境要求

  1. 启动docker容器: docker run -it –gpus all –ipc=host –net=host -e DISPLAY=$DISPLAY -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics,display -v /tmp/.X11-unix:/tmp/.X11-unix:rw 镜像名:版本挂载全部 NVIDIA GPU;共享宿主机 IPC 内存,防止编辑器共享内存不足、渲染崩溃;使用宿主机网络;传递 X11 显示变量,用于图形窗口(UE4Editor、Pygame 窗口);开放显卡能力,计算、工具、图形渲染、显示输出,跑 UE 编辑器必备;挂载 X11 套接字,容器 GUI 程序转发到宿主机显示器

2. docker容器网络配置

  1. 添加了启动docker容器添加–net=host选项保证容器与宿主及网络环境一致,但是容器内访问git网络仍不稳定,重新配置环境变量,让容器内各项命令走代理访问外网
    1. export http_proxy=IP:端口
    2. export https_proxy=IP:端口
    3. export HTTP_PROXY=IP:端口
    4. export HTTPS_PROXY=IP:端口
  2. 同时设置大写 + 小写,兼顾旧工具(curl/wget/git)和 UE/Packman 这类 C++ 编译工具;
  3. curl优先读小写 http_proxy / https_proxy,如果小写不存在,才会去读大写 HTTP_PROXY / HTTPS_PROXY;
  4. wget 优先小写http_proxyhttps_proxy,wget 能识别大写 HTTP_PROXY,但是优先级低于小写;但是我安装依赖环境的时候,配置大写的 HTTP_PROXY,xerces‑c 下载会卡住;大小写最好全部配上吧;
  5. Packman 只读取大写 HTTP_PROXY / HTTPS_PROXY

3. 容器内环境预安装

  1. 安装Python开发包, apt install -y python3.8 python3.8-dev python3.8-distutils python3-pip python3-venv
  2. 安装编译工具,apt install -y cmake ninja-build autoconf automake libtool
  3. 用户标准目录工具,apt install -y xdg-utils xdg-user-dirs
  4. 安装unzip、curl 、wget、sudo 、vim、git、openssh-client、rsync工具,apt install -y unzip curl wget openssh-client vim sudo git rsync
  5. 安装python库:pip3 install
  6. 字体工具包,apt install -y fontconfig fonts-dejavu alsa-utils

4. UnrealEngine编译安装

  1. UE4分支要使用carla分支,否则在编译carla中报fatal error: ‘Renderer/Public/GBufferView.h错误;仓库地址https://github.com/CarlaUnreal/UnrealEngine.git ,和UnrealEngine官网上关联至github的仓库地址不同,关联过来的仓库找不到carla分支;
  2. UnrealEngine和carla在非root环境下编译,进入docker容器后,需自行创建/切换用户;
  3. 设置XDG_RUNTIME_DIR环境变量,export XDG_RUNTIME_DIR=/tmp/runtime-${USER} && mkdir -p "$XDG_RUNTIME_DIR" && chmod 700 "$XDG_RUNTIME_DIR"
  4. 选择一台带显卡的电脑编译UE4,启动docker时开放显卡能力,计算、工具、图形渲染;运行Setup.sh时不报错
  5. 全程挂载VPN;
  6. 很多依赖库重新下载需手动删除,避免重新下载时叠加编号,解压时使用的是下载失败软件包
  7. 编译,进入UnrealEngine目录执行:
    1. 下载 UE 引擎自带第三方库:./Setup.sh
    2. 生成工程文件:./GenerateProjectFiles.sh
    3. make

5. carla编译安装

  1. 软件包下载:https://github.com/carla-simulator/carla
  2. UE4_ROOT环境变量设置:export UE4_ROOT=”/home/zt/UnrealEngine”,添加自己的UnrealEngine地址,carla服务端的编译需要用的UnrealEngine中的工具;
  3. 安装 X11 全套开发库:sudo apt install -y libx11-dev libxext-dev libxi-dev libxrandr-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxtst-dev,编译python客户端用到了X11插件,报错Could NOT find X11 (missing: X11_X11_INCLUDE_PATH X11_X11_LIB)
  4. 修改libpng‑1.6.37文件下载地址,打开Util/BuildTools/Setup.sh文件找到 LIBPNG_REPO 这一行,改成LIBPNG_REPO=”https://sourceforge.net/projects/libpng/files/libpng16/older-releases/1.6.37/libpng-1.6.37.tar.xz”;libpng‑1.6.37 文件被 sourceforge 移动到老版本目录;
  5. 编译,进入到carla目录执行:
    1. 运行资产下载脚本:./Update.sh
    2. 下载编译依赖:make setup
    3. 编译编辑器:make CarlaUE4Editor
    4. 启动UE编辑器:make launch 或make launch-only
  6. CarlaUE4Editor编译需要注意增量编译问题,会出现各种奇怪链接库问题时,最好删除所有编译文件,重新编译;我遇到过MDL‑SDK编译问题解决mi/mdl_sdk.h文件也存在,编译MDL仍反复报缺少mi/mdl_sdk.h文件,需要删除~/.cache/packman/chk/MDL-SDK/2024.1.1-381500.4681-linux-x86-64/.packman.lock文件,清理所有编译缓存文件;
    1. make hard-clean
    2. make CarlaUE4Editor
  7. 不要执行make launch ARGS=“–no-simready” 绕开SDL库安装;用--no-simready走编译链路时,SimReady 模块跳过的分支,顺带触发 StreetMap 插件构建分支不执行;导致启动carla编辑器的时候频繁报StreetMapRuntime.so缺失问题

6. carla编辑器启动

  1. 启动CarlaUE4Editor界面卡死,崩溃退出,查看CPU资源占用和GPU负载;vulkaninfo 打印当前系统 Vulkan 图形驱动、GPU、实例、设备、扩展全部信息;没找到GPU相关信息或者llvmpipe为主要渲染工具会造成CPU高负载,编辑器崩溃退出;容器内缺少/usr/share/vulkan/icd.d/nvidia_icd.json文件,需要自行拷贝到容器内;创建环境变量 export XDG_RUNTIME_DIR=”tmp/runtime-$USER”
  2. 容器内 nvidia‑smi 正常识别显卡,但是 vulkaninfo 显示 llvmpipe,容器缺少 NVIDIA Vulkan 驱动层库文件,nvidia‑smi 只看内核驱动,Vulkan 需要额外的用户态库;sudo apt install -y vulkan-tools libvulkan1
  3. 容器内缺少 GLVND 调度层(libglvnd),即便宿主机的 NVIDIA 库透传进来,容器内没有调度器,Vulkan ICD 无法初始化;sudo apt install -y libglvnd0 libglvnd-dev
  4. 后续打开编辑器执行make launch-only,不再编译;make launch执行增量编译操作,插件无变化,无需编译;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注