2. Carla环境搭建与API基础:Carla安装、Python API入门、客户端与服务器通信

好,咱们正式开始动手了。这一章我带你搞定Carla的环境搭建,以及最核心的Python API入门。说白了,就是让你能在自己的电脑上把Carla跑起来,然后用Python代码去控制它。

我个人习惯先把环境搭得干干净净再写代码,不然出了问题排查起来很头疼。你想想看,辛辛苦苦写了几百行代码,结果跑不起来,最后发现是安装路径不对——这种坑我踩过不止一次。

2.1 Carla的安装与配置

Carla的安装其实不复杂,但有几个细节要注意。我建议你直接下载预编译的二进制包,省去从源码编译的麻烦。除非你有特殊需求,比如要修改Carla引擎本身。

2.1.1 系统要求

先看看你的机器够不够格。Carla对硬件有一定要求,尤其是显卡。

组件 最低要求 推荐配置
操作系统 Windows 10 / Ubuntu 18.04 Ubuntu 20.04
GPU NVIDIA GTX 1060 6GB NVIDIA RTX 3070 8GB+
内存 16 GB 32 GB
存储 20 GB 空闲 50 GB SSD
Python 3.7 3.8 / 3.9
注意: 我曾经在Windows上用集成显卡跑Carla,结果画面卡成PPT。后来换了NVIDIA独显才流畅。如果你用笔记本,记得在NVIDIA控制面板里把Carla设为高性能模式。

2.1.2 下载与安装步骤

我推荐去Carla的GitHub Releases页面下载。选最新稳定版就行,别追太新的版本,容易有坑。

  1. 下载压缩包:选择对应系统的包,比如 Carla_0.9.14.tar.gz(Linux)或 Carla_0.9.14.zip(Windows)。
  2. 解压:找个路径放好。我个人习惯放在 D:/Carla/~/Carla/ 下。
  3. 启动Carla服务器:进入解压目录,运行 ./CarlaUE4.sh(Linux)或 CarlaUE4.exe(Windows)。

第一次启动会慢一些,因为要加载资源。看到那个带有Carla标志的窗口弹出来,就说明成功了。

小技巧: 启动时加参数 -quality-level=Low 可以降低画质,提高运行速度。我调试代码时经常这么干,省时间。

2.2 Python API入门

Carla的Python API设计得很清晰。说白了,就是通过客户端去连接服务器,然后操作世界里的各种东西。咱们先搞定最基本的连接和通信。

2.2.1 安装Python API

Carla自带了Python API包,就在解压目录的 PythonAPI/carla/dist/ 文件夹里。你需要把它装到你的Python环境里。

# 进入Carla的PythonAPI目录
cd PythonAPI/carla/dist

# 安装对应版本的.whl文件
pip install carla-0.9.14-cp38-cp38-linux_x86_64.whl

# 验证安装
python -c "import carla; print(carla.__version__)"

嗯,这里要注意:.whl文件名里的 cp38 表示Python 3.8版本。你得选对版本,不然装不上。我刚开始就吃过这个亏,装了半天才发现Python版本不对。

2.2.2 客户端与服务器通信

Carla采用的是客户端-服务器架构。服务器负责渲染和物理模拟,客户端通过API发送指令。说白了,服务器就是那个3D游戏窗口,客户端就是你写的Python脚本。

来看一个最基础的连接示例:

import carla
import time

# 创建客户端,连接到本地服务器的2000端口
client = carla.Client('localhost', 2000)

# 设置超时时间,防止卡死
client.set_timeout(10.0)

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

print("连接成功!当前地图:", world.get_map().name)

这段代码干了三件事:创建客户端、设置超时、获取世界。你想想看,如果没设超时,服务器没启动的话脚本就会一直卡在那里。我建议你养成习惯,每次连接都设个超时。

2.2.3 常用API速览

咱们先过一遍最常用的API,后面章节会深入讲。这里你有个印象就行。

API 功能 示例
carla.Client() 创建客户端 client = carla.Client('localhost', 2000)
client.get_world() 获取当前世界 world = client.get_world()
world.get_actors() 获取所有参与者 actors = world.get_actors()
world.spawn_actor() 生成参与者 vehicle = world.spawn_actor(bp, transform)
actor.destroy() 销毁参与者 vehicle.destroy()
核心概念: Carla里的所有东西都是参与者(Actor)。车辆、行人、传感器、交通标志,全都是Actor。你操作它们的方式都一样——生成、控制、销毁。

2.3 实战:让一辆车跑起来

光说不练假把式。咱们写个完整的例子,让一辆车在Carla世界里跑起来。这也是我每次测试环境时必跑的脚本。

import carla
import random
import time

def main():
    # 连接服务器
    client = carla.Client('localhost', 2000)
    client.set_timeout(10.0)
    world = client.get_world()

    # 获取蓝图库
    blueprint_library = world.get_blueprint_library()

    # 选一辆车,我习惯用奥迪
    vehicle_bp = blueprint_library.find('vehicle.audi.a2')

    # 找一个随机生成点
    spawn_points = world.get_map().get_spawn_points()
    spawn_point = random.choice(spawn_points)

    # 生成车辆
    vehicle = world.spawn_actor(vehicle_bp, spawn_point)
    print("车辆已生成:", vehicle.type_id)

    # 让车辆自动驾驶
    vehicle.set_autopilot(True)

    # 跑10秒
    time.sleep(10)

    # 清理
    vehicle.destroy()
    print("车辆已销毁")

if __name__ == '__main__':
    main()

这段代码你直接复制就能跑。它会随机选一个生成点,放一辆奥迪A2,然后让它自动驾驶10秒。为什么会用 set_autopilot(True)?因为Carla内置了交通管理器,会自动控制车辆沿着道路行驶。省得我们自己写控制逻辑。

避坑指南: 我曾经在生成车辆时忘了检查 spawn_point 是否有效,结果车辆卡在地面以下。建议生成前先打印一下坐标,确认位置合理。

2.4 常见问题与调试技巧

环境搭建阶段最容易出问题。我总结几个高频坑,你遇到了可以直接对照排查。

  • 连接超时:先确认Carla服务器是否已启动。用 ps aux | grep Carla(Linux)或任务管理器(Windows)检查进程。
  • 端口被占用:默认端口2000,如果被占用了可以换一个。启动服务器时加 -carla-rpc-port=3000,客户端也改成对应端口。
  • Python版本不匹配:Carla的.whl文件只支持特定Python版本。用 python --version 确认一下。
  • 显卡驱动问题:如果Carla启动后黑屏,多半是显卡驱动太旧。更新到最新版试试。
我的调试习惯: 每次写新功能前,先跑一遍最简单的连接脚本。确认环境没问题再往下写。这样出了问题能快速定位是环境问题还是代码问题。

好了,这一章的内容就到这儿。你先把环境搭好,跑通那个让车辆自动驾驶的例子。下一章咱们会深入讲如何生成边缘场景,比如突然窜出的行人、恶劣天气这些。到时候你会用到这一章的基础知识。

记住,环境搭建是地基,地基不稳后面全白搭。花点时间把这一步走扎实了,后面会顺畅很多。