Parcourir la source

修改function.py,当TTC<0时或TTC列表为空时,将其赋值为配置文件中的最大值;当预警距离列表为空时将其赋值为配置文件中的最大值

XGJ_zhaoyuan il y a 1 mois
Parent
commit
5ca9488924
2 fichiers modifiés avec 430 ajouts et 6 suppressions
  1. 418 0
      config/metric_config_LeftTurnAssist.yaml
  2. 12 6
      modules/metric/function.py

+ 418 - 0
config/metric_config_LeftTurnAssist.yaml

@@ -0,0 +1,418 @@
+vehicle:
+  # 车辆参数配置
+  CAR_WIDTH: 2.065       # 车体宽度(单位:米)
+  CAR_LENGTH: 5.990      # 车体长度(单位:米)
+  CAR_HEIGHT: 2.820        # 车体高度(单位:米)新增
+  CAR_OFFX: 1.321        # 车辆长度方向参考点到几何中心点的距离(单位:米)新增
+  RHO: 0.3               # 驾驶员制动反应时间(单位:秒)
+  EGO_ACCEL_MAX: 2.268       # 自车油门最大加速度(单位:m/s²)
+  OBJ_DECEL_MAX: 8       # 前车刹车最大减速度(单位:m/s²)
+  EGO_DECEL_MIN: 0.01       # 自车刹车最小减速度(需确认单位:m/s²)
+  EGO_DECEL_LON_MAX: 5.7869   # 自车纵向刹车最大减速度(单位:m/s²)
+  EGO_DECEL_LAT_MAX: 0   # 自车横向刹车最大减速度(单位:m/s²)
+  EGO_WHEELBASS: 3.8     # 自车轮距(单位:米)
+
+T_threshold:
+  T0_threshold: 0  # 表示T0等级的通过阈值
+  T1_threshold: 2  # 表示T1等级的通过阈值
+  T2_threshold: 5  # 表示T2等级的通过阈值
+
+
+
+safety:
+  name: safety
+  priority: 0
+  safeTime:
+    name: safetime
+    priority: 0
+    TTC:
+      name: TTC
+      priority: 0
+      max: 2000.0
+      min: 0.5
+    MTTC:
+      name: MTTC
+      priority: 0
+      max: 2000.0
+      min: 0.1
+    THW:
+      name: THW
+      priority: 0
+      max: 2000.0
+      min: 1.5
+  safeDistance:
+    name: safeDistance
+    priority: 0
+    # LonSD:
+    #   name: LonSD
+    #   priority: 0
+    #   max: 2000.0
+    #   min: 10.0
+    LatSD:
+      name: LatSD 
+      priority: 0
+      max: 2000.0
+      min: 2.0
+  safeAcceleration:
+    name: safeAcceleration
+    priority: 0
+    # DRAC:
+    #   name: DRAC
+    #   priority: 0
+    #   max: 5.0
+    #   min: -2000.0
+    BTN:
+      name: BTN
+      priority: 0
+      max: 1.0
+      min: -2000.0
+    # STN:
+    #   name: STN
+    #   priority: 0
+    #   max: 1.0
+    #   min: -2000.0
+  safeProbability:
+    name: safeProbability
+    priority: 0
+    collisionRisk:
+      name: collisionRisk
+      priority: 0
+      max: 10.0
+      min: 0.0
+    collisionSeverity:
+      name: collisionSeverity
+      priority: 0
+      max: 10.0
+      min: 0.0
+comfort:
+  name: comfort
+  priority: 0
+  comfortLat:
+    name: comfortLat
+    priority: 0
+    Weaving:
+      name: Weaving
+      priority: 0
+      max: 0
+      min: 0
+    shake:
+      name: shake
+      priority: 0
+      max: 10
+      min: 0
+  comfortLon:
+    name: comfortLon
+    priority: 0
+    cadence:
+      name: cadence
+      priority: 0
+      max: 0
+      min: 0
+    slamBrake:
+      name: slamBrake 
+      priority: 0
+      max: 0
+      min: 0
+    slamAccelerate:
+      name: slamAccelerate
+      priority: 0
+      max: 0
+      min: 0
+efficient:
+  name: efficient
+  priority: 0
+  drivingMode:
+    name: drivingMode
+    priority: 0
+    max_speed:
+      name: maxSpeed
+      priority: 0
+      max: 100.0
+      min: 0.0
+    devation_speed:
+      name: deviationSpeed
+      priority: 0
+      max: 10.0
+      min: 0.0
+    averagedSpeed:
+      name: averagedSpeed
+      priority: 0
+      max: 100.0
+      min: 0.0
+  parkingMode:
+    name: parkingMode
+    priority: 0
+    stopDuration:
+      name: stopDuration
+      priority: 0
+      max: 1
+      min: 0
+function:
+  name: function
+  priority: 0
+  scenario:
+    name: LeftTurnAssist
+    priority: 0
+    latestWarningDistance_TTC_LST:
+      name: latestWarningDistance_TTC_LST
+      priority: 0
+      max: 1000
+      min: 0
+    earliestWarningDistance_TTC_LST:
+      name: earliestWarningDistance_TTC_LST
+      priority: 0
+      max: 1000
+      min: 0
+    latestWarningDistance_LST:
+      name: latestWarningDistance_LST
+      priority: 0
+      max: 1000
+      min: 8.27
+    earliestWarningDistance_LST:
+      name: earliestWarningDistance_LST
+      priority: 0
+      max: 1000
+      min: 12.91
+    rightWarningSignal_LST:
+      name: rightWarningSignal_LST
+      priority: 0
+      max: 1
+      min: 0
+traffic:
+  name: traffic
+  priority: 0
+  #重大违规 12分
+  majorViolation:
+    name: majorViolation
+    priority: 0
+    #urbanExpresswayOrHighwaySpeedOverLimit50:表示在高速公路或城市快速路上,机动车驾驶人超速50%以上的;
+    urbanExpresswayOrHighwaySpeedOverLimit50:
+      name: urbanExpresswayOrHighwaySpeedOverLimit50
+      priority: 0
+      max: 10
+      min: 0
+    #urbanExpresswayOrHighwayReverse:表示在高速公路或城市快速路上,机动车倒车行驶;
+    urbanExpresswayOrHighwayReverse:
+      name:
+      priority: 0
+      max: 0
+      min: 0
+    #urbanExpresswayOrHighwayDrivingAgainst:表示在高速公路或城市快速路上,机动车逆行;
+    urbanExpresswayOrHighwayDrivingAgainst:
+      name: higwayDrivingAgainst
+      priority: 0
+      max: 0
+      min: 0
+
+  #严重违规 9分
+  seriousViolation:
+    name: seriousViolation
+    priority: 0
+    #urbanExpresswayOrHighwayDrivingLaneStopped:表示在高速公路或城市快速路上,机动车行驶车道停车;
+    urbanExpresswayOrHighwayDrivingLaneStopped:
+      name: urbanExpresswayOrHighwayDrivingLaneStopped
+      priority: 0
+      max: 0
+      min: 0
+    #urbanExpresswayOrHighwayEmergencyLaneStopped:表示在高速公路或城市快速路上,机动车应急车道内停车的;
+    urbanExpresswayOrHighwayEmergencyLaneStopped:
+      name: highwayEmergencyLaneStopped
+      priority: 0
+      max: 0
+      min: 0
+
+  #危险违规 6分
+  dangerousViolation:
+    name: dangerousViolation
+    priority: 0
+    #urbanExpresswayEmergencyLaneDriving:非紧急情况时在城市快速路或者高速公路应急车道上行驶的;
+    urbanExpresswayEmergencyLaneDriving:
+      name: urbanExpresswayEmergencyLaneDriving
+      priority: 0
+      max: 0
+      min: 0
+    #trafficSignalViolation:表示在交通信号灯控制的道路上,机动车驾驶人违反规定的;
+    trafficSignalViolation:
+      name: trafficSignalViolation
+      priority: 0
+      max: 0
+      min: 0
+    #urbanExpresswayOrHighwaySpeedOverLimit20to50:表示在高速公路或城市快速路上,机动车驾驶人超速20%-50%的;
+    urbanExpresswayOrHighwaySpeedOverLimit20to50:
+      name: urbanExpresswayOrHighwaySpeedOverLimit20to50
+      priority: 0
+      max: 10
+      min: 0
+    #generalRoadSpeedOverLimit50:表示在非高速公路或城市快速路,机动车驾驶人超速50%的;
+    generalRoadSpeedOverLimit50:
+      name: generalRoadSpeedOverLimit50
+      priority: 0
+      max: 0
+      min: 0
+
+  #一般违规 3分
+  generalViolation:
+    name: generalViolation
+    priority: 0
+    #generalRoadSpeedOverLimit20to50:表示在非高速公路或城市快速路,机动车驾驶人超速20%到50%的;
+    generalRoadSpeedOverLimit20to50:
+      name: generalRoadSpeedOverLimit20to50
+      priority: 0
+      max: 0
+      min: 0
+    #urbanExpresswayOrHighwaySpeedUnderLimit: 对于驾驶机动车在高速公路或城市快速路上行驶低于规定最低时速的,将处以记3分的处罚;
+    urbanExpresswayOrHighwaySpeedUnderLimit:
+      name: UrbanExpresswayOrHighwaySpeedUnderLimit
+      priority: 0
+      max: 0
+      min: 0
+    #illegalDrivingOrParkingAtCrossroads:行经交叉路口不按规定行车或者停车,通过路口遇停止信号时,停在停止线以内或路口内的;
+    illegalDrivingOrParkingAtCrossroads:
+      name: illegalDrivingOrParkingAtCrossroads
+      priority: 0
+      max: 0
+      min: 0
+    # 超车类型
+    # overtake_on_right: 从前车右侧超车的
+    overtake_on_right:
+      name: overtake_on_right
+      priority: 0
+      max: 0
+      min: 0
+    # overtake_when_turn_around: 前车掉头时超车的
+    overtake_when_turn_around:
+      name: overtake_when_turn_around
+      priority: 0
+      max: 0
+      min: 0
+    # overtake_when_passing_car: 前车通过时超车的
+    overtake_when_passing_car:
+      name: overtake_when_passing_car
+      priority: 0
+      max: 0
+      min: 0
+    # overtake_in_forbid_lane: 在不该占用车道超车的,前方车辆缓慢行驶
+    overtake_in_forbid_lane:
+      name: overtake_in_forbid_lane
+      priority: 0
+      max: 0
+      min: 0
+    # overtake_in_ramp: 在匝道超车的
+    overtake_in_ramp:
+      name: overtake_in_ramp
+      priority: 0
+      max: 0
+      min: 0
+    # overtake_in_tunnel: 在隧道超车的
+    overtake_in_tunnel:
+      name: overtake_in_tunnel
+      priority: 0
+      max: 0
+      min: 0
+    # overtake_on_accelerate_lane: 在加速车道超车
+    overtake_on_accelerate_lane:
+      name: overtake_on_accelerate_lane
+      priority: 0
+      max: 0
+      min: 0
+    # overtake_on_decelerate_lane: 在减速车道超车
+    overtake_on_decelerate_lane:
+      name: overtake_on_decelerate_lane
+      priority: 0
+      max: 0
+      min: 0
+    # overtake_in_different_senerios: 在不同路口超车情况超车的
+    overtake_in_different_senerios:
+      name: overtake_in_different_senerios
+      priority: 0
+      max: 0
+      min: 0
+    # 减速让行违规类
+    # slow_down_in_crosswalk: 行经人行横道,未减速行驶的
+    slow_down_in_crosswalk:
+      name: slow_down_in_crosswalk
+      priority: 0
+      max: 0
+      min: 0
+    # avoid_pedestrian_in_crosswalk:遇行人正在通过人行横道时未停车让行的
+    avoid_pedestrian_in_crosswalk:
+      name: avoid_pedestrian_in_crosswalk
+      priority: 0
+      max: 0
+      min: 0
+    # avoid_pedestrian_in_the_road :行经没有交通信号的道路时,遇行人横过道路未避让的
+    avoid_pedestrian_in_the_road:
+      name: avoid_pedestrian_in_the_road
+      priority: 0
+      max: 0
+      min: 0
+    # aviod_pedestrian_when_turning:转弯的机动车未让行人先行的
+    aviod_pedestrian_when_turning:
+      name: aviod_pedestrian_when_turning
+      priority: 0
+      max: 0
+      min: 0
+
+    # 违反交通标志
+    # NoStraightThrough: 禁止直行标志地方直行
+    NoStraightThrough:
+      name: NoStraightThrough
+      priority: 0
+      max: 0
+      min: 0
+    
+    # SpeedLimitViolation: 违反限速规定
+    SpeedLimitViolation:
+      name: SpeedLimitViolation
+      priority: 0
+      max: 0
+      min: 0
+
+    # MinimumSpeedLimitViolation: 违反最低限速规定
+    MinimumSpeedLimitViolation:
+      name: MinimumSpeedLimitViolation
+      priority: 0
+      max: 0
+      min: 0
+  #轻度违规 1分
+  minorViolation:
+    name: minorViolation
+    priority: 0
+    noUTurnViolation:
+      #NoU:是“No U-Turn”(禁止掉头)的缩写,表示这一行为是违反禁止掉头规定的。
+      #TurnViolation:表示这是一种违规行为,即掉头行为本身是不被允许的。
+      name: noUTurnViolation
+      priority: 0
+      max: 0
+      min: 0
+
+
+  #警告违规 0分
+  warningViolation:
+    name: warningViolation
+    priority: 0
+    # generalLimit60RoadSpeedOverLimit0to50:驾驶机动车在限速低于60公里/小时的公路上超过规定车速50%以下的,该指标暂时不做
+    # generalLimit60RoadSpeedOverLimit0to50:
+    #   name: generalRoadSpeedOverLimit20to50
+    #   priority: 0
+    #   max: 0
+    #   min: 0
+    # urbanExpresswayOrHighwaySpeedOverLimit0to20:在高速公路或城市快速路,驾驶机动车超速20%以下的
+    urbanExpresswayOrHighwaySpeedOverLimit0to20:
+      name: urbanExpresswayOrHighwaySpeedOverLimit0to20
+      priority: 0
+      max: 0
+      min: 0
+    # urbanExpresswayOrHighwayRideLaneDivider: 机动车在高速公路或者城市快速路上骑轧车行道分界线的
+    urbanExpresswayOrHighwayRideLaneDivider:
+      name: urbanExpresswayOrHighwayRideLaneDivider
+      priority: 0
+      max: 0
+      min: 0
+    # generalRoadIrregularLaneUse:驾驶机动车在高速公路、城市快速路以外的道路上不按规定车道行驶的,这里指的是车辆占用非机动车道;
+    generalRoadIrregularLaneUse:
+      name: generalRoadIrregularLaneUse
+      priority: 0
+      max: 0
+      min: 0
+

+ 12 - 6
modules/metric/function.py

@@ -92,30 +92,33 @@ def get_first_warning(data_processed) -> Optional[pd.DataFrame]:
 def latestWarningDistance_LST(data) -> dict:
     """预警距离计算流水线"""
     scenario_name = data.function_config["function"]["scenario"]["name"]
+    value = data.function_config["function"]["scenario"]["latestWarningDistance_LST"]["max"]
     correctwarning = scenario_sign_dict[scenario_name]
     ego_df = data.ego_data
     warning_dist = calculate_distance(ego_df, correctwarning)
     if warning_dist.empty:
         return {"latestWarningDistance_LST": 0.0}
 
-    return {"latestWarningDistance_LST": float(warning_dist.iloc[-1])}
+    return {"latestWarningDistance_LST": float(warning_dist.iloc[-1]) if len(warning_dist) > 0 else value}
 
 
 def earliestWarningDistance_LST(data) -> dict:
     """预警距离计算流水线"""
     scenario_name = data.function_config["function"]["scenario"]["name"]
+    value = data.function_config["function"]["scenario"]["earliestWarningDistance_LST"]["max"]
     correctwarning = scenario_sign_dict[scenario_name]
     ego_df = data.ego_data
     warning_dist = calculate_distance(ego_df, correctwarning)
     if warning_dist.empty:
         return {"earliestWarningDistance_LST": 0.0}
 
-    return {"earliestWarningDistance_LST": float(warning_dist.iloc[0]) if len(warning_dist) > 0 else np.inf}
+    return {"earliestWarningDistance_LST": float(warning_dist.iloc[0]) if len(warning_dist) > 0 else value}
 
 
 def latestWarningDistance_TTC_LST(data) -> dict:
     """TTC计算流水线"""
     scenario_name = data.function_config["function"]["scenario"]["name"]
+    value = data.function_config["function"]["scenario"]["latestWarningDistance_TTC_LST"]["max"]
     correctwarning = scenario_sign_dict[scenario_name]
     ego_df = data.ego_data
     warning_dist = calculate_distance(ego_df, correctwarning)
@@ -126,13 +129,15 @@ def latestWarningDistance_TTC_LST(data) -> dict:
 
     with np.errstate(divide='ignore', invalid='ignore'):
         ttc = np.where(warning_speed != 0, warning_dist / warning_speed, np.inf)
-
-    return {"latestWarningDistance_TTC_LST": float(ttc[-1]) if len(ttc) > 0 else np.inf}
+    for i in range(len(ttc)):
+        ttc[i] = float(value) if (not ttc[i] or ttc[i] < 0) else ttc[i]
+    return {"latestWarningDistance_TTC_LST": float(ttc[-1]) if len(ttc) > 0 else value}
 
 
 def earliestWarningDistance_TTC_LST(data) -> dict:
     """TTC计算流水线"""
     scenario_name = data.function_config["function"]["scenario"]["name"]
+    value = data.function_config["function"]["scenario"]["earliestWarningDistance_TTC_LST"]["max"]
     correctwarning = scenario_sign_dict[scenario_name]
     ego_df = data.ego_data
     warning_dist = calculate_distance(ego_df, correctwarning)
@@ -143,8 +148,9 @@ def earliestWarningDistance_TTC_LST(data) -> dict:
 
     with np.errstate(divide='ignore', invalid='ignore'):
         ttc = np.where(warning_speed != 0, warning_dist / warning_speed, np.inf)
-
-    return {"earliestWarningDistance_TTC_LST": float(ttc[0]) if len(ttc) > 0 else np.inf}
+    for i in range(len(ttc)):
+        ttc[i] = float(value) if (not ttc[i] or ttc[i] < 0) else ttc[i]
+    return {"earliestWarningDistance_TTC_LST": float(ttc[0]) if len(ttc) > 0 else value}
 
 
 def warningDelayTime_LST(data):