一、仿真概述与环境搭建
各位同学好,我是老张。在自动驾驶这个行当摸爬滚打了七八年,今天咱们聊聊仿真这件事。
说实话,刚入行那会儿,我对仿真也是半信半疑。总觉得真车上路跑一跑,什么问题都暴露了,何必费劲搞仿真?直到有一次,我们在测试园区里差点撞上一个突然冲出来的小孩——虽然最后刹住了,但那一脚急刹,让我后背全是冷汗。从那以后,我彻底明白了仿真的价值。
1.1 为什么需要交通仿真?
你想想看,一辆自动驾驶车从研发到量产,要经历多少场景?晴天、雨天、雪天、夜晚、隧道、十字路口、环岛、施工区……光这些组合,就有几万种。如果全靠在真实道路上测试,成本高得吓人,而且很多危险场景根本不敢测。
我个人习惯把仿真的意义归纳为三点:
- 安全第一:在仿真里撞一百次车,都不伤一根毫毛。我曾经在仿真里复现过“鬼探头”场景,让算法反复迭代了三十多次,才最终稳定通过。
- 效率至上:真实测试一天跑几百公里算多了,但仿真可以并行跑,一天跑几万公里轻轻松松。
- 覆盖全面:极端天气、传感器故障、突发事故——这些在真实世界里可遇不可求的场景,仿真里想要多少有多少。
核心观点:仿真不是真实测试的替代品,而是它的加速器和安全网。没有仿真的自动驾驶研发,就像没有风洞的飞机设计——不是不行,但风险太大。
1.2 仿真工具怎么选?
目前主流的开源仿真工具有两个:SUMO 和 CARLA。我简单说说它们的区别。
| 特性 | SUMO | CARLA |
|---|---|---|
| 定位 | 微观交通流仿真 | 高保真传感器仿真 |
| 核心能力 | 路网建模、交通流控制 | 传感器模拟、场景渲染 |
| 适用阶段 | 算法验证、策略测试 | 感知算法、规控算法 |
| 学习曲线 | 较平缓 | 较陡峭 |
说白了,SUMO 擅长模拟“车流怎么走”,CARLA 擅长模拟“车看到了什么”。在实际项目中,我经常把两者结合起来用——SUMO 生成交通流,CARLA 提供视觉渲染。
1.3 环境搭建:Python + SUMO
嗯,这里要注意。很多新手一上来就装最新版,结果各种依赖冲突。我个人建议用 Python 3.8 或 3.9,兼容性最好。
先装 SUMO。去官网下载安装包,或者用命令行:
# Ubuntu 系统
sudo add-apt-repository ppa:sumo/stable
sudo apt-get update
sudo apt-get install sumo sumo-tools sumo-doc
# 验证安装
sumo --version
装完之后,记得设置环境变量。我曾经在这上面栽过跟头——明明装好了,Python 就是找不到 SUMO 的库。后来发现是环境变量没配。
# 在 ~/.bashrc 中添加
export SUMO_HOME=/usr/share/sumo
export PATH=$PATH:$SUMO_HOME/bin
然后装 Python 接口:
pip install traci
pip install sumolib
小技巧:如果你用的是 Windows,建议用 Anaconda 创建虚拟环境,避免和系统 Python 打架。我习惯用 conda create -n auto_sim python=3.9 来隔离项目。
1.4 环境搭建:Python + CARLA
CARLA 的安装稍微麻烦一点。因为它需要 GPU 支持,而且版本迭代快。
# 下载 CARLA 包(约 2GB)
wget https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/CARLA_0.9.13.tar.gz
tar -xzf CARLA_0.9.13.tar.gz
# 安装 Python 客户端
pip install carla
启动 CARLA 服务器:
cd CARLA_0.9.13
./CarlaUE4.sh -quality-level=Low
避坑指南:我曾经在笔记本上跑 CARLA,卡得怀疑人生。后来发现把画质调到 Low,关闭阴影和反射,帧率从 8 帧直接飙到 30 帧。记住,仿真不是玩游戏,画质够用就行。
1.5 知识体系总览
说了这么多,咱们用一张图来梳理一下本章的核心内容。
1.6 验证你的环境
环境搭好了,怎么知道对不对?写个简单的测试脚本跑一下。
# test_sumo.py
import traci
import sumolib
# 启动 SUMO 仿真
sumoBinary = "sumo-gui"
sumoCmd = [sumoBinary, "-c", "my_sumo.sumocfg"]
traci.start(sumoCmd)
# 获取车辆数量
vehicle_count = traci.vehicle.getIDCount()
print(f"当前仿真中的车辆数:{vehicle_count}")
# 关闭仿真
traci.close()
如果能正常打印出车辆数,恭喜你,环境搭建成功了。
我的经验:第一次跑通仿真的时候,那种感觉就像你亲手组装了一台机器,然后看着它运转起来。虽然只是几行代码,但这是你进入自动驾驶仿真世界的第一步。好好享受这一刻。
好了,这一章的内容就到这里。环境搭好了,下一章咱们就开始真正构建交通场景了。