|
|
|
@ -38,8 +38,9 @@ class ParamsLearner: |
|
|
|
|
yaw_rate = msg.angularVelocityCalibrated.value[2] |
|
|
|
|
yaw_rate_std = msg.angularVelocityCalibrated.std[2] |
|
|
|
|
yaw_rate_valid = msg.angularVelocityCalibrated.valid |
|
|
|
|
yaw_rate_valid = yaw_rate_valid and (not math.isnan(yaw_rate)) |
|
|
|
|
yaw_rate_valid = yaw_rate_valid and (not math.isnan(yaw_rate_std)) |
|
|
|
|
yaw_rate_valid = yaw_rate_valid and math.isfinite(yaw_rate) |
|
|
|
|
yaw_rate_valid = yaw_rate_valid and math.isfinite(yaw_rate_std) |
|
|
|
|
yaw_rate_valid = yaw_rate_valid and yaw_rate_std < 1e6 |
|
|
|
|
|
|
|
|
|
if self.active: |
|
|
|
|
if msg.inputsOK and msg.posenetOK and yaw_rate_valid: |
|
|
|
@ -92,16 +93,18 @@ def main(sm=None, pm=None): |
|
|
|
|
cloudlog.info("Parameter learner found parameters for wrong car.") |
|
|
|
|
params = None |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
angle_offset_sane = abs(params.get('angleOffsetAverageDeg')) < 10.0 |
|
|
|
|
steer_ratio_sane = min_sr <= params['steerRatio'] <= max_sr |
|
|
|
|
params_sane = angle_offset_sane and steer_ratio_sane |
|
|
|
|
if params is not None and not params_sane: |
|
|
|
|
cloudlog.info(f"Invalid starting values found {params}") |
|
|
|
|
# Check if starting values are sane |
|
|
|
|
if params is not None: |
|
|
|
|
try: |
|
|
|
|
angle_offset_sane = abs(params.get('angleOffsetAverageDeg')) < 10.0 |
|
|
|
|
steer_ratio_sane = min_sr <= params['steerRatio'] <= max_sr |
|
|
|
|
params_sane = angle_offset_sane and steer_ratio_sane |
|
|
|
|
if not params_sane: |
|
|
|
|
cloudlog.info(f"Invalid starting values found {params}") |
|
|
|
|
params = None |
|
|
|
|
except Exception as e: |
|
|
|
|
cloudlog.info(f"Error reading params {params}: {str(e)}") |
|
|
|
|
params = None |
|
|
|
|
except Exception as e: |
|
|
|
|
cloudlog.info(f"Error reading params {params}: {str(e)}") |
|
|
|
|
params = None |
|
|
|
|
|
|
|
|
|
# TODO: cache the params with the capnp struct |
|
|
|
|
if params is None: |
|
|
|
@ -129,10 +132,10 @@ def main(sm=None, pm=None): |
|
|
|
|
|
|
|
|
|
if sm.updated['liveLocationKalman']: |
|
|
|
|
x = learner.kf.x |
|
|
|
|
if any(map(math.isnan, x)): |
|
|
|
|
if not all(map(math.isfinite, x)): |
|
|
|
|
cloudlog.error("NaN in liveParameters estimate. Resetting to default values") |
|
|
|
|
learner = ParamsLearner(CP, CP.steerRatio, 1.0, 0.0) |
|
|
|
|
continue |
|
|
|
|
x = learner.kf.x |
|
|
|
|
|
|
|
|
|
msg = messaging.new_message('liveParameters') |
|
|
|
|
msg.logMonoTime = sm.logMonoTime['carState'] |
|
|
|
|