|
|
@ -49,14 +49,16 @@ T_IDXS_LST = [index_function(idx, max_val=MAX_T, max_idx=N+1) for idx in range(N |
|
|
|
T_IDXS = np.array(T_IDXS_LST) |
|
|
|
T_IDXS = np.array(T_IDXS_LST) |
|
|
|
T_DIFFS = np.diff(T_IDXS, prepend=[0.]) |
|
|
|
T_DIFFS = np.diff(T_IDXS, prepend=[0.]) |
|
|
|
MIN_ACCEL = -3.5 |
|
|
|
MIN_ACCEL = -3.5 |
|
|
|
T_REACT = 1.45 |
|
|
|
T_REACT = 0.5 |
|
|
|
|
|
|
|
T_FOLLOW = 1.45 |
|
|
|
COMFORT_BRAKE = 2.0 |
|
|
|
COMFORT_BRAKE = 2.0 |
|
|
|
|
|
|
|
STOP_DISTANCE = 6.0 |
|
|
|
|
|
|
|
|
|
|
|
def get_stopped_equivalence_factor(v_lead): |
|
|
|
def get_stopped_equivalence_factor(v_lead): |
|
|
|
return v_lead**2 / (2 * COMFORT_BRAKE) - T_REACT * v_lead |
|
|
|
return v_lead**2 / (2 * COMFORT_BRAKE) - (T_FOLLOW - T_REACT) * v_lead |
|
|
|
|
|
|
|
|
|
|
|
def get_safe_obstacle_distance(v_ego): |
|
|
|
def get_safe_obstacle_distance(v_ego): |
|
|
|
return (v_ego*v_ego) / (2 * COMFORT_BRAKE) + 6.0 |
|
|
|
return (v_ego*v_ego) / (2 * COMFORT_BRAKE) + T_REACT * v_ego + STOP_DISTANCE |
|
|
|
|
|
|
|
|
|
|
|
def desired_follow_distance(v_ego, v_lead): |
|
|
|
def desired_follow_distance(v_ego, v_lead): |
|
|
|
return get_safe_obstacle_distance(v_ego) - get_stopped_equivalence_factor(v_lead) |
|
|
|
return get_safe_obstacle_distance(v_ego) - get_stopped_equivalence_factor(v_lead) |
|
|
|