4. 包管理器安装
好,咱们接着往下走。上一章我们把环境基础打好了,这一章就来解决核心问题——怎么把CARLA本体请进你的电脑里。
安装CARLA,说白了就两条路:pip安装和Docker安装。我个人习惯是,做快速原型验证时用pip,搞团队协作或需要稳定部署时用Docker。你想想看,这两种方式各有各的脾气,咱们一个一个说清楚。
4.1 使用pip安装CARLA
pip安装是最直接的方式。我刚开始接触CARLA时,第一反应也是「直接pip完事」。嗯,这里要注意,CARLA的pip包和普通的Python包不太一样——它其实是一个预编译的二进制包,里面包含了完整的模拟器引擎。
核心要点:CARLA的pip包只支持Python 3.7到3.10版本。如果你用的是Python 3.11或更高版本,请先降级或使用conda创建虚拟环境。
具体步骤很简单,就两行命令:
# 创建一个干净的虚拟环境(我建议用conda)
conda create -n carla_env python=3.8
conda activate carla_env
# 安装CARLA
pip install carla-simulator
等等,这里有个坑。我在项目中遇到过,直接pip install carla-simulator可能会下载很慢,因为包体大概有2-3GB。我的做法是:
- 先配置国内镜像源,比如清华源或阿里源
- 或者直接去CARLA的GitHub Release页面下载预编译包
小技巧:如果你在公司内网,记得先配好代理。我曾经因为没配代理,干等了一个小时才发现是网络问题。
安装完成后,你可以用这个命令验证一下:
pip list | grep carla
如果看到类似carla-simulator 0.9.14的输出,说明pip安装成功了。
4.2 使用Docker安装CARLA
Docker安装是我个人更推荐的方式,尤其当你需要多人协作或在不同机器上复现环境时。说白了,Docker把整个CARLA环境打包成了一个「盒子」,你只需要拉下来就能跑,省去了各种依赖冲突的烦恼。
为什么我会这么说?因为我在项目中遇到过好几次「在我电脑上能跑,在你电脑上就报错」的尴尬情况。用Docker之后,这种问题再也没出现过。
Docker安装CARLA的步骤:
# 第一步:拉取CARLA镜像
docker pull carlasim/carla:latest
# 第二步:运行CARLA容器
docker run --rm -it \
--net=host \
--gpus all \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
-e DISPLAY=$DISPLAY \
carlasim/carla:latest
这里有几个参数我解释一下:
--net=host:让容器使用宿主机的网络,这样你可以在宿主机上直接连接CARLA的端口--gpus all:如果你有NVIDIA显卡,加上这个参数可以启用GPU加速-v /tmp/.X11-unix:这是为了让容器能显示图形界面
注意:如果你在无图形界面的服务器上运行(比如SSH连接),需要去掉-v和-e DISPLAY参数,改用./CarlaUE4.sh -RenderOffScreen模式。
拉取镜像的时间取决于你的网速。我记得第一次拉取时,3GB的镜像下了快半小时。建议你提前准备好,别等到演示前才拉。
4.3 验证安装是否成功
装完了,怎么知道它真的能跑?我一般用三步验证法:
4.3.1 启动模拟器
先启动CARLA服务端。如果你用的是pip安装:
# 找到CARLA的安装路径
python -c "import carla; print(carla.__file__)"
# 进入CARLA的根目录,运行
./CarlaUE4.sh
如果你用的是Docker,上面已经给了启动命令。启动后你会看到一个3D城市窗口,这就是CARLA的主界面。
4.3.2 运行客户端测试脚本
打开另一个终端,运行一个简单的Python脚本来连接服务端:
import 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()
print(f"可用车辆蓝图数量:{len(blueprint_library.filter('vehicle.*'))}")
如果输出类似:
成功连接!当前地图:/Game/Carla/Maps/Town01
可用车辆蓝图数量:42
那就说明安装成功了。嗯,这里要注意,如果连接失败,八成是端口没开或者服务端没启动。
4.3.3 生成一辆测试车辆
最后一步,我习惯生成一辆车来验证整个流程是否通畅:
# 继续上面的代码
# 选择一个车辆蓝图
vehicle_bp = blueprint_library.filter('vehicle.audi.a2')[0]
# 选择一个生成点
spawn_points = world.get_map().get_spawn_points()
spawn_point = spawn_points[0]
# 生成车辆
vehicle = world.spawn_actor(vehicle_bp, spawn_point)
print(f"车辆已生成:{vehicle.type_id}")
# 让车辆动起来
vehicle.set_autopilot(True)
print("车辆已开启自动驾驶模式")
# 等待5秒后销毁
import time
time.sleep(5)
vehicle.destroy()
print("测试完成")
如果你看到车辆在窗口中动起来了,恭喜你,CARLA环境搭建成功!
避坑指南:我曾经遇到过spawn_actor失败的情况,原因是生成点被占用了。解决办法是换个生成点,或者先清空场景再生成。
4.4 两种安装方式的对比
最后,我用一张表格总结一下pip和Docker的差异,方便你根据实际情况选择:
| 对比项 | pip安装 | Docker安装 |
|---|---|---|
| 安装速度 | 较快(直接下载二进制包) | 较慢(需拉取完整镜像) |
| 依赖管理 | 依赖宿主机Python环境 | 完全隔离,无依赖冲突 |
| GPU支持 | 原生支持 | 需额外配置--gpus参数 |
| 多人协作 | 需手动同步环境 | 镜像即环境,一键拉取 |
| 适合场景 | 个人开发、快速原型 | 团队协作、生产部署 |
我个人建议,如果你是初学者,先用pip装一个试试手。等你要做正式项目了,再切换到Docker。毕竟,先跑起来再说,对吧?
核心总结:安装CARLA其实就三步——选方式、执行命令、验证连接。pip适合快速上手,Docker适合稳定部署。无论选哪种,验证环节不能省,确保服务端和客户端能正常通信才算真正安装成功。