一、仿真概述与环境搭建

各位同学好,我是老张。在自动驾驶这个行当摸爬滚打了七八年,今天咱们聊聊仿真这件事。

说实话,刚入行那会儿,我对仿真也是半信半疑。总觉得真车上路跑一跑,什么问题都暴露了,何必费劲搞仿真?直到有一次,我们在测试园区里差点撞上一个突然冲出来的小孩——虽然最后刹住了,但那一脚急刹,让我后背全是冷汗。从那以后,我彻底明白了仿真的价值。

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 知识体系总览

说了这么多,咱们用一张图来梳理一下本章的核心内容。

交通仿真知识体系 为什么需要仿真? 用什么工具? 怎么搭建环境? 安全:零成本试错 效率:并行加速测试 覆盖:极端场景复现 SUMO:交通流仿真 CARLA:传感器仿真 SUMO + CARLA 联合仿真 Python 3.8/3.9 环境 SUMO 安装与配置 CARLA 安装与启动 核心目标:搭建可用的仿真测试平台 为后续章节的复杂场景构建打下基础

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()

如果能正常打印出车辆数,恭喜你,环境搭建成功了。

我的经验:第一次跑通仿真的时候,那种感觉就像你亲手组装了一台机器,然后看着它运转起来。虽然只是几行代码,但这是你进入自动驾驶仿真世界的第一步。好好享受这一刻。

好了,这一章的内容就到这里。环境搭好了,下一章咱们就开始真正构建交通场景了。

可可精品资料库