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

相关推荐
酒旅Agent开发实战10 分钟前
AI 旅行规划助手如何接入真实酒旅数据:从自然语言到酒店预订的全流程 MCP 实战
人工智能·ai·旅游·skill·酒店api·机票api
workflower13 分钟前
设备单元级(L1)实施路径
人工智能·线性代数·矩阵·机器人·开源
Dragon Wu13 分钟前
ComfyUI Desktop 实例进入后一直loading的问题解决
人工智能·ai
“码”力全开37 分钟前
AI视频分析飞书告警常见问题和排查清单
人工智能·音视频·飞书
leoZ23143 分钟前
AI 辅助开发工具链 2026 版深度技术报告:从单点插件到全流程协同的范式重构
人工智能
hy95231 小时前
从零搭建生产级AI智能客服系统(七):基础优化与一键部署,打造开箱即用的生产级系统
人工智能
深度学习机器1 小时前
Ghostty终端使用体验
人工智能·命令行
Token炼金师1 小时前
幂律的预言:Kaplan 与 Chinchilla 的算力账本 —— Scaling Laws 与最优配比
人工智能·深度学习·大模型架构·kv cache·scaling laws
云烟成雨TD1 小时前
LangFlow 1.x 系列【5】可视化编辑页面功能说明
人工智能·python·agent
小宋10211 小时前
Dify 前后端联调踩坑记录:`/console/api/account/profile` 登录失败排查
人工智能·dify