import os
import time
from cereal import car
from common . kalman . simple_kalman import KF1D
from common . realtime import DT_CTRL
from selfdrive . car import gen_empty_fingerprint
GearShifter = car . CarState . GearShifter
# generic car and radar interfaces
class CarInterfaceBase ( ) :
def __init__ ( self , CP , CarController ) :
pass
@staticmethod
def calc_accel_override ( a_ego , a_target , v_ego , v_target ) :
return 1.
@staticmethod
def compute_gb ( accel , speed ) :
raise NotImplementedError
@staticmethod
def get_params ( candidate , fingerprint = gen_empty_fingerprint ( ) , has_relay = False , car_fw = [ ] ) :
raise NotImplementedError
# returns a car.CarState, pass in car.CarControl
def update ( self , c , can_strings ) :
raise NotImplementedError
# return sendcan, pass in a car.CarControl
def apply ( self , c ) :
raise NotImplementedError
class RadarInterfaceBase ( ) :
def __init__ ( self , CP ) :
self . pts = { }
self . delay = 0
self . radar_ts = CP . radarTimeStep
def update ( self , can_strings ) :
ret = car . RadarData . new_message ( )
if ' NO_RADAR_SLEEP ' not in os . environ :
time . sleep ( self . radar_ts ) # radard runs on RI updates
return ret
class CarStateBase :
def __init__ ( self , CP ) :
self . CP = CP
self . car_fingerprint = CP . carFingerprint
self . cruise_buttons = 0
# Q = np.matrix([[10.0, 0.0], [0.0, 100.0]])
# R = 1e3
self . v_ego_kf = KF1D ( x0 = [ [ 0.0 ] , [ 0.0 ] ] ,
A = [ [ 1.0 , DT_CTRL ] , [ 0.0 , 1.0 ] ] ,
C = [ 1.0 , 0.0 ] ,
K = [ [ 0.12287673 ] , [ 0.29666309 ] ] )
def update_speed_kf ( self , v_ego_raw ) :
if abs ( v_ego_raw - self . v_ego_kf . x [ 0 ] [ 0 ] ) > 2.0 : # Prevent large accelerations when car starts at non zero speed
self . v_ego_kf . x = [ [ v_ego_raw ] , [ 0.0 ] ]
v_ego_x = self . v_ego_kf . update ( v_ego_raw )
return float ( v_ego_x [ 0 ] ) , float ( v_ego_x [ 1 ] )
@staticmethod
def parse_gear_shifter ( gear ) :
return { ' P ' : GearShifter . park , ' R ' : GearShifter . reverse , ' N ' : GearShifter . neutral ,
' E ' : GearShifter . eco , ' T ' : GearShifter . manumatic , ' D ' : GearShifter . drive ,
' S ' : GearShifter . sport , ' L ' : GearShifter . low , ' B ' : GearShifter . brake } . get ( gear , GearShifter . unknown )