📌 测试用例
PythonAPI/examples/generate_traffic.py
大规模交通流生成器(Traffic Generator),用于:
- 批量生成指定数量的车辆和行人
- 配置 Traffic Manager(TM)实现智能交通行为
- 支持同步/异步模式、安全过滤、主车设置等高级功能
适用于 自动驾驶系统在复杂城市场景下的压力测试、感知算法验证、V2X 通信仿真。
carla_generate_traffic
🔑 主要模块解析
1. 蓝图过滤与代际控制
python
def get_actor_blueprints(world, filter, generation):
bps = world.get_blueprint_library().filter(filter)
if generation.lower() == "all": return bps
# 按 generation 属性过滤(1/2/3 代车辆)
bps = [x for x in bps if int(x.get_attribute('generation')) == int_generation]
--generationv/--generationw:限制生成特定代际的车辆/行人--safe:仅生成base_type='car'的车辆(排除摩托车等易事故车型)
✅ 确保生成的 Actor 符合测试需求(如只用四轮汽车)。
2. Traffic Manager 高级配置
python
traffic_manager = client.get_trafficmanager(args.tm_port)
traffic_manager.set_global_distance_to_leading_vehicle(2.5) # 跟车距离
traffic_manager.set_hybrid_physics_mode(True) # 混合物理(近处高精度)
traffic_manager.set_respawn_dormant_vehicles(True) # 自动重生休眠车辆
traffic_manager.global_percentage_speed_difference(30.0) # 全局降速 30%
- 混合物理模式 :
- 半径 70 米内车辆使用完整物理
- 外部车辆简化计算 → 提升大规模仿真性能
- 自动重生:在大型地图(如 Town10)中防止交通稀疏
3. 高效批量生成(Batch Spawning)
车辆生成:
python
batch = []
for transform in spawn_points[:args.number_of_vehicles]:
batch.append(SpawnActor(blueprint, transform)
.then(SetAutopilot(FutureActor, True, tm_port)))
client.apply_batch_sync(batch, do_tick=True)
- 原子操作 :
SpawnActor+SetAutopilot合并为单次 RPC 调用 - 避免逐个生成的高延迟
行人生成(三阶段):
-
生成行人实体(带速度属性)
-
生成 AI 控制器 (
controller.ai.walker) -
启动控制器 :
pythoncontroller.start() controller.go_to_location(random_location) controller.set_max_speed(walking_speed)
✅ 支持 行人过街行为 (
set_pedestrians_cross_factor)和 轮椅行人(10% 概率)。
4. 同步模式管理
python
if not args.asynch:
traffic_manager.set_synchronous_mode(True)
settings.synchronous_mode = True
settings.fixed_delta_seconds = 0.05 # 20 FPS
world.apply_settings(settings)
- 同步模式:确保传感器数据与时序严格对齐(推荐用于数据采集)
- 异步模式:更高帧率但可能丢帧(仅用于可视化)
5. 特殊车辆配置
-
英雄车(Hero Vehicle) :
pythonif hero: blueprint.set_attribute('role_name', 'hero')- 通常用于挂载传感器的主车
- 可通过
world.get_actors().filter('vehicle.*')按role_name筛选
-
自动车灯管理 :
pythontraffic_manager.update_vehicle_lights(actor, True)- 根据环境光自动开关大灯/雾灯
6. 资源安全清理
python
finally:
# 恢复原始世界设置
world.apply_settings(original_world_settings)
# 批量销毁车辆
client.apply_batch([DestroyActor(x) for x in vehicles_list])
# 停止行人控制器 + 销毁所有行人
for i in range(0, len(all_id), 2):
all_actors[i].stop() # 控制器需先 stop()
client.apply_batch([DestroyActor(x) for x in all_id])
- 关键细节 :行人控制器必须先
stop()再销毁,否则会报错
🎯 核心应用场景
| 场景 | 配置参数 |
|---|---|
| 高密度交通测试 | -n 100 -w 50 --hybrid |
| 夜间行车验证 | --car-lights-on |
| 特定车型测试 | --filterv "vehicle.tesla.*" --generationv 2 |
| 无渲染高性能仿真 | --no-rendering --asynch |
| 可复现实验 | --seed 12345 --seedw 67890 |
⚠️ 技术点
-
混合物理模式
- 在 Town10 等大型地图中,同时保证 近处精度 和 全局规模
-
行人行为多样性
- 支持 行走/奔跑 、过街 、轮椅 三种行为模式
-
原子化批量操作
- 使用
apply_batch_sync减少网络开销,100 辆车生成时间 < 2 秒
- 使用
-
无缝模式切换
- 自动处理同步/异步模式的世界设置差异
✅ 总结
该脚本是 CARLA 生产级交通仿真的标准模板,展示了:
- 如何 高效生成大规模、多样化交通参与者
- 如何 配置 Traffic Manager 实现真实交通行为
- 如何 管理资源与仿真模式 确保稳定性
它是构建 城市场景自动驾驶测试 pipeline 的基石,特别适合需要 高保真、可扩展、可复现 交通流的工业级应用。