自动驾驶—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 的基石,特别适合需要 高保真、可扩展、可复现 交通流的工业级应用。

相关推荐
Data analyse4561 分钟前
用户路径SQL按会话起止时间聚合的方法
大数据·服务器·前端·数据库·人工智能·sql·数据分析
程序员清风3 分钟前
文本字段清洗:字符串、分类值与格式标准化
大数据·人工智能·分类
甲维斯4 分钟前
Gemin4 很难说好,但也不算差!
人工智能
智慧物业老杨4 分钟前
物业费催收难?数智化系统如何用技术重构“服务-收费“闭环
大数据·人工智能
u1301305 分钟前
GitHub 热榜项目:日榜(2026-10-14)
人工智能·github
Raas1005 分钟前
AI网关怎么选?MAI Gateway(魔芋企业级AI网关)入选2026年企业级AI网关推荐清单
大数据·网络·人工智能·gateway·mai gateway
晨间晓6 分钟前
两张图片哪里不一样?用 OpenCV 做图像差异检测工具
人工智能·opencv·计算机视觉
逸A10 分钟前
携程app逆向那些事(ai agent能力偏弱时)
人工智能·python·安全
汇智信科14 分钟前
基于 SMS 体系的民航安全管理平台架构,危险源与事件闭环管理
人工智能·安全·汇智信科·hsim·fastclaw·汇智龙虾
数据皮皮侠17 分钟前
中国产品级二氧化碳排放数据集
大数据·人工智能·搜索引擎·智慧城市·制造