@ -5,7 +5,7 @@ from opendbc.can.can_define import CANDefine
from opendbc . can . parser import CANParser
from selfdrive . config import Conversions as CV
from selfdrive . car . interfaces import CarStateBase
from selfdrive . car . honda . values import CAR , DBC , STEER_THRESHOLD , SPEED_FACTOR , HONDA_BOSCH
from selfdrive . car . honda . values import CAR , DBC , STEER_THRESHOLD , SPEED_FACTOR , HONDA_BOSCH , HONDA_BOSCH_ALT_BRAKE_SIGNAL
def calc_cruise_offset ( offset , speed ) :
# euristic formula so that speed is controlled to ~ 0.3m/s below pid_speed
@ -81,12 +81,11 @@ def get_can_signals(CP):
( " GEARBOX " , 100 ) ,
]
if CP . carFingerprint in HONDA_BOSCH :
# Civic is only bosch to use the same brake message as other hondas.
if CP . carFingerprint not in ( CAR . ACCORDH , CAR . CIVIC_BOSCH , CAR . CIVIC_BOSCH_DIESEL , CAR . CRV_HYBRID , CAR . INSIGHT ) :
signals + = [ ( " BRAKE_PRESSED " , " BRAKE_MODULE " , 0 ) ]
checks + = [ ( " BRAKE_MODULE " , 50 ) ]
if CP . carFingerprint in HONDA_BOSCH_ALT_BRAKE_SIGNAL :
signals + = [ ( " BRAKE_PRESSED " , " BRAKE_MODULE " , 0 ) ]
checks + = [ ( " BRAKE_MODULE " , 50 ) ]
if CP . carFingerprint in HONDA_BOSCH :
signals + = [
( " CAR_GAS " , " GAS_PEDAL_2 " , 0 ) ,
( " MAIN_ON " , " SCM_FEEDBACK " , 0 ) ,
@ -118,6 +117,7 @@ def get_can_signals(CP):
checks + = [ ( " CRUISE_PARAMS " , 10 ) ]
else :
checks + = [ ( " CRUISE_PARAMS " , 50 ) ]
if CP . carFingerprint in ( CAR . ACCORD , CAR . ACCORD_15 , CAR . ACCORDH , CAR . CIVIC_BOSCH , CAR . CIVIC_BOSCH_DIESEL , CAR . CRV_HYBRID , CAR . INSIGHT , CAR . ACURA_RDX_3G ) :
signals + = [ ( " DRIVERS_DOOR_OPEN " , " SCM_FEEDBACK " , 1 ) ]
elif CP . carFingerprint == CAR . ODYSSEY_CHN :
@ -201,7 +201,7 @@ class CarState(CarStateBase):
self . user_gas , self . user_gas_pressed = 0. , 0
self . brake_switch_prev = 0
self . brake_switch_ts = 0
self . brake_switch_prev_ ts = 0
self . cruise_setting = 0
self . v_cruise_pcm_prev = 0
self . cruise_mode = 0
@ -302,33 +302,29 @@ class CarState(CarStateBase):
ret . steeringTorqueEps = cp . vl [ " STEER_MOTOR_TORQUE " ] [ ' MOTOR_TORQUE ' ]
ret . steeringPressed = abs ( ret . steeringTorque ) > STEER_THRESHOLD [ self . CP . carFingerprint ]
self . brake_switch = cp . vl [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ] != 0
if self . CP . carFingerprint in HONDA_BOSCH :
self . cruise_mode = cp . vl [ " ACC_HUD " ] [ ' CRUISE_CONTROL_LABEL ' ]
ret . cruiseState . standstill = cp . vl [ " ACC_HUD " ] [ ' CRUISE_SPEED ' ] == 252.
ret . cruiseState . speedOffset = calc_cruise_offset ( 0 , ret . vEgo )
if self . CP . carFingerprint in ( CAR . CIVIC_BOSCH , CAR . CIVIC_BOSCH_DIESEL , CAR . ACCORDH , CAR . CRV_HYBRID , CAR . INSIGHT ) :
ret . brakePressed = bool ( cp . vl [ " POWERTRAIN_DATA " ] [ ' BRAKE_PRESSED ' ] or
( self . brake_switch and self . brake_switch_prev and
cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ] != self . brake_switch_ts ) )
self . brake_switch_prev = self . brake_switch
self . brake_switch_ts = cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ]
else :
ret . brakePressed = cp . vl [ " BRAKE_MODULE " ] [ ' BRAKE_PRESSED ' ] != 0
# On set, cruise set speed pulses between 254~255 and the set speed prev is set to avoid this.
ret . cruiseState . speed = self . v_cruise_pcm_prev if cp . vl [ " ACC_HUD " ] [ ' CRUISE_SPEED ' ] > 160.0 else cp . vl [ " ACC_HUD " ] [ ' CRUISE_SPEED ' ] * CV . KPH_TO_MS
self . v_cruise_pcm_prev = ret . cruiseState . speed
else :
ret . cruiseState . speedOffset = calc_cruise_offset ( cp . vl [ " CRUISE_PARAMS " ] [ ' CRUISE_SPEED_OFFSET ' ] , ret . vEgo )
ret . cruiseState . speed = cp . vl [ " CRUISE " ] [ ' CRUISE_SPEED_PCM ' ] * CV . KPH_TO_MS
self . brake_switch = cp . vl [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ] != 0
if self . CP . carFingerprint in HONDA_BOSCH_ALT_BRAKE_SIGNAL :
ret . brakePressed = cp . vl [ " BRAKE_MODULE " ] [ ' BRAKE_PRESSED ' ] != 0
else :
# brake switch has shown some single time step noise, so only considered when
# switch is on for at least 2 consecutive CAN samples
# panda safety only checks BRAKE_PRESSED signal
ret . brakePressed = bool ( cp . vl [ " POWERTRAIN_DATA " ] [ ' BRAKE_PRESSED ' ] or
( self . brake_switch and self . brake_switch_prev and
cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ] != self . brake_switch_ts ) )
( self . brake_switch and self . brake_switch_prev and cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ] != self . brake_switch_prev_ts ) )
self . brake_switch_prev = self . brake_switch
self . brake_switch_ts = cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ]
self . brake_switch_prev_ ts = cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ]
ret . brake = cp . vl [ " VSA_STATUS " ] [ ' USER_BRAKE ' ]
ret . cruiseState . enabled = cp . vl [ " POWERTRAIN_DATA " ] [ ' ACC_STATUS ' ] != 0