1. 环境准备与前置条件检查
在Ubuntu 22.04上编译CARLA 0.9.16需要特别注意系统环境和依赖项的版本匹配问题。这个版本虽然相对稳定,但由于其依赖的Unreal Engine版本较老,与现代系统环境存在一些兼容性挑战。
1.1 系统基础环境配置
首先确保你的Ubuntu 22.04系统已经完成基础更新:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake git wget
CARLA 0.9.16对Python版本有特定要求,我们需要安装Python 3.7:
bash复制sudo apt install -y python3.7 python3.7-dev python3-pip
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1
sudo update-alternatives --config python3
注意:Ubuntu 22.04默认Python版本为3.10,直接使用会导致后续编译失败。必须降级到3.7版本。
1.2 显卡驱动与CUDA安装
CARLA需要NVIDIA显卡支持,建议安装470版本的驱动:
bash复制sudo apt install -y nvidia-driver-470
验证驱动安装:
bash复制nvidia-smi
对于CUDA,CARLA 0.9.16需要CUDA 10.1,但Ubuntu 22.04官方仓库已不提供。我们可以手动安装:
bash复制wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
sudo sh cuda_10.1.243_418.87.00_linux.run
安装完成后,添加环境变量到~/.bashrc:
bash复制export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
2. 获取CARLA源码与依赖项
2.1 克隆CARLA仓库
建议使用国内镜像源加速下载:
bash复制git clone https://gitee.com/mirrors/CARLA.git --branch 0.9.16 --depth 1
cd CARLA
2.2 安装Unreal Engine 4.24
CARLA 0.9.16需要特定版本的Unreal Engine:
bash复制git clone --depth=1 -b 4.24 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.24
cd ~/UnrealEngine_4.24
./Setup.sh && ./GenerateProjectFiles.sh && make
这个编译过程可能需要2-3小时,取决于你的硬件配置。编译完成后,验证安装:
bash复制cd ~/UnrealEngine_4.24/Engine/Binaries/Linux/
./UE4Editor
2.3 安装CARLA Python依赖
CARLA的Python API需要特定版本的依赖:
bash复制pip install -r PythonAPI/carla/requirements.txt
pip install pygame numpy
3. 编译CARLA源码
3.1 配置编译环境
首先设置Unreal Engine路径:
bash复制export UE4_ROOT=~/UnrealEngine_4.24
然后更新CARLA的子模块:
bash复制git submodule update --init
3.2 编译CARLA服务器
执行make命令编译CARLA:
bash复制make PythonAPI
make launch
常见问题:如果编译过程中出现"std::filesystem"相关错误,需要修改CARLA/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/FileSystem.h文件,将std::filesystem替换为std::experimental::filesystem
3.3 解决常见编译错误
- OpenSSL版本冲突:
bash复制sudo apt install libssl1.1
- Protobuf版本问题:
bash复制pip install protobuf==3.19.0
- SDL2缺失:
bash复制sudo apt install libsdl2-2.0-0 libsdl2-dev
4. 运行与测试CARLA
4.1 启动CARLA服务器
编译完成后,可以启动CARLA服务器:
bash复制./CarlaUE4.sh -quality-level=Low
提示:首次启动会生成大量着色器,可能需要较长时间。建议添加"-quality-level=Low"参数加速启动
4.2 使用Python API连接
新建Python脚本测试连接:
python复制import carla
client = carla.Client('localhost', 2000)
world = client.get_world()
print(world.get_map().name)
4.3 性能优化建议
- 渲染模式选择:
- 低配机器使用
-quality-level=Low - 高性能机器可以尝试
-quality-level=Epic
- 禁用不需要的传感器:
python复制settings = world.get_settings()
settings.no_rendering_mode = True
world.apply_settings(settings)
- 调整分辨率:
bash复制./CarlaUE4.sh -windowed -ResX=1280 -ResY=720
5. 高级配置与自定义
5.1 添加自定义地图
将地图的.umap文件放入Unreal/CarlaUE4/Content/Carla/Maps/目录,然后在Python中加载:
python复制world = client.load_world('YourMapName')
5.2 修改车辆物理参数
编辑Unreal/CarlaUE4/Content/Carla/Blueprints/Vehicles/下的蓝图文件,可以调整车辆的质量、摩擦系数等参数。
5.3 构建自定义PythonAPI
如果需要修改PythonAPI,重新构建:
bash复制make clean
make PythonAPI
6. 实际使用中的经验分享
在长期使用CARLA 0.9.16的过程中,我积累了一些实用技巧:
- 内存管理:
CARLA容易内存泄漏,建议定期重启服务器。可以编写监控脚本:
python复制import psutil
if psutil.virtual_memory().percent > 90:
print("Memory usage too high, consider restarting CARLA")
-
多客户端连接:
默认端口2000只能连接一个客户端。要支持多客户端,需要修改CarlaSettings.ini中的端口配置。 -
录制与回放:
python复制client.start_recorder("recording01.log")
# ...运行场景...
client.replay_file("recording01.log", start=10, duration=20)
- 天气系统控制:
python复制weather = carla.WeatherParameters(
cloudiness=80.0,
precipitation=30.0,
sun_altitude_angle=70.0)
world.set_weather(weather)
- 批量测试技巧:
使用subprocess模块可以方便地批量运行测试:
python复制import subprocess
subprocess.Popen(["./CarlaUE4.sh", "-quality-level=Low"])
7. 疑难问题排查指南
7.1 常见错误与解决方案
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 启动时崩溃 | 显卡驱动不兼容 | 安装470版本驱动 |
| Python API连接失败 | 端口被占用 | 检查2000端口或修改端口号 |
| 地图加载失败 | 文件权限问题 | 检查.umap文件权限 |
| 传感器无数据 | 渲染模式关闭 | 启用渲染模式 |
7.2 日志分析技巧
CARLA的日志位于~/CARLA/Unreal/CarlaUE4/Saved/Logs/目录。重点关注:
Launch.log: 启动问题Carla.log: 运行时错误PythonAPI.log: Python接口问题
7.3 性能瓶颈诊断
使用nvidia-smi和htop监控资源使用情况。常见瓶颈:
- GPU利用率100% → 降低画质
- CPU单核满载 → 优化Python代码
- 内存不足 → 减少同时运行的车辆/行人数量
8. 后续扩展与进阶方向
虽然CARLA 0.9.16已经能满足基本需求,但如果你想进一步扩展:
- 集成ROS:
可以安装ROS Noetic并配置CARLA-ROS桥接:
bash复制sudo apt install ros-noetic-desktop-full
git clone https://github.com/carla-simulator/ros-bridge.git
-
自定义传感器:
通过修改Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Sensor/下的代码实现新传感器。 -
机器学习训练:
使用CARLA收集的数据训练自动驾驶模型:
python复制# 收集图像和标签
image = camera_data.image
steering = vehicle.get_control().steer
- 多机分布式测试:
修改CarlaSettings.ini配置网络参数,实现多机协同仿真。
