3、Carla安装与配置:源码编译与二进制包安装、启动Carla服务器、基本配置与测试

好,咱们进入正题。Carla的安装,说白了就两条路:二进制包安装源码编译

我个人习惯是,新手先用二进制包。为什么?省时间。你想想看,源码编译动辄一两个小时,万一中间报个错,排查起来够你喝一壶的。我刚开始接触Carla时,头铁选了源码编译,结果卡在依赖库版本冲突上,折腾了一下午。后来学乖了,先用二进制包跑通流程,再回头研究源码。

3.1 二进制包安装(推荐新手)

这是最省心的方式。Carla官方会定期发布编译好的Release包,你下载解压就能用。

我的建议: 第一次安装,优先选这个方式。先跑起来,建立信心。

具体步骤:

  1. 打开Carla的GitHub Release页面(https://github.com/carla-simulator/carla/releases)。
  2. 找到最新稳定版,下载 Carla_XXX.tar.gz(XXX是版本号,比如0.9.13)。
  3. 解压到你的工作目录。我个人习惯放在 /home/你的用户名/workspace/carla/ 下。
  4. 解压完成后,目录结构大概是这样:
Carla_0.9.13/
├── CarlaUE4.sh          # 启动脚本(Linux)
├── CarlaUE4.exe         # 启动脚本(Windows)
├── Import/
├── PythonAPI/
├── Tools/
└── ...
注意: 解压路径不要包含中文或空格。我曾经因为路径里有空格,导致PythonAPI死活连不上服务器,排查了半天才发现是路径解析问题。

3.2 源码编译安装(进阶玩家)

如果你需要修改Carla底层代码,或者想体验最新特性,那就得走源码编译这条路。

说白了,源码编译就是自己动手丰衣足食。但代价是——你得准备好一整套开发环境。

核心依赖:

  • Unreal Engine 4.26(Carla基于UE4开发,版本必须匹配)
  • Python 3.7+(推荐3.7或3.8,太高版本可能不兼容)
  • CMake、gcc、clang等编译工具链

编译步骤(以Ubuntu 20.04为例):

# 1. 克隆Carla源码
git clone https://github.com/carla-simulator/carla.git
cd carla

# 2. 更新子模块(这一步会下载UE4的依赖,比较耗时)
git submodule update --init --recursive

# 3. 设置UE4根目录(前提是你已经安装了UE4.26)
export UE4_ROOT=/path/to/your/UE4_4.26

# 4. 开始编译(-j4表示用4个核心并行编译,根据你的CPU调整)
make launch -j4

# 5. 编译PythonAPI
make PythonAPI -j4
避坑指南: 我曾经在编译时遇到“内存不足”的错误。Carla编译非常吃内存,建议至少16GB RAM,32GB更稳。如果内存不够,可以加swap分区临时顶一下。

3.3 启动Carla服务器

安装完成后,怎么启动?很简单。

二进制包方式:

# 进入Carla目录
cd Carla_0.9.13

# 启动服务器(Linux)
./CarlaUE4.sh

# 启动服务器(Windows)
CarlaUE4.exe

源码编译方式:

# 在Carla源码根目录下
./CarlaUE4.sh

启动后,你会看到一个UE4的窗口弹出来,里面是一个虚拟城市。嗯,这就说明服务器跑起来了。

小技巧: 如果你不想看图形界面(比如在服务器上跑),可以加参数 -RenderOffScreen-quality-level=Low 来节省资源。

3.4 基本配置与测试

服务器启动后,怎么确认它正常工作?我一般用PythonAPI写个简单的测试脚本。

先安装Python依赖:

pip install carla  # 或者从PythonAPI目录下安装

然后写个测试脚本 test_carla.py

import carla
import time

# 连接到Carla服务器
client = carla.Client('localhost', 2000)
client.set_timeout(10.0)

# 获取世界对象
world = client.get_world()

# 打印当前地图名称
print(f"当前地图: {world.get_map().name}")

# 生成一辆车
blueprint_library = world.get_blueprint_library()
vehicle_bp = blueprint_library.filter('model3')[0]
spawn_point = world.get_map().get_spawn_points()[0]
vehicle = world.spawn_actor(vehicle_bp, spawn_point)

print(f"车辆已生成: {vehicle.type_id}")

# 让车动起来
vehicle.apply_control(carla.VehicleControl(throttle=0.5, steer=0.0))
time.sleep(5)

# 清理
vehicle.destroy()
print("测试完成")

运行脚本:

python test_carla.py

如果一切正常,你会看到控制台输出地图名称,UE4窗口里出现一辆车,然后它往前开了一段,最后消失。

核心配置项:
配置项 说明 我的经验
端口号(默认2000) Carla服务器监听的端口 多实例时记得改端口,我常用2000、2001、2002
超时时间 客户端连接超时,默认10秒 网络差时调到30秒,否则容易断连
同步模式 控制仿真步进是否同步 做强化学习时一定要开同步模式,否则时序乱套
常见问题:
  • 连接失败: 检查Carla服务器是否启动,端口是否被占用。用 netstat -tulpn | grep 2000 查看。
  • 车辆生成失败: 可能是蓝图ID写错了,或者生成点被占用。用 world.try_spawn_actor() 代替 spawn_actor() 可以避免崩溃。
  • 性能卡顿: 降低画质,或者用 -quality-level=Low 启动。

嗯,到这里,Carla的安装、配置和基本测试就完成了。你想想看,其实核心就三步:装好、启动、连上。后面的事情,都是在这个基础上搭积木。

我个人建议,第一次跑通后,多试试不同的地图和车辆蓝图,熟悉一下API。我在项目中就吃过亏——以为对Carla很熟了,结果换了个地图,生成点坐标没适配,车直接掉到地底下去了。所以,多动手,别偷懒。