|
|
|
@ -85,8 +85,8 @@ class ParamsLearner: |
|
|
|
|
# We observe the current stiffness and steer ratio (with a high observation noise) to bound |
|
|
|
|
# the respective estimate STD. Otherwise the STDs keep increasing, causing rapid changes in the |
|
|
|
|
# states in longer routes (especially straight stretches). |
|
|
|
|
stiffness = float(self.kf.x[States.STIFFNESS]) |
|
|
|
|
steer_ratio = float(self.kf.x[States.STEER_RATIO]) |
|
|
|
|
stiffness = float(self.kf.x[States.STIFFNESS].item()) |
|
|
|
|
steer_ratio = float(self.kf.x[States.STEER_RATIO].item()) |
|
|
|
|
self.kf.predict_and_observe(t, ObservationKind.STIFFNESS, np.array([[stiffness]])) |
|
|
|
|
self.kf.predict_and_observe(t, ObservationKind.STEER_RATIO, np.array([[steer_ratio]])) |
|
|
|
|
|
|
|
|
@ -198,14 +198,14 @@ def main(sm=None, pm=None): |
|
|
|
|
learner = ParamsLearner(CP, CP.steerRatio, 1.0, 0.0) |
|
|
|
|
x = learner.kf.x |
|
|
|
|
|
|
|
|
|
angle_offset_average = clip(math.degrees(x[States.ANGLE_OFFSET]), |
|
|
|
|
angle_offset_average = clip(math.degrees(x[States.ANGLE_OFFSET].item()), |
|
|
|
|
angle_offset_average - MAX_ANGLE_OFFSET_DELTA, angle_offset_average + MAX_ANGLE_OFFSET_DELTA) |
|
|
|
|
angle_offset = clip(math.degrees(x[States.ANGLE_OFFSET] + x[States.ANGLE_OFFSET_FAST]), |
|
|
|
|
angle_offset = clip(math.degrees(x[States.ANGLE_OFFSET].item() + x[States.ANGLE_OFFSET_FAST].item()), |
|
|
|
|
angle_offset - MAX_ANGLE_OFFSET_DELTA, angle_offset + MAX_ANGLE_OFFSET_DELTA) |
|
|
|
|
roll = clip(float(x[States.ROAD_ROLL]), roll - ROLL_MAX_DELTA, roll + ROLL_MAX_DELTA) |
|
|
|
|
roll_std = float(P[States.ROAD_ROLL]) |
|
|
|
|
roll = clip(float(x[States.ROAD_ROLL].item()), roll - ROLL_MAX_DELTA, roll + ROLL_MAX_DELTA) |
|
|
|
|
roll_std = float(P[States.ROAD_ROLL].item()) |
|
|
|
|
# Account for the opposite signs of the yaw rates |
|
|
|
|
sensors_valid = bool(abs(learner.speed * (x[States.YAW_RATE] + learner.yaw_rate)) < LATERAL_ACC_SENSOR_THRESHOLD) |
|
|
|
|
sensors_valid = bool(abs(learner.speed * (x[States.YAW_RATE].item() + learner.yaw_rate)) < LATERAL_ACC_SENSOR_THRESHOLD) |
|
|
|
|
avg_offset_valid = check_valid_with_hysteresis(avg_offset_valid, angle_offset_average, OFFSET_MAX, OFFSET_LOWERED_MAX) |
|
|
|
|
total_offset_valid = check_valid_with_hysteresis(total_offset_valid, angle_offset, OFFSET_MAX, OFFSET_LOWERED_MAX) |
|
|
|
|
roll_valid = check_valid_with_hysteresis(roll_valid, roll, ROLL_MAX, ROLL_LOWERED_MAX) |
|
|
|
@ -215,8 +215,8 @@ def main(sm=None, pm=None): |
|
|
|
|
liveParameters = msg.liveParameters |
|
|
|
|
liveParameters.posenetValid = True |
|
|
|
|
liveParameters.sensorValid = sensors_valid |
|
|
|
|
liveParameters.steerRatio = float(x[States.STEER_RATIO]) |
|
|
|
|
liveParameters.stiffnessFactor = float(x[States.STIFFNESS]) |
|
|
|
|
liveParameters.steerRatio = float(x[States.STEER_RATIO].item()) |
|
|
|
|
liveParameters.stiffnessFactor = float(x[States.STIFFNESS].item()) |
|
|
|
|
liveParameters.roll = roll |
|
|
|
|
liveParameters.angleOffsetAverageDeg = angle_offset_average |
|
|
|
|
liveParameters.angleOffsetDeg = angle_offset |
|
|
|
@ -228,10 +228,10 @@ def main(sm=None, pm=None): |
|
|
|
|
0.2 <= liveParameters.stiffnessFactor <= 5.0, |
|
|
|
|
min_sr <= liveParameters.steerRatio <= max_sr, |
|
|
|
|
)) |
|
|
|
|
liveParameters.steerRatioStd = float(P[States.STEER_RATIO]) |
|
|
|
|
liveParameters.stiffnessFactorStd = float(P[States.STIFFNESS]) |
|
|
|
|
liveParameters.angleOffsetAverageStd = float(P[States.ANGLE_OFFSET]) |
|
|
|
|
liveParameters.angleOffsetFastStd = float(P[States.ANGLE_OFFSET_FAST]) |
|
|
|
|
liveParameters.steerRatioStd = float(P[States.STEER_RATIO].item()) |
|
|
|
|
liveParameters.stiffnessFactorStd = float(P[States.STIFFNESS].item()) |
|
|
|
|
liveParameters.angleOffsetAverageStd = float(P[States.ANGLE_OFFSET].item()) |
|
|
|
|
liveParameters.angleOffsetFastStd = float(P[States.ANGLE_OFFSET_FAST].item()) |
|
|
|
|
if DEBUG: |
|
|
|
|
liveParameters.filterState = log.LiveLocationKalman.Measurement.new_message() |
|
|
|
|
liveParameters.filterState.value = x.tolist() |
|
|
|
|