3. 环境搭建(下)
上一节我们把CARLA和SUMO的二进制文件都装好了。但说实话,那只是万里长征第一步。真正的坑,往往藏在Python环境里。我见过太多同学,明明软件装对了,一跑Python脚本就报错,然后心态炸裂。
为什么会这样?因为CARLA、SUMO各自有各自的Python依赖,版本还互相打架。你想想看,一个项目里同时用carla、traci、sumolib三个库,版本不对直接翻车。所以,虚拟环境不是选项,是必需品。
3.1 为什么必须用虚拟环境?
简单说,虚拟环境就像给你的项目开了一个独立的小房间。你在房间里装什么库,都不会影响到外面的系统Python。我个人习惯,每个仿真项目都新建一个虚拟环境,哪怕麻烦点,也比后面排查依赖冲突强。
我曾经在一个项目里,因为全局装了carla 0.9.11,又装了sumo 1.12,结果traci死活连不上。查了两天,最后发现是Python路径污染了。从那以后,我再也不敢偷懒了。
3.2 创建并激活虚拟环境
操作很简单,打开终端,进到你的项目目录。比如我的项目叫 carla_sumo_demo:
# 创建虚拟环境,名字叫 venv_carla
python3 -m venv venv_carla
# 激活环境(Linux/Mac)
source venv_carla/bin/activate
# 激活环境(Windows)
venv_carla\Scripts\activate
激活成功后,终端前面会出现 (venv_carla) 字样。嗯,看到这个就对了。
3.3 安装依赖库:carla、traci、sumolib
依赖库分三块。咱们一个一个来,别急。
3.3.1 安装CARLA Python库
CARLA的Python库不在PyPI上,你得去CARLA的安装目录里找。我的是 /opt/carla/PythonAPI/carla/dist/ 目录下,有个 carla-0.9.11-cp38-cp38-linux_x86_64.whl 文件。注意,文件名里的 cp38 表示Python 3.8版本,别搞错了。
# 进入CARLA的PythonAPI目录
cd /opt/carla/PythonAPI/carla/dist/
# 安装对应版本的whl文件
pip install carla-0.9.11-cp38-cp38-linux_x86_64.whl
如果你用的是Windows,路径类似,在 C:\CARLA_0.9.11\PythonAPI\carla\dist\ 下找。安装完可以用 pip list | grep carla 验证一下。
3.3.2 安装SUMO Python库(traci + sumolib)
SUMO的Python库可以直接从PyPI装,省心很多。但要注意,traci和sumolib是两个独立的包,别只装一个。
# 安装traci和sumolib
pip install traci sumolib
装完之后,你可以用 pip list | grep -E "traci|sumolib" 看看版本。我目前用的是traci 1.18.0和sumolib 1.18.0,跟SUMO 1.18匹配。
3.3.3 安装其他辅助库
除了上面三个核心库,我建议再装几个常用的:
pip install numpy matplotlib shapely
numpy用来处理数据,matplotlib画图,shapely做几何计算。这些在后面的联合仿真中会频繁用到。
3.4 验证安装:写个测试脚本
光装完不行,得跑起来才算数。我写了一个简单的测试脚本,用来验证三个库是否都能正常导入。
# test_environment.py
import carla
import traci
import sumolib
print("✅ carla version:", carla.__version__)
print("✅ traci imported successfully")
print("✅ sumolib imported successfully")
# 测试carla客户端连接(需要先启动CARLA服务器)
try:
client = carla.Client('localhost', 2000)
client.set_timeout(2.0)
world = client.get_world()
print("✅ CARLA server connected")
except Exception as e:
print("⚠️ CARLA server not running:", e)
# 测试sumolib读取路网文件(需要有一个.net.xml文件)
try:
net = sumolib.net.readNet('path/to/your/map.net.xml')
print("✅ SUMO network loaded")
except Exception as e:
print("⚠️ SUMO network file not found:", e)
print("🎉 环境验证完成!")
运行这个脚本:
python test_environment.py
如果看到三个✅,恭喜你,环境搭好了。如果出现红色报错,别慌,看错误信息定位问题。最常见的是路径不对或者版本不匹配。
./CarlaUE4.sh(Linux)或 CarlaUE4.exe(Windows)。服务器没启动,客户端连不上是正常的。
3.5 运行官方Demo:感受联合仿真
环境验证通过后,咱们跑一个官方Demo试试。CARLA官方提供了一个 manual_control.py 脚本,在 PythonAPI/examples/ 目录下。这个脚本可以让你用键盘控制车辆。
# 启动CARLA服务器(新开一个终端)
cd /opt/carla
./CarlaUE4.sh
# 回到项目终端,运行manual_control.py
cd /opt/carla/PythonAPI/examples
python manual_control.py
如果一切正常,你会看到一个3D窗口,里面有一辆车。用WASD键控制它移动。嗯,看到车动了,说明CARLA的Python接口完全没问题。
对于SUMO,官方也提供了 sumo-gui 可视化工具。你可以用 sumo-gui 打开一个路网文件,看看交通流仿真效果。
sumo-gui /path/to/your/map.sumocfg
两个Demo都跑通了,说明你的环境搭建已经完成了90%。剩下的10%,就是后面章节要讲的联合仿真配置了。
3.6 本章知识体系
下面这张图,帮你理清本章的核心逻辑:
3.7 常见问题与避坑
| 问题 | 原因 | 解决方法 |
|---|---|---|
| ImportError: No module named carla | whl文件没装对,或者Python版本不匹配 | 检查whl文件名中的cp38是否对应你的Python版本 |
| traci连接超时 | SUMO服务器没启动,或者端口被占用 | 先启动sumo-gui,再运行脚本 |
| carla客户端连不上 | CARLA服务器没启动,或者IP/端口不对 | 确认CarlaUE4.sh正在运行,检查端口2000 |
| pip安装报错 | 网络问题或者权限不足 | 加 --user 参数,或者换国内镜像源 |
好了,环境搭建到这里就全部完成了。你现在应该有一个干净的虚拟环境,里面装好了carla、traci、sumolib三个核心库,并且能成功运行官方Demo。后面的章节,我们会基于这个环境,开始真正的联合仿真实战。
可可精品资料库