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

相关推荐
测试者家园23 分钟前
为什么意图驱动测试是自动化测试的下一站,而不是替代品
自动化测试·软件测试·人工智能·持续测试·ai赋能·智能化测试·软件测试变革
D202020201 小时前
TikTok Shop禁止AI语音直播落地后,跨境卖家如何通过达秘合规调整带货内容
人工智能
像风一样自由20202 小时前
20.Milvus常见问题检索不到维度错误和数据一致性
人工智能·大模型·milvus
现代野蛮人2 小时前
【深度学习实验】—— 基于 LSTM 与 Optuna 调参的丙型肝炎预测
人工智能·深度学习·lstm
支支დ2 小时前
VO by Vercel 前端特定优势:为什么它是构建 AI 应用的新范式
前端·人工智能
ZGIAI2 小时前
ZGI 让那些"等你去处理"的事,真正跑起来
人工智能·架构
ZGIAI2 小时前
ZGI:别再做Agent Demo了,先问问它在业务里能不能撑过下周三
人工智能·架构
香芋芋圆2 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
m0_614523553 小时前
完整教程|输入一句描述,能不能直接生成一段可以继续剪辑的视频:写结构化描述到生成短样片
人工智能·音视频
stormzhangV3 小时前
AGI 时代终于来了!
人工智能·openai