Files
MAGAIL4AutoDrive/Env/DEBUG_GUIDE.md

340 lines
7.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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