فهرست منبع

修改功能性指标中limitSpeed_LST、limitSpeedPastLimitSign_LST、maxLongitudeDist_LST指标的画图bug

XGJ_zhaoyuan 5 روز پیش
والد
کامیت
ccd88b5871
3فایلهای تغییر یافته به همراه24 افزوده شده و 12 حذف شده
  1. 2 2
      config/all_metrics_config.yaml
  2. 5 4
      modules/lib/chart_generator.py
  3. 17 6
      modules/metric/function.py

+ 2 - 2
config/all_metrics_config.yaml

@@ -232,8 +232,8 @@ function:
     limitSpeed_LST:
       name: limitSpeed_LST
       priority: 0
-      max: 0
-      min: 30
+      max: 30
+      min: 0
     leastDistance_LST:
       name: leastDistance_LST
       priority: 0

+ 5 - 4
modules/lib/chart_generator.py

@@ -1085,6 +1085,7 @@ def generate_max_longitude_dist_chart(function_calculator, output_dir: str) -> O
 
         # Get longitudinal distance data
         longitude_dist = ego_df['longitude_dist'] if 'longitude_dist' in ego_df.columns else None
+        stop_time = ego_df['stop_time'] if 'stop_time' in ego_df.columns else None
 
         if longitude_dist is None or longitude_dist.empty:
             logger.warning(f"Cannot generate {metric_name} chart: missing longitudinal distance data")
@@ -1098,9 +1099,9 @@ def generate_max_longitude_dist_chart(function_calculator, output_dir: str) -> O
         csv_filename = os.path.join(output_dir, f"{metric_name.lower()}_data.csv")
         df_csv = pd.DataFrame({
             'simTime': ego_df['simTime'],
-            'longitude_dist': longitude_dist,
-            'min_threshold': min_threshold,
-            'max_threshold': max_threshold
+            'x_relative_dist': ego_df['x_relative_dist'],
+            'stop_time': stop_time,
+            'longitude_dist': longitude_dist
         })
         df_csv.to_csv(csv_filename, index=False)
         logger.info(f"{metric_name} data saved to: {csv_filename}")
@@ -1112,7 +1113,7 @@ def generate_max_longitude_dist_chart(function_calculator, output_dir: str) -> O
         plt.figure(figsize=(12, 6), constrained_layout=True)
 
         # Plot longitudinal distance
-        plt.plot(df['simTime'], df['longitude_dist'], 'b-', label='Longitudinal Distance')
+        plt.plot(df['simTime'], df['x_relative_dist'], 'b-', label='Longitudinal Distance')
 
         # Add threshold lines
         plt.axhline(y=max_threshold, color='r', linestyle='--', label=f'Max Threshold ({max_threshold}m)')

+ 17 - 6
modules/metric/function.py

@@ -356,22 +356,29 @@ def ifStopgreenWaveSpeedGuidance_LST(data):
 # ------ 单车智能指标 ------
 def limitSpeed_LST(data):
     ego_df = data.ego_data
-
-    speed_limit = ego_df[ego_df['x_relative_dist'] == 0]['v'].tolist()
+    scenario_name = find_nested_name(data.function_config["function"])
+    limit_speed = data.function_config["function"][scenario_name]["limitSpeed_LST"]["max"]
+    speed_limit = ego_df[abs(ego_df['x_relative_dist']) <= 0.1]['v'].tolist()
     if len(speed_limit) == 0:
         return {"speedLimit_LST": -1}
     max_speed = max(speed_limit)
+    data.speedLimit = limit_speed
     generate_function_chart_data(data, 'limitspeed_LST')
     return {"speedLimit_LST": max_speed}
 
 
 def limitSpeedPastLimitSign_LST(data):
     ego_df = data.ego_data
+    scenario_name = find_nested_name(data.function_config["function"])
+    limit_speed = data.function_config["function"][scenario_name]["limitSpeed_LST"]["max"]
     car_length = data.function_config["vehicle"]['CAR_LENGTH']
-    ego_speed = ego_df[ego_df['x_relative_dist'] == -100 - car_length]['v'].tolist()
+    ego_speed = ego_df[ego_df['x_relative_dist'] <= -100 - car_length]['v'].tolist()
+    ego_time = ego_df[ego_df['x_relative_dist'] <= -100 - car_length]['simTime'].tolist()
+    data.speedLimit = limit_speed
+    data.speedPastLimitSign_LST = ego_time[0] if len(ego_time) > 0 else None
+    generate_function_chart_data(data, 'limitSpeedPastLimitSign_LST')
     if len(ego_speed) == 0:
         return {"speedPastLimitSign_LST": -1}
-    generate_function_chart_data(data, 'limitSpeedPastLimitSign_LST')
     return {"speedPastLimitSign_LST": ego_speed[0]}
 
 
@@ -539,10 +546,14 @@ def laneOffset_LST(data):
 
 def maxLongitudeDist_LST(data):
     ego_df = data.ego_data
-    if len(ego_df['x_relative_dist']) == 0:
+    longitude_dist = abs(ego_df[ego_df['v'] == 0]['x_relative_dist'].tolist())
+    data.longitude_dist = min(abs(ego_df[ego_df['v'] == 0]['x_relative_dist'].tolist()))
+    stop_time = ego_df[abs(ego_df['x_relative_dist']) == min(longitude_dist)]['simTime'].tolist()
+    data.stop_time = min(stop_time)
+    if len(longitude_dist) == 0:
         return {"maxLongitudeDist_LST": -1}
     generate_function_chart_data(data, 'maxLongitudeDist_LST')
-    return {"maxLongDist_LST": max(ego_df['x_relative_dist'])}
+    return {"maxLongDist_LST": min(longitude_dist)}
 
 
 def noEmergencyBraking_LST(data):