自动驾驶—CARLA仿真(16)generate_traffic demo

📌 测试用例

PythonAPI/examples/generate_traffic.py

大规模交通流生成器(Traffic Generator),用于:

  1. 批量生成指定数量的车辆和行人
  2. 配置 Traffic Manager(TM)实现智能交通行为
  3. 支持同步/异步模式、安全过滤、主车设置等高级功能

适用于 自动驾驶系统在复杂城市场景下的压力测试、感知算法验证、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 调用
  • 避免逐个生成的高延迟
行人生成(三阶段):
  1. 生成行人实体(带速度属性)

  2. 生成 AI 控制器controller.ai.walker

  3. 启动控制器

    python 复制代码
    controller.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)

    python 复制代码
    if hero: blueprint.set_attribute('role_name', 'hero')
    • 通常用于挂载传感器的主车
    • 可通过 world.get_actors().filter('vehicle.*')role_name 筛选
  • 自动车灯管理

    python 复制代码
    traffic_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

⚠️ 技术点

  1. 混合物理模式

    • Town10 等大型地图中,同时保证 近处精度全局规模
  2. 行人行为多样性

    • 支持 行走/奔跑过街轮椅 三种行为模式
  3. 原子化批量操作

    • 使用 apply_batch_sync 减少网络开销,100 辆车生成时间 < 2 秒
  4. 无缝模式切换

    • 自动处理同步/异步模式的世界设置差异

✅ 总结

该脚本是 CARLA 生产级交通仿真的标准模板,展示了:

  1. 如何 高效生成大规模、多样化交通参与者
  2. 如何 配置 Traffic Manager 实现真实交通行为
  3. 如何 管理资源与仿真模式 确保稳定性

它是构建 城市场景自动驾驶测试 pipeline 的基石,特别适合需要 高保真、可扩展、可复现 交通流的工业级应用。

相关推荐
错把套路当深情4 分钟前
通俗易懂的 TensorFlow 和 Transformers
人工智能·tensorflow·transformer
子午5 分钟前
【2026计算机毕设~AI项目】花朵识别系统~Python+深度学习+人工智能+算法模型+TensorFlow+图像识别
图像处理·人工智能·python·深度学习
EnochChen_5 分钟前
指定显卡的三种方式
人工智能·深度学习
YMWM_6 分钟前
LoRA论文分析:低秩适应大型语言模型
人工智能·语言模型·自然语言处理
劈星斩月7 分钟前
神经网络之S神经元(Sigmoid neurons)
人工智能·深度学习·神经网络·sigmoid·s神经元
新缸中之脑7 分钟前
在 ESP32 上运行AI模型
人工智能
Dingdangcat869 分钟前
仙人掌品种识别与分类:YOLO11与AKConv融合模型的实现与应用详解
人工智能·分类·数据挖掘
阿杰学AI15 分钟前
AI核心知识72——大语言模型之Native Multimodality(简洁且通俗易懂版)
人工智能·ai·语言模型·aigc·语音识别·多模态·原生多模态
_codemonster18 分钟前
windows安装适配CUDA环境与pytorch环境
人工智能·pytorch·windows
小袁进化之路22 分钟前
黎跃春深度解析:2026 智能体应用开发全流程与工程化实战思路
人工智能·智能体