Skip to content

Commit

Permalink
reverted accelerated_angle_rate for pid updates
Browse files Browse the repository at this point in the history
  • Loading branch information
Gernby committed Dec 30, 2018
1 parent f6c2d0e commit 989e888
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 18 deletions.
6 changes: 3 additions & 3 deletions opendbc/honda_accord_s2t_2018_can_generated.dbc
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ BU_: EBCM EON CAM RADAR PCM EPS VSA SCM BDY XXX EPB

BO_ 228 STEERING_CONTROL: 5 EON
SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
SG_ GERNBY1 : 22|7@0+ (1,0) [0|127] "" EPS
SG_ GERNBY_2 : 31|8@0+ (1,0) [0|0] "" EPS
SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS
SG_ STEER_TORQUE : 7|16@0- (1,0) [-4096|4096] "" EPS
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
Expand All @@ -62,7 +62,7 @@ BO_ 304 GAS_PEDAL_2: 8 PCM
BO_ 330 STEERING_SENSORS: 8 EPS
SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" EON
SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-127|127] "deg" EON
SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" EON
SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
Expand Down
8 changes: 4 additions & 4 deletions selfdrive/car/honda/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ def get_params(candidate, fingerprint):
tire_stiffness_factor = 1.
# Civic at comma has modified steering FW, so different tuning for the Neo in that car
is_fw_modified = os.getenv("DONGLE_ID") in ['99c94dc769b5d96e']
ret.steerKpV, ret.steerKiV = [[0.33], [0.10]] if is_fw_modified else [[0.5], [0.24]]
ret.steerKpV, ret.steerKiV = [[0.33], [0.10]] if is_fw_modified else [[0.6], [0.18]]
if is_fw_modified:
ret.steerKf = 0.00003
ret.longitudinalKpBP = [0., 5., 35.]
Expand All @@ -211,7 +211,7 @@ def get_params(candidate, fingerprint):
ret.centerToFront = centerToFront_civic
ret.steerRatio = 14.63 # 10.93 is spec end-to-end
tire_stiffness_factor = 1.
ret.steerKpV, ret.steerKiV = [[0.5], [0.24]]
ret.steerKpV, ret.steerKiV = [[0.6], [0.18]]
ret.longitudinalKpBP = [0., 5., 35.]
ret.longitudinalKpV = [1.2, 0.8, 0.5]
ret.longitudinalKiBP = [0., 35.]
Expand Down Expand Up @@ -241,7 +241,7 @@ def get_params(candidate, fingerprint):
tire_stiffness_factor = 0.72
# Acura at comma has modified steering FW, so different tuning for the Neo in that car
is_fw_modified = os.getenv("DONGLE_ID") in ['ff83f397542ab647']
ret.steerKpV, ret.steerKiV = [[0.45], [0.00]] if is_fw_modified else [[0.5], [0.24]]
ret.steerKpV, ret.steerKiV = [[0.45], [0.00]] if is_fw_modified else [[0.6], [0.18]]
if is_fw_modified:
ret.steerKf = 0.00003
ret.longitudinalKpBP = [0., 5., 35.]
Expand All @@ -256,7 +256,7 @@ def get_params(candidate, fingerprint):
ret.centerToFront = ret.wheelbase * 0.41
ret.steerRatio = 15.3 # as spec
tire_stiffness_factor = 0.444 # not optimized yet
ret.steerKpV, ret.steerKiV = [[0.5], [0.24]]
ret.steerKpV, ret.steerKiV = [[0.6], [0.18]]
ret.longitudinalKpBP = [0., 5., 35.]
ret.longitudinalKpV = [1.2, 0.8, 0.5]
ret.longitudinalKiBP = [0., 35.]
Expand Down
23 changes: 13 additions & 10 deletions selfdrive/controls/lib/latcontrol.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ def __init__(self, CP):
self.last_cloudlog_t = 0.0
self.setup_mpc(CP.steerRateCost)
self.smooth_factor = 2.0 * CP.steerActuatorDelay / _DT # Multiplier for inductive component (feed forward)
self.projection_factor = CP.steerActuatorDelay / 2.0 # Mutiplier for reactive component (PI)
self.accel_limit = 5.0 # Desired acceleration limit to prevent "whip steer" (resistive component)
self.projection_factor = 0.5 * CP.steerActuatorDelay # Mutiplier for reactive component (PI)
self.accel_limit = 2.0 # Desired acceleration limit to prevent "whip steer" (resistive component)
self.ff_angle_factor = 0.5 # Kf multiplier for angle-based feed forward
self.ff_rate_factor = 5.0 # Kf multiplier for rate-based feed forward
self.prev_angle_rate = 0
Expand Down Expand Up @@ -92,19 +92,19 @@ def reset(self):
def update(self, active, v_ego, angle_steers, angle_rate, steer_override, d_poly, angle_offset, CP, VM, PL):
self.mpc_updated = False

# Use steering rate from the last 2 samples to estimate acceleration for a more realistic future steering rate
accelerated_angle_rate = 2.0 * angle_rate - self.prev_angle_rate

# Determine future angle steers using accelerated steer rate
self.projected_angle_steers = float(angle_steers) + self.projection_factor * float(accelerated_angle_rate)

# TODO: this creates issues in replay when rewinding time: mpc won't run
if self.last_mpc_ts < PL.last_md_ts:
cur_time = sec_since_boot()
self.last_mpc_ts = PL.last_md_ts

self.curvature_factor = VM.curvature_factor(v_ego)

# Use steering rate from the last 2 samples to estimate acceleration for a more realistic future steering rate
accelerated_angle_rate = 2.0 * angle_rate - self.prev_angle_rate

# Determine future angle steers using accelerated steer rate
self.projected_angle_steers = float(angle_steers) + self.projection_factor * float(accelerated_angle_rate)

# Determine a proper delay time that includes the model's processing time, which is variable
plan_age = cur_time - float(self.last_mpc_ts / 1000000000.0)
total_delay = CP.steerActuatorDelay + plan_age
Expand Down Expand Up @@ -166,11 +166,14 @@ def update(self, active, v_ego, angle_steers, angle_rate, steer_override, d_poly

# Determine the target steer rate for desired angle, but prevent the acceleration limit from being exceeded
# Restricting the steer rate creates the resistive component needed for resonance
restricted_steer_rate = np.clip(self.angle_steers_des - float(angle_steers) , float(accelerated_angle_rate) - self.accel_limit, float(accelerated_angle_rate) + self.accel_limit)
restricted_steer_rate = np.clip(self.angle_steers_des - float(angle_steers) , float(angle_rate) - self.accel_limit, float(angle_rate) + self.accel_limit)

# Determine projected desired angle that is within the acceleration limit (prevent the steering wheel from jerking)
projected_angle_steers_des = self.angle_steers_des + self.projection_factor * restricted_steer_rate

# Determine future angle steers using steer rate
self.projected_angle_steers = float(angle_steers) + self.projection_factor * float(angle_rate)

steers_max = get_steer_max(CP, v_ego)
self.pid.pos_limit = steers_max
self.pid.neg_limit = -steers_max
Expand All @@ -179,7 +182,7 @@ def update(self, active, v_ego, angle_steers, angle_rate, steer_override, d_poly
# Decide which feed forward mode should be used (angle or rate). Use more dominant mode, and only if conditions are met
# Spread feed forward out over a period of time to make it more inductive (for resonance)
if abs(self.ff_rate_factor * float(restricted_steer_rate)) > abs(self.ff_angle_factor * float(self.angle_steers_des) - float(angle_offset)) - 0.5 \
and (abs(float(restricted_steer_rate)) > abs(accelerated_angle_rate) or (float(restricted_steer_rate) < 0) != (accelerated_angle_rate < 0)) \
and (abs(float(restricted_steer_rate)) > abs(angle_rate) or (float(restricted_steer_rate) < 0) != (angle_rate < 0)) \
and (float(restricted_steer_rate) < 0) == (float(self.angle_steers_des) - float(angle_offset) - 0.5 < 0):
ff_type = "r"
self.feed_forward = (((self.smooth_factor - 1.) * self.feed_forward) + self.ff_rate_factor * v_ego**2 * float(restricted_steer_rate)) / self.smooth_factor
Expand Down
2 changes: 1 addition & 1 deletion selfdrive/controls/lib/pathplanner.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def update(self, v_ego, md, LaC=None):
else:
angle_error = 0.0
if angle_error != 0.0:
lateral_error = 1.0 * np.clip(v_ego * (LaC.steerActuatorDelay + 0.05) * math.tan(math.radians(angle_error)), -0.2, 0.2)
lateral_error = 0.5 * np.clip(v_ego * (LaC.steerActuatorDelay + 0.05) * math.tan(math.radians(angle_error)), -0.2, 0.2)
lateral_error = LaC.lateral_error
else:
lateral_error = 0.0
Expand Down
Binary file modified selfdrive/visiond/visiond
Binary file not shown.

0 comments on commit 989e888

Please sign in to comment.