Files
MAGAIL4AutoDrive/Env/DEBUG_GUIDE.md

340 lines
7.8 KiB
Markdown
Raw Normal View History

# 调试功能使用指南
## 📋 概述
已为车道过滤和红绿灯检测功能添加了详细的调试输出,帮助您诊断和理解代码行为。
---
## 🎛️ 调试开关
### 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` - 性能优化指南