@ -50,9 +50,10 @@ class TorqueBuckets(PointBuckets):
class TorqueEstimator ( ParameterEstimator ) :
class TorqueEstimator ( ParameterEstimator ) :
def __init__ ( self , CP , decimated = False ) :
def __init__ ( self , CP , decimated = False , track_all_points = False ) :
self . hist_len = int ( HISTORY / DT_MDL )
self . hist_len = int ( HISTORY / DT_MDL )
self . lag = CP . steerActuatorDelay + .2 # from controlsd
self . lag = CP . steerActuatorDelay + .2 # from controlsd
self . track_all_points = track_all_points # for offline analysis, without max lateral accel or max steer torque filters
if decimated :
if decimated :
self . min_bucket_points = MIN_BUCKET_POINTS / 10
self . min_bucket_points = MIN_BUCKET_POINTS / 10
self . min_points_total = MIN_POINTS_TOTAL_QLOG
self . min_points_total = MIN_POINTS_TOTAL_QLOG
@ -135,6 +136,7 @@ class TorqueEstimator(ParameterEstimator):
min_points_total = self . min_points_total ,
min_points_total = self . min_points_total ,
points_per_bucket = POINTS_PER_BUCKET ,
points_per_bucket = POINTS_PER_BUCKET ,
rowsize = 3 )
rowsize = 3 )
self . all_torque_points = [ ]
def estimate_params ( self ) :
def estimate_params ( self ) :
points = self . filtered_points . get_points ( self . fit_points )
points = self . filtered_points . get_points ( self . fit_points )
@ -174,10 +176,14 @@ class TorqueEstimator(ParameterEstimator):
lat_active = np . interp ( np . arange ( t - MIN_ENGAGE_BUFFER , t , DT_MDL ) , self . raw_points [ ' carControl_t ' ] , self . raw_points [ ' lat_active ' ] ) . astype ( bool )
lat_active = np . interp ( np . arange ( t - MIN_ENGAGE_BUFFER , t , DT_MDL ) , self . raw_points [ ' carControl_t ' ] , self . raw_points [ ' lat_active ' ] ) . astype ( bool )
steer_override = np . interp ( np . arange ( t - MIN_ENGAGE_BUFFER , t , DT_MDL ) , self . raw_points [ ' carState_t ' ] , self . raw_points [ ' steer_override ' ] ) . astype ( bool )
steer_override = np . interp ( np . arange ( t - MIN_ENGAGE_BUFFER , t , DT_MDL ) , self . raw_points [ ' carState_t ' ] , self . raw_points [ ' steer_override ' ] ) . astype ( bool )
vego = np . interp ( t , self . raw_points [ ' carState_t ' ] , self . raw_points [ ' vego ' ] )
vego = np . interp ( t , self . raw_points [ ' carState_t ' ] , self . raw_points [ ' vego ' ] )
steer = np . interp ( t , self . raw_points [ ' carOutput_t ' ] , self . raw_points [ ' steer_torque ' ] )
steer = np . interp ( t , self . raw_points [ ' carOutput_t ' ] , self . raw_points [ ' steer_torque ' ] ) . item ( )
lateral_acc = ( vego * yaw_rate ) - ( np . sin ( roll ) * ACCELERATION_DUE_TO_GRAVITY )
lateral_acc = ( vego * yaw_rate ) - ( np . sin ( roll ) * ACCELERATION_DUE_TO_GRAVITY ) . item ( )
if all ( lat_active ) and not any ( steer_override ) and ( vego > MIN_VEL ) and ( abs ( steer ) > STEER_MIN_THRESHOLD ) and ( abs ( lateral_acc ) < = LAT_ACC_THRESHOLD ) :
if all ( lat_active ) and not any ( steer_override ) and ( vego > MIN_VEL ) and ( abs ( steer ) > STEER_MIN_THRESHOLD ) :
self . filtered_points . add_point ( float ( steer ) , float ( lateral_acc ) )
if abs ( lateral_acc ) < = LAT_ACC_THRESHOLD :
self . filtered_points . add_point ( steer , lateral_acc )
if self . track_all_points :
self . all_torque_points . append ( [ steer , lateral_acc ] )
def get_msg ( self , valid = True , with_points = False ) :
def get_msg ( self , valid = True , with_points = False ) :
msg = messaging . new_message ( ' liveTorqueParameters ' )
msg = messaging . new_message ( ' liveTorqueParameters ' )