@ -5,8 +5,7 @@ from selfdrive.controls.lib.pid import PIController
LongCtrlState = log . ControlsState . LongControlState
LongCtrlState = log . ControlsState . LongControlState
STOPPING_EGO_SPEED = 0.5
STOPPING_EGO_SPEED = 0.5
MIN_CAN_SPEED = 0.3 # TODO: parametrize this in car interface
STOPPING_TARGET_SPEED_OFFSET = 0.01
STOPPING_TARGET_SPEED = MIN_CAN_SPEED + 0.01
STARTING_TARGET_SPEED = 0.5
STARTING_TARGET_SPEED = 0.5
BRAKE_THRESHOLD_TO_PID = 0.2
BRAKE_THRESHOLD_TO_PID = 0.2
@ -18,11 +17,12 @@ RATE = 100.0
def long_control_state_trans ( active , long_control_state , v_ego , v_target , v_pid ,
def long_control_state_trans ( active , long_control_state , v_ego , v_target , v_pid ,
output_gb , brake_pressed , cruise_standstill ) :
output_gb , brake_pressed , cruise_standstill , min_speed_can ) :
""" Update longitudinal control state machine """
""" Update longitudinal control state machine """
stopping_target_speed = min_speed_can + STOPPING_TARGET_SPEED_OFFSET
stopping_condition = ( v_ego < 2.0 and cruise_standstill ) or \
stopping_condition = ( v_ego < 2.0 and cruise_standstill ) or \
( v_ego < STOPPING_EGO_SPEED and
( v_ego < STOPPING_EGO_SPEED and
( ( v_pid < STOPPING_TARGET_SPEED and v_target < STOPPING_TARGET_SPEED ) or
( ( v_pid < stopping_target_speed and v_target < stopping_target_speed ) or
brake_pressed ) )
brake_pressed ) )
starting_condition = v_target > STARTING_TARGET_SPEED and not cruise_standstill
starting_condition = v_target > STARTING_TARGET_SPEED and not cruise_standstill
@ -78,9 +78,9 @@ class LongControl():
output_gb = self . last_output_gb
output_gb = self . last_output_gb
self . long_control_state = long_control_state_trans ( active , self . long_control_state , CS . vEgo ,
self . long_control_state = long_control_state_trans ( active , self . long_control_state , CS . vEgo ,
v_target_future , self . v_pid , output_gb ,
v_target_future , self . v_pid , output_gb ,
CS . brakePressed , CS . cruiseState . standstill )
CS . brakePressed , CS . cruiseState . standstill , CP . minSpeedCan )
v_ego_pid = max ( CS . vEgo , MIN_CAN_SPEED ) # Without this we get jumps, CAN bus reports 0 when speed < 0.3
v_ego_pid = max ( CS . vEgo , CP . minSpeedCan ) # Without this we get jumps, CAN bus reports 0 when speed < 0.3
if self . long_control_state == LongCtrlState . off or CS . gasPressed :
if self . long_control_state == LongCtrlState . off or CS . gasPressed :
self . reset ( v_ego_pid )
self . reset ( v_ego_pid )