@ -4,7 +4,7 @@ from selfdrive.config import Conversions as CV
from selfdrive . boardd . boardd import can_list_to_can_capnp
from selfdrive . boardd . boardd import can_list_to_can_capnp
from selfdrive . car import apply_std_steer_torque_limits
from selfdrive . car import apply_std_steer_torque_limits
from selfdrive . car . gm import gmcan
from selfdrive . car . gm import gmcan
from selfdrive . car . gm . values import CAR , DBC , AccState
from selfdrive . car . gm . values import CAR , DBC
from selfdrive . can . packer import CANPacker
from selfdrive . can . packer import CANPacker
@ -29,11 +29,11 @@ class CarControllerParams():
self . ADAS_KEEPALIVE_STEP = 10
self . ADAS_KEEPALIVE_STEP = 10
# pedal lookups, only for Volt
# pedal lookups, only for Volt
MAX_GAS = 3072 # Only a safety limit
MAX_GAS = 3072 # Only a safety limit
self . ZERO_GAS = 2048
ZERO_GAS = 2048
MAX_BRAKE = 350 # Should be around 3.5m/s^2, including regen
MAX_BRAKE = 350 # Should be around 3.5m/s^2, including regen
self . MAX_ACC_REGEN = 1404 # ACC Regen braking is slightly less powerful than max regen paddle
self . MAX_ACC_REGEN = 1404 # ACC Regen braking is slightly less powerful than max regen paddle
self . GAS_LOOKUP_BP = [ - 0.25 , 0. , 0.5 ]
self . GAS_LOOKUP_BP = [ - 0.25 , 0. , 0.5 ]
self . GAS_LOOKUP_V = [ self . MAX_ACC_REGEN , self . ZERO_GAS , MAX_GAS ]
self . GAS_LOOKUP_V = [ self . MAX_ACC_REGEN , ZERO_GAS , MAX_GAS ]
self . BRAKE_LOOKUP_BP = [ - 1. , - 0.25 ]
self . BRAKE_LOOKUP_BP = [ - 1. , - 0.25 ]
self . BRAKE_LOOKUP_V = [ MAX_BRAKE , 0 ]
self . BRAKE_LOOKUP_V = [ MAX_BRAKE , 0 ]
@ -83,6 +83,7 @@ class CarController(object):
return
return
P = self . params
P = self . params
# Send CAN commands.
# Send CAN commands.
can_sends = [ ]
can_sends = [ ]
canbus = self . canbus
canbus = self . canbus
@ -130,18 +131,12 @@ class CarController(object):
if ( frame % 4 ) == 0 :
if ( frame % 4 ) == 0 :
idx = ( frame / 4 ) % 4
idx = ( frame / 4 ) % 4
car_stopping = apply_gas < P . ZERO_GAS
at_full_stop = enabled and CS . standstill
standstill = CS . pcm_acc_status == AccState . STANDSTILL
near_stop = enabled and ( CS . v_ego < P . NEAR_STOP_BRAKE_PHASE )
at_full_stop = enabled and standstill and car_stopping
near_stop = enabled and ( CS . v_ego < P . NEAR_STOP_BRAKE_PHASE ) and car_stopping
can_sends . append ( gmcan . create_friction_brake_command ( self . packer_ch , canbus . chassis , apply_brake , idx , near_stop , at_full_stop ) )
can_sends . append ( gmcan . create_friction_brake_command ( self . packer_ch , canbus . chassis , apply_brake , idx , near_stop , at_full_stop ) )
# Auto-resume from full stop by resetting ACC control
at_full_stop = enabled and CS . standstill
acc_enabled = enabled
can_sends . append ( gmcan . create_gas_regen_command ( self . packer_pt , canbus . powertrain , apply_gas , idx , enabled , at_full_stop ) )
if standstill and not car_stopping :
acc_enabled = False
can_sends . append ( gmcan . create_gas_regen_command ( self . packer_pt , canbus . powertrain , apply_gas , idx , acc_enabled , at_full_stop ) )
# Send dashboard UI commands (ACC status), 25hz
# Send dashboard UI commands (ACC status), 25hz
if ( frame % 4 ) == 0 :
if ( frame % 4 ) == 0 :