metric_safety_safeTime_CustomTTC.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. """自定义TTC指标评测脚本
  2. 此脚本实现了一个自定义的TTC(Time To Collision)指标评测逻辑
  3. """
  4. from typing import Dict, Any
  5. import math
  6. from modules.lib.score import Score
  7. import logging
  8. from modules.lib.metric_registry import BaseMetric
  9. # 指定指标类别
  10. METRIC_CATEGORY = "safety"
  11. class CustomTTCMetric(BaseMetric):
  12. """自定义TTC指标类"""
  13. def __init__(self, data: Any):
  14. """初始化指标
  15. Args:
  16. data: 输入数据,包含场景、轨迹等信息
  17. """
  18. super().__init__(data)
  19. def calculate(self) -> Dict[str, Any]:
  20. """计算指标
  21. Returns:
  22. 计算结果字典,包含指标值、评分和详细信息
  23. """
  24. try:
  25. # 计算最小TTC值
  26. min_ttc = self._calculate_min_ttc()
  27. # 构建返回结果
  28. result = {"CustomTTC": min_ttc}
  29. return result
  30. except Exception as e:
  31. logging.error(f"评测CustomTTC指标失败: {str(e)}")
  32. return {
  33. "value": 0.0,
  34. "score": 0,
  35. "details": {"error": str(e)}
  36. }
  37. def _calculate_min_ttc(self) -> float:
  38. """计算最小TTC值
  39. Returns:
  40. 最小TTC值
  41. """
  42. if self.data is None or not hasattr(self.data, 'ego_data'):
  43. raise ValueError("输入数据不能为空或格式不正确")
  44. # 初始化为一个较大的值
  45. min_ttc = float('inf')
  46. # 这里应该实现实际的TTC计算逻辑
  47. # 示例:遍历所有时间点,计算ego车辆与其他车辆的TTC
  48. # 临时使用固定值代替实际计算
  49. min_ttc = 1.0
  50. return min_ttc