当前位置: 首页 > news >正文

保姆级教程:在Ubuntu 20.04上从源码编译Carla 0.9.4(含Anaconda环境配置与UE4.21.2安装)

在Ubuntu 20.04上从源码构建Carla 0.9.4仿真环境的完整指南

自动驾驶仿真平台的搭建往往充满版本依赖的"暗礁"。本文将带你用最新Ubuntu 20.04系统,避开Python环境冲突、UE4编译陷阱等典型问题,完成Carla 0.9.4从源码到可运行环境的全流程构建。不同于网络上基于旧系统的零散教程,本指南特别针对Anaconda虚拟环境管理UE4.21.2源码编译两大痛点提供系统化解决方案。

1. 环境准备与依赖安装

1.1 系统基础配置

首先确保Ubuntu 20.04系统已更新至最新状态:

sudo apt update && sudo apt upgrade -y

安装必备的开发工具链:

sudo apt install -y \ build-essential \ clang-8 \ lld-8 \ g++-9 \ cmake \ ninja-build \ libtbb-dev \ libpng-dev \ libjpeg-dev \ libtiff-dev \ libxml2-dev \ libogg-dev \ libvorbis-dev \ libfreetype6-dev \ libzmq3-dev \ libboost-all-dev \ python3-dev \ python3-pip

关键版本调整:Ubuntu 20.04默认使用较新的编译器,但部分Carla组件需要兼容性设置:

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-8 80 sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-8 80 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90

1.2 Anaconda环境配置

为避免系统Python与项目需求冲突,我们使用Anaconda创建独立环境:

wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh bash Anaconda3-2021.05-Linux-x86_64.sh

创建专用于Carla的Python 3.7环境(比原版要求的3.5更稳定):

conda create -n carla_build python=3.7 -y conda activate carla_build pip install --upgrade pip setuptools nose2

注意:虽然Carla 0.9.4官方推荐Python 3.5,但在实际测试中3.7版本兼容性更好且能避免许多过时依赖问题

2. Unreal Engine 4.21.2源码编译

2.1 获取UE4源码

  1. 注册Epic Games账号并关联GitHub账户
  2. 接受Epic Games组织的邀请(检查注册邮箱)
  3. 克隆指定版本的UE4源码:
git clone --depth=1 -b 4.21.2-release https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine-4.21.2

2.2 编译安装UE4

进入源码目录执行编译:

cd ~/UnrealEngine-4.21.2 ./Setup.sh ./GenerateProjectFiles.sh make -j$(nproc)

常见问题解决方案:

问题现象解决方法
编译时OpenGL报错安装最新NVIDIA驱动时包含OpenGL组件
内存不足导致崩溃使用make -j4减少并行编译任务
缺少依赖项根据错误提示安装对应开发包

2.3 环境变量配置

将以下内容添加到~/.bashrc

# Unreal Engine Path export UE4_ROOT=~/UnrealEngine-4.21.2 export PATH="$UE4_ROOT/Engine/Binaries/Linux:$PATH"

验证安装:

source ~/.bashrc UE4Editor

3. Carla 0.9.4源码构建

3.1 获取Carla源码

克隆Carla仓库并切换到0.9.4版本:

git clone https://github.com/carla-simulator/carla.git ~/carla cd ~/carla git checkout 0.9.4

3.2 资源文件准备

由于官方资源下载可能受限,建议手动处理:

  1. 创建资源目录结构:
mkdir -p ~/carla/Unreal/CarlaUE4/Content/Carla
  1. 将下载的Content_0.9.4.tar.gz解压到上述目录

3.3 编译Carla

在Anaconda环境下执行完整构建流程:

conda activate carla_build make setup make LibCarla make CarlaUE4Editor

关键编译参数调整:

  • 修改Util/BuildTools/setup.sh中的Python路径指向conda环境
  • 确保BOOST_PYTHON版本与Python环境匹配

3.4 Python API构建

为Python 3.7构建接口(原版需调整):

make PythonAPI.3.7

验证Python接口:

import carla client = carla.Client('localhost', 2000) print(client.get_available_maps())

4. 运行与调试

4.1 启动Carla服务端

方式一:直接运行编辑器(适合开发调试)

make launch-only

方式二:运行打包后的独立版本

make package ./CarlaUE4.sh -quality-level=Epic

4.2 客户端连接示例

运行内置示例脚本:

cd PythonAPI/examples python manual_control.py

性能优化参数建议:

参数说明推荐值
-quality-level画质等级Low/Epic
-carla-server服务器模式无GUI更高效
-benchmark基准测试模式10.0-60.0

4.3 常见问题排查

Q:Python无法导入carla模块

  • 检查PYTHONPATH是否包含/path/to/carla/PythonAPI/carla/dist
  • 确认Python版本与编译时一致

Q:服务器连接超时

  • 确保服务端已完全启动(等待UE4编辑器加载完成)
  • 检查防火墙设置是否阻止2000端口

Q:渲染异常或崩溃

  • 更新显卡驱动至最新版本
  • 尝试添加-opengl-vulkan启动参数

在完成所有步骤后,你将获得一个完全本地的Carla仿真环境。不同于二进制版本,源码编译允许你深度定制传感器模型、物理参数等核心组件。我在实际项目中发现,通过调整CarlaSettings.ini中的参数,可以显著提高多车辆仿真的稳定性。

http://www.cnnetsun.cn/news/1936530.html

相关文章:

  • 避开这些坑!WPS加载项开发实战:从本地调试到打包发布的完整避坑指南
  • 运维工程师必备:MiniCPM-V-2_6模型服务的监控、告警与自动化运维
  • WeKnora智能文档处理:基于OCR技术的图片文字识别集成
  • 从STM32转战联盛德W806:一个老鸟的快速上手心得(CDK工程、GPIO点灯与烧录工具避坑指南)
  • 飞书多维表格实战:用AI工作流重塑内容创作与团队协作
  • LeetCode热题100-字符串解码
  • 避开这3个坑!SAP生产订单确认参数配置避雷指南(CO11/CO11N篇)
  • 军事仿真引擎实战指南:如何用CIMPro孪大师快速搭建数字孪生战场(附避坑技巧)
  • 手把手教你用Docker快速部署开源邮件服务器(Postfix+Dovecot+MySQL)
  • Python tkinter.filedialog实战:3种文件操作对话框的保姆级教程(附避坑指南)
  • 运算放大器压摆率(SR)的实战解析:从理论到波形失真
  • 从MGEX到北斗三号:一文搞懂多系统GNSS数据(RINEX 3.x)的下载门道与格式选择
  • SmolVLA生产环境:7×24小时稳定运行的VLA服务健康监控方案
  • 自动驾驶中的Occ后处理技巧:从3D Voxel到2D Grid的实用指南
  • CSS如何使用-nth-of-type精确选择列表项_通过元素类型限制提升样式健壮性
  • 多传感器融合定位实战:基于KITTI数据集构建100Hz IMU与相机、激光雷达的滤波融合数据平台
  • 魔兽争霸III兼容性终极解决方案:WarcraftHelper完整使用指南
  • 别再只会复制代码了!教你用ChatGPT/VSCode把这段HTML新年动画改成生日/情人节祝福
  • Balena Etcher:革命性镜像烧录工具的一站式解决方案
  • STM32F407与K210(K230)串口通信实战:如何设计一个可靠的命令-响应协议?
  • UniApp/微信小程序蓝牙开发避坑指南:从ArrayBuffer乱码到稳定收发数据的实战心得
  • [具身智能-378]:Sim2Real 详解(Simulation-to-Reality)
  • STM32 SPI驱动ST7798:从初始化到图形绘制的实战指南
  • STM32开发板PCB设计实战指南——模数地分离与电源优化策略
  • 大模型性能压测全解析:从指标到工具选择,一文搞定
  • TFTLCD驱动优化:从8080并行到SPI接口的高效转换方案
  • RootMyTV完整教程:10步轻松root你的LG电视
  • Fidget.nvim 终极指南:10分钟掌握 Neovim 通知和 LSP 进度显示
  • 2026年论文提交前一天AI率超标紧急处理:24小时达标攻略
  • 如何实现Archon多租户数据隔离与安全共享:完整指南