7.8 KiB
7.8 KiB
调试功能使用指南
📋 概述
已为车道过滤和红绿灯检测功能添加了详细的调试输出,帮助您诊断和理解代码行为。
🎛️ 调试开关
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条车道)
❌ 过滤 (原因: 不在车道上)
可能原因:
- 车辆确实在非车道区域(草坪/停车场)
- 容差值太小,可以尝试增大
lane_tolerance - 车道数据有问题
解决方案:
config = {
"lane_tolerance": 5.0, # 增大容差到5米
}
问题3:性能下降
启用调试模式会有大量输出,影响性能:
解决方案:
- 只在开发/调试时启用
- 生产环境关闭所有调试开关
- 或者只测试少量车辆:
config = { "max_controlled_vehicles": 5, # 只测试5辆车 "debug_traffic_light": True, }
📌 最佳实践
- 开发阶段:启用调试,理解代码行为
- 调试问题:根据需要选择性启用调试
- 性能测试:关闭所有调试
- 生产运行:永久关闭调试
🔧 调试输出示例
完整的调试运行示例:
cd /home/huangfukk/MAGAIL4AutoDrive
python Env/test_lane_filter.py --debug
输出会包含:
- 场景统计信息
- 每辆车的详细检测过程
- 最终的过滤/检测结果
- 性能统计
📖 相关文档
README.md- 项目总览和问题解决CHANGELOG.md- 更新日志PERFORMANCE_OPTIMIZATION.md- 性能优化指南