Files
MAGAIL4AutoDrive/Env/DEBUG_GUIDE.md

7.8 KiB
Raw Blame History

调试功能使用指南

📋 概述

已为车道过滤和红绿灯检测功能添加了详细的调试输出,帮助您诊断和理解代码行为。


🎛️ 调试开关

1. 配置参数

在创建环境时,可以通过 config 参数启用调试模式:

env = MultiAgentScenarioEnv(
    config={
        # ... 其他配置 ...
        
        # 🔥 调试开关
        "debug_lane_filter": True,     # 启用车道过滤调试
        "debug_traffic_light": True,   # 启用红绿灯检测调试
    },
    agent2policy=your_policy
)

2. 默认值

两个调试开关默认都是 False(关闭),避免正常运行时产生大量日志。


📊 车道过滤调试 (debug_lane_filter=True)

输出内容

📍 场景信息统计:
  - 总车道数: 123

🔍 开始车道过滤: 共 51 辆车待检测

车辆 1/51: ID=128
  🔍 检测位置 (-4.11, 46.76), 容差=3.0m
    ✅ 在车道上 (车道184, 检查了32条)
  ✅ 保留

车辆 7/51: ID=134
  🔍 检测位置 (-51.34, -3.77), 容差=3.0m
    ❌ 不在任何车道上 (检查了123条车道)
  ❌ 过滤 (原因: 不在车道上)

... (所有车辆)

📊 过滤结果: 保留 45 辆, 过滤 6 辆

调试信息说明

信息 含义
📍 场景信息统计 场景的基本信息(车道数、红绿灯数)
🔍 开始车道过滤 开始过滤,显示待检测车辆总数
🔍 检测位置 车辆的坐标和使用的容差值
在车道上 找到了车辆所在的车道显示车道ID和检查次数
不在任何车道上 所有车道都检查完了,未找到匹配的车道
📊 过滤结果 最终统计:保留多少辆,过滤多少辆

典型输出案例

情况1车辆在正常车道上

车辆 1/51: ID=128
  🔍 检测位置 (-4.11, 46.76), 容差=3.0m
    ✅ 在车道上 (车道184, 检查了32条)
  ✅ 保留

→ 检查了32条车道后找到匹配的车道184

情况2车辆在草坪/停车场

车辆 7/51: ID=134
  🔍 检测位置 (-51.34, -3.77), 容差=3.0m
    ❌ 不在任何车道上 (检查了123条车道)
  ❌ 过滤 (原因: 不在车道上)

→ 检查了所有123条车道都不匹配该车辆被过滤


🚦 红绿灯检测调试 (debug_traffic_light=True)

输出内容

📍 场景信息统计:
  - 总车道数: 123
  - 有红绿灯的车道数: 0
    ⚠️ 场景中没有红绿灯!

🚦 检测车辆红绿灯 - 位置: (-4.1, 46.8)
  方法1-导航模块:
    current_lane = <metadrive.component.lane.straight_lane.StraightLane object>
    lane_index = 184
    has_traffic_light = False
    该车道没有红绿灯
  方法2-遍历车道: 开始遍历 123 条车道
    ✓ 找到车辆所在车道: 184 (检查了32条)
    has_traffic_light = False
    该车道没有红绿灯
  结果: 返回 0 (无红绿灯/未知)

调试信息说明

信息 含义
有红绿灯的车道数 统计场景中有多少个红绿灯
⚠️ 场景中没有红绿灯 如果数量为0会特别提示
方法1-导航模块 尝试从导航系统获取
current_lane 导航系统返回的当前车道对象
lane_index 车道的唯一标识符
has_traffic_light 该车道是否有红绿灯
status 红绿灯的状态GREEN/YELLOW/RED/None
方法2-遍历车道 兜底方案,遍历所有车道查找
✓ 找到车辆所在车道 遍历找到了匹配的车道

典型输出案例

情况1场景没有红绿灯

📍 场景信息统计:
  - 有红绿灯的车道数: 0
    ⚠️ 场景中没有红绿灯!

🚦 检测车辆红绿灯 - 位置: (-4.1, 46.8)
  方法1-导航模块:
    ...
    has_traffic_light = False
    该车道没有红绿灯
  结果: 返回 0 (无红绿灯/未知)

→ 所有车辆都会返回0这是正常的

情况2有红绿灯且状态正常

🚦 检测车辆红绿灯 - 位置: (10.5, 20.3)
  方法1-导航模块:
    current_lane = <...>
    lane_index = 205
    has_traffic_light = True
    status = TRAFFIC_LIGHT_GREEN
  ✅ 方法1成功: 绿灯

→ 方法1直接成功返回1绿灯

情况3红绿灯状态为None

🚦 检测车辆红绿灯 - 位置: (10.5, 20.3)
  方法1-导航模块:
    current_lane = <...>
    lane_index = 205
    has_traffic_light = True
    status = None
  ⚠️ 方法1: 红绿灯状态为None

→ 有红绿灯但状态异常返回0

情况4导航失败方法2兜底

🚦 检测车辆红绿灯 - 位置: (15.2, 30.5)
  方法1-导航模块: 不可用 (hasattr=True, not_none=False)
  方法2-遍历车道: 开始遍历 123 条车道
    ✓ 找到车辆所在车道: 210 (检查了45条)
    has_traffic_light = True
    status = TRAFFIC_LIGHT_RED
  ✅ 方法2成功: 红灯

→ 方法1失败方法2兜底成功返回3红灯


🧪 测试方法

方式1使用测试脚本

# 标准测试(无详细调试)
python Env/test_lane_filter.py

# 调试模式(详细输出)
python Env/test_lane_filter.py --debug

方式2在代码中直接启用

from scenario_env import MultiAgentScenarioEnv
from simple_idm_policy import ConstantVelocityPolicy

env = MultiAgentScenarioEnv(
    config={
        "data_directory": "...",
        "use_render": False,
        
        # 启用调试
        "debug_lane_filter": True,
        "debug_traffic_light": True,
    },
    agent2policy=ConstantVelocityPolicy(target_speed=50)
)

obs = env.reset(0)
# 调试信息会自动输出

📝 调试输出控制

场景1只想看车道过滤

config = {
    "debug_lane_filter": True,
    "debug_traffic_light": False,  # 关闭红绿灯调试
}

场景2只想看红绿灯检测

config = {
    "debug_lane_filter": False,
    "debug_traffic_light": True,  # 只看红绿灯
}

场景3生产环境关闭所有调试

config = {
    "debug_lane_filter": False,
    "debug_traffic_light": False,
}
# 或者直接不设置这两个参数默认就是False

💡 常见问题诊断

问题1所有红绿灯状态都是0

检查调试输出:

📍 场景信息统计:
  - 有红绿灯的车道数: 0
    ⚠️ 场景中没有红绿灯!

结论: 场景本身没有红绿灯返回0是正常的


问题2车辆被过滤但不应该过滤

检查调试输出:

车辆 X: ID=XXX
  🔍 检测位置 (x, y), 容差=3.0m
    ❌ 不在任何车道上 (检查了123条车道)
  ❌ 过滤 (原因: 不在车道上)

可能原因:

  1. 车辆确实在非车道区域(草坪/停车场)
  2. 容差值太小,可以尝试增大 lane_tolerance
  3. 车道数据有问题

解决方案:

config = {
    "lane_tolerance": 5.0,  # 增大容差到5米
}

问题3性能下降

启用调试模式会有大量输出,影响性能:

解决方案:

  • 只在开发/调试时启用
  • 生产环境关闭所有调试开关
  • 或者只测试少量车辆:
    config = {
        "max_controlled_vehicles": 5,  # 只测试5辆车
        "debug_traffic_light": True,
    }
    

📌 最佳实践

  1. 开发阶段:启用调试,理解代码行为
  2. 调试问题:根据需要选择性启用调试
  3. 性能测试:关闭所有调试
  4. 生产运行:永久关闭调试

🔧 调试输出示例

完整的调试运行示例:

cd /home/huangfukk/MAGAIL4AutoDrive
python Env/test_lane_filter.py --debug

输出会包含:

  • 场景统计信息
  • 每辆车的详细检测过程
  • 最终的过滤/检测结果
  • 性能统计

📖 相关文档

  • README.md - 项目总览和问题解决
  • CHANGELOG.md - 更新日志
  • PERFORMANCE_OPTIMIZATION.md - 性能优化指南