Skip to content

Commit

Permalink
ZSS support
Browse files Browse the repository at this point in the history
Add ZSS support for Toyota Priuses with a Zorro Steering Sensor.

Credit goes to DragonPilot!

https: //github.com/dragonpilot-community/dragonpilot
Co-Authored-By: eFini <16603033+efinilan@users.noreply.github.com>
Co-Authored-By: Kumar <36933347+rav4kumar@users.noreply.github.com>
  • Loading branch information
3 people committed Jan 30, 2024
1 parent 55de3b3 commit 75a0e40
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
33 changes: 33 additions & 0 deletions selfdrive/car/toyota/carstate.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
# - prolonged high driver torque: 17 (permanent)
PERM_STEER_FAULTS = (3, 17)

ZSS_THRESHOLD = 4.0
ZSS_THRESHOLD_COUNT = 10

class CarState(CarStateBase):
def __init__(self, CP):
Expand All @@ -48,6 +50,11 @@ def __init__(self, CP):
self.lkas_hud = {}

# FrogPilot variables
self.zss_compute = False
self.zss_cruise_active_last = False

self.zss_angle_offset = 0
self.zss_threshold_count = 0

self.traffic_signals = {}

Expand Down Expand Up @@ -212,6 +219,30 @@ def update(self, cp, cp_cam, conditional_experimental_mode, frogpilot_variables)
SpeedLimitController.car_speed_limit = self.calculate_speed_limit()
SpeedLimitController.write_car_state()

# ZSS Support - Credit goes to the DragonPilot team!
if self.CP.flags & ToyotaFlags.ZSS and self.zss_threshold_count < ZSS_THRESHOLD_COUNT:
zorro_steer = cp.vl["SECONDARY_STEER_ANGLE"]["ZORRO_STEER"]
# Only compute ZSS offset when acc is active
zss_cruise_active = ret.cruiseState.available
if zss_cruise_active and not self.zss_cruise_active_last:
self.zss_compute = True # Cruise was just activated, so allow offset to be recomputed
self.zss_threshold_count = 0
self.zss_cruise_active_last = zss_cruise_active

# Compute ZSS offset
if self.zss_compute:
if abs(ret.steeringAngleDeg) > 1e-3 and abs(zorro_steer) > 1e-3:
self.zss_compute = False
self.zss_angle_offset = zorro_steer - ret.steeringAngleDeg

# Error check
new_steering_angle_deg = zorro_steer - self.zss_angle_offset
if abs(ret.steeringAngleDeg - new_steering_angle_deg) > ZSS_THRESHOLD:
self.zss_threshold_count += 1
else:
# Apply offset
ret.steeringAngleDeg = new_steering_angle_deg

return ret

def update_traffic_signals(self, cp_cam):
Expand Down Expand Up @@ -280,6 +311,8 @@ def get_can_parser(CP):
if CP.flags & ToyotaFlags.SMART_DSU:
messages.append(("SDSU", 33))

messages += [("SECONDARY_STEER_ANGLE", 0)]

return CANParser(DBC[CP.carFingerprint]["pt"], messages, 0)

@staticmethod
Expand Down
3 changes: 3 additions & 0 deletions selfdrive/car/toyota/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ def _get_params(ret, candidate, fingerprint, car_fw, experimental_long, docs):
ret.steerActuatorDelay = 0.12 # Default delay, Prius has larger delay
ret.steerLimitTimer = 0.4

if 0x23 in fingerprint[0]: # Detect if ZSS is present
ret.flags |= ToyotaFlags.ZSS.value

ret.stoppingControl = False # Toyota starts braking more when it thinks you want to stop

stop_and_go = candidate in TSS2_CAR
Expand Down
1 change: 1 addition & 0 deletions selfdrive/car/toyota/values.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ class ToyotaFlags(IntFlag):
HYBRID = 1
SMART_DSU = 2
DISABLE_RADAR = 4
ZSS = 8


class CAR(StrEnum):
Expand Down

0 comments on commit 75a0e40

Please sign in to comment.