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 |
2.1.2 下载与安装步骤
我推荐去Carla的GitHub Releases页面下载。选最新稳定版就行,别追太新的版本,容易有坑。
- 下载压缩包:选择对应系统的包,比如
Carla_0.9.14.tar.gz(Linux)或Carla_0.9.14.zip(Windows)。 - 解压:找个路径放好。我个人习惯放在
D:/Carla/或~/Carla/下。 - 启动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() |
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启动后黑屏,多半是显卡驱动太旧。更新到最新版试试。
好了,这一章的内容就到这儿。你先把环境搭好,跑通那个让车辆自动驾驶的例子。下一章咱们会深入讲如何生成边缘场景,比如突然窜出的行人、恶劣天气这些。到时候你会用到这一章的基础知识。
记住,环境搭建是地基,地基不稳后面全白搭。花点时间把这一步走扎实了,后面会顺畅很多。