import numpy as np def index_function(idx, max_val=192, max_idx=32): return (max_val) * ((idx/max_idx)**2) class ModelConstants: # time and distance indices IDX_N = 33 T_IDXS = [index_function(idx, max_val=10.0) for idx in range(IDX_N)] X_IDXS = [index_function(idx, max_val=192.0) for idx in range(IDX_N)] LEAD_T_IDXS = [0., 2., 4., 6., 8., 10.] LEAD_T_OFFSETS = [0., 2., 4.] META_T_IDXS = [2., 4., 6., 8., 10.] # model inputs constants MODEL_FREQ = 20 FEATURE_LEN = 512 FULL_HISTORY_BUFFER_LEN = 100 DESIRE_LEN = 8 TRAFFIC_CONVENTION_LEN = 2 LAT_PLANNER_STATE_LEN = 4 LATERAL_CONTROL_PARAMS_LEN = 2 PREV_DESIRED_CURV_LEN = 1 # model outputs constants FCW_THRESHOLDS_5MS2 = np.array([.05, .05, .15, .15, .15], dtype=np.float32) FCW_THRESHOLDS_3MS2 = np.array([.7, .7], dtype=np.float32) FCW_5MS2_PROBS_WIDTH = 5 FCW_3MS2_PROBS_WIDTH = 2 DISENGAGE_WIDTH = 5 POSE_WIDTH = 6 WIDE_FROM_DEVICE_WIDTH = 3 LEAD_WIDTH = 4 LANE_LINES_WIDTH = 2 ROAD_EDGES_WIDTH = 2 PLAN_WIDTH = 15 DESIRE_PRED_WIDTH = 8 LAT_PLANNER_SOLUTION_WIDTH = 4 DESIRED_CURV_WIDTH = 1 NUM_LANE_LINES = 4 NUM_ROAD_EDGES = 2 LEAD_TRAJ_LEN = 6 DESIRE_PRED_LEN = 4 PLAN_MHP_N = 5 LEAD_MHP_N = 2 PLAN_MHP_SELECTION = 1 LEAD_MHP_SELECTION = 3 FCW_THRESHOLD_5MS2_HIGH = 0.15 FCW_THRESHOLD_5MS2_LOW = 0.05 FCW_THRESHOLD_3MS2 = 0.7 CONFIDENCE_BUFFER_LEN = 5 RYG_GREEN = 0.01165 RYG_YELLOW = 0.06157 POLY_PATH_DEGREE = 4 # model outputs slices class Plan: POSITION = slice(0, 3) VELOCITY = slice(3, 6) ACCELERATION = slice(6, 9) T_FROM_CURRENT_EULER = slice(9, 12) ORIENTATION_RATE = slice(12, 15) class Meta: ENGAGED = slice(0, 1) # next 2, 4, 6, 8, 10 seconds GAS_DISENGAGE = slice(1, 31, 6) BRAKE_DISENGAGE = slice(2, 31, 6) STEER_OVERRIDE = slice(3, 31, 6) HARD_BRAKE_3 = slice(4, 31, 6) HARD_BRAKE_4 = slice(5, 31, 6) HARD_BRAKE_5 = slice(6, 31, 6) # next 0, 2, 4, 6, 8, 10 seconds GAS_PRESS = slice(31, 55, 4) BRAKE_PRESS = slice(32, 55, 4) LEFT_BLINKER = slice(33, 55, 4) RIGHT_BLINKER = slice(34, 55, 4)