teslurrrr

This commit is contained in:
firestar5683
2026-05-07 23:11:06 -05:00
parent e0259e191c
commit ffd8f6404b
14 changed files with 210 additions and 12 deletions
+16
View File
@@ -173,6 +173,22 @@ class CarSpecificEvents:
# if CC.eps_timer_soft_disable_alert: # type: ignore[attr-defined]
# events.add(EventName.steerTimeLimit)
elif self.CP.brand == 'tesla':
events = self.create_common_events(CS, CS_prev, extra_gears=extra_gears)
if self.CP.carFingerprint == "TESLA_MODEL_S_PREAP":
if self.CP.pcmCruise:
if getattr(CS, 'teslaCCEngaged', False):
events.add(EventName.teslaCCEngaged)
if getattr(CS, 'teslaCCDisengaged', False):
events.add(EventName.teslaCCDisengaged)
if getattr(CS, 'teslaCCNotArmed', False):
events.add(EventName.teslaCCNotArmed)
else:
from opendbc.car.tesla.preap.nap_conf import nap_conf
if not nap_conf.pedal_calibrated:
events.add(EventName.pedalNotCalibrated)
elif self.CP.brand == 'hyundai':
events = self.create_common_events(CS, CS_prev, extra_gears=extra_gears, pcm_enable=self.CP.pcmCruise, allow_button_cancel=False)
@@ -0,0 +1,57 @@
from unittest.mock import PropertyMock, patch # noqa: TID251
from cereal import car, log
from openpilot.selfdrive.car.car_specific import CarSpecificEvents
EventName = log.OnroadEvent.EventName
NAP_CONF_PATH = "opendbc.car.tesla.preap.nap_conf.NAPConf.pedal_calibrated"
def _make_cp(*, fingerprint="TESLA_MODEL_S_PREAP", brand="tesla", pcm_cruise=False, op_long=True):
cp = car.CarParams.new_message()
cp.carFingerprint = fingerprint
cp.brand = brand
cp.pcmCruise = pcm_cruise
cp.openpilotLongitudinalControl = op_long
return cp
def _make_cs():
cs = car.CarState.new_message()
cs.cruiseState.available = True
cs.gearShifter = "drive"
return cs
def _run(cp, calibrated):
with patch(NAP_CONF_PATH, new_callable=PropertyMock, return_value=calibrated):
ce = CarSpecificEvents(cp)
events = ce.update(_make_cs(), _make_cs(), car.CarControl.new_message())
return events.names
def test_fires_in_preap_pedal_mode_when_uncalibrated():
cp = _make_cp(pcm_cruise=False, op_long=True)
assert EventName.pedalNotCalibrated in _run(cp, calibrated=False)
def test_silent_in_preap_pedal_mode_when_calibrated():
cp = _make_cp(pcm_cruise=False, op_long=True)
assert EventName.pedalNotCalibrated not in _run(cp, calibrated=True)
def test_silent_in_preap_nopedal_mode_even_when_uncalibrated():
cp = _make_cp(pcm_cruise=True, op_long=False)
assert EventName.pedalNotCalibrated not in _run(cp, calibrated=False)
def test_silent_on_non_preap_tesla():
cp = _make_cp(fingerprint="TESLA_MODEL_S", pcm_cruise=False, op_long=True)
assert EventName.pedalNotCalibrated not in _run(cp, calibrated=False)
def test_silent_on_non_tesla_brand():
cp = _make_cp(fingerprint="HONDA_CIVIC_2022", brand="honda", pcm_cruise=True, op_long=False)
assert EventName.pedalNotCalibrated not in _run(cp, calibrated=False)
+8 -8
View File
@@ -49,9 +49,9 @@ MIN_LATERAL_CONTROL_SPEED = 0.3
CIVIC_BOSCH_MODIFIED_B_FIXED_FRICTION_THRESHOLD = 0.30
CIVIC_BOSCH_MODIFIED_B_LAT_ACCEL_FACTOR_MULT = 1.20
CIVIC_BOSCH_MODIFIED_A_VARIANT_LAT_ACCEL_FACTOR_MULT = 1.00
CIVIC_BOSCH_MODIFIED_B_VARIANT_LAT_ACCEL_FACTOR_MULT = 1.26
CIVIC_BOSCH_MODIFIED_B_VARIANT_LAT_ACCEL_FACTOR_MULT = 1.32
CIVIC_BOSCH_MODIFIED_B_TRANSITION_SPEED = 12.0
CIVIC_BOSCH_MODIFIED_B_PHASE_SCALE = 0.10
CIVIC_BOSCH_MODIFIED_B_PHASE_SCALE = 0.08
CIVIC_BOSCH_MODIFIED_B_FF_ONSET = 0.18
CIVIC_BOSCH_MODIFIED_B_FF_ONSET_WIDTH = 0.07
CIVIC_BOSCH_MODIFIED_B_FF_CUTOFF = 1.00
@@ -76,16 +76,16 @@ CIVIC_BOSCH_MODIFIED_A_VARIANT_TURN_IN_FRICTION_BOOST_LEFT = 0.00
CIVIC_BOSCH_MODIFIED_A_VARIANT_TURN_IN_FRICTION_BOOST_RIGHT = 0.00
CIVIC_BOSCH_MODIFIED_A_VARIANT_UNWIND_FRICTION_REDUCTION_LEFT = 0.03
CIVIC_BOSCH_MODIFIED_A_VARIANT_UNWIND_FRICTION_REDUCTION_RIGHT = 0.07
CIVIC_BOSCH_MODIFIED_B_VARIANT_FF_REDUCTION_LEFT = 0.24
CIVIC_BOSCH_MODIFIED_B_VARIANT_FF_REDUCTION_RIGHT = 0.34
CIVIC_BOSCH_MODIFIED_B_VARIANT_FF_REDUCTION_LEFT = 0.26
CIVIC_BOSCH_MODIFIED_B_VARIANT_FF_REDUCTION_RIGHT = 0.38
CIVIC_BOSCH_MODIFIED_B_VARIANT_TURN_IN_BOOST_LEFT = 0.06
CIVIC_BOSCH_MODIFIED_B_VARIANT_TURN_IN_BOOST_RIGHT = 0.06
CIVIC_BOSCH_MODIFIED_B_VARIANT_UNWIND_TAPER_LEFT = 1.18
CIVIC_BOSCH_MODIFIED_B_VARIANT_UNWIND_TAPER_RIGHT = 1.48
CIVIC_BOSCH_MODIFIED_B_VARIANT_UNWIND_TAPER_LEFT = 1.55
CIVIC_BOSCH_MODIFIED_B_VARIANT_UNWIND_TAPER_RIGHT = 1.95
CIVIC_BOSCH_MODIFIED_B_VARIANT_TURN_IN_FRICTION_BOOST_LEFT = 0.03
CIVIC_BOSCH_MODIFIED_B_VARIANT_TURN_IN_FRICTION_BOOST_RIGHT = 0.03
CIVIC_BOSCH_MODIFIED_B_VARIANT_UNWIND_FRICTION_REDUCTION_LEFT = 0.88
CIVIC_BOSCH_MODIFIED_B_VARIANT_UNWIND_FRICTION_REDUCTION_RIGHT = 1.20
CIVIC_BOSCH_MODIFIED_B_VARIANT_UNWIND_FRICTION_REDUCTION_LEFT = 1.05
CIVIC_BOSCH_MODIFIED_B_VARIANT_UNWIND_FRICTION_REDUCTION_RIGHT = 1.40
BOLT_2022_2023_CARS = (
GM_CAR.CHEVROLET_BOLT_ACC_2022_2023,
+1 -1
View File
@@ -441,7 +441,7 @@ class TestLatControl:
monkeypatch.setattr(latcontrol_torque, "civic_bosch_modified_lateral_testing_ground_active", lambda: True)
variant_controller = LatControlTorque(CP.as_reader(), CI, DT_CTRL)
assert variant_controller.torque_params.latAccelFactor == pytest.approx(3.0 * 1.20 * 1.26)
assert variant_controller.torque_params.latAccelFactor == pytest.approx(3.0 * 1.20 * 1.32)
def test_modified_civic_b_torque_ff_scale_curve(self):
steady_left = get_civic_bosch_modified_b_ff_scale(0.5, 0.0, 12.0)
+49
View File
@@ -920,6 +920,11 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
ET.NO_ENTRY: NoEntryAlert("Calibration in Progress"),
},
EventName.pedalNotCalibrated: {
ET.PERMANENT: NormalPermanentAlert("Pedal Not Calibrated", "Check Calibration"),
ET.NO_ENTRY: NoEntryAlert("Pedal Not Calibrated: Check Calibration"),
},
EventName.calibrationRecalibrating: {
ET.PERMANENT: calibration_incomplete_alert,
ET.SOFT_DISABLE: soft_disable_alert("Device Remount Detected: Recalibrating"),
@@ -1120,6 +1125,50 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = {
ET.WARNING: personality_changed_alert,
},
EventName.pedalCruiseEnabled: {
ET.WARNING: Alert(
"Pedal Cruise Engaged",
"",
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.engage, 0.8),
},
EventName.pedalCruiseDisabled: {
ET.WARNING: Alert(
"Pedal Cruise Disengaged",
"",
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.disengage, 0.8),
},
EventName.pedalMaxRegen: {
ET.WARNING: Alert(
"Max Regen Being Used",
"",
AlertStatus.userPrompt, AlertSize.small,
Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.prompt, 2.),
},
EventName.teslaCCEngaged: {
ET.WARNING: Alert(
"Tesla Cruise Engaged",
"",
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.engage, 0.8),
},
EventName.teslaCCDisengaged: {
ET.WARNING: Alert(
"Tesla Cruise Disengaged",
"",
AlertStatus.normal, AlertSize.small,
Priority.LOW, VisualAlert.none, AudibleAlert.disengage, 0.8),
},
EventName.teslaCCNotArmed: {
ET.PERMANENT: NormalPermanentAlert("Arm Stock Cruise to Enable Speed Control"),
},
EventName.userBookmark: {
ET.PERMANENT: NormalPermanentAlert("Bookmark Saved", duration=1.5),
},
+17
View File
@@ -133,6 +133,7 @@ class SelfdriveD:
self.recalibrating_seen = False
self.state_machine = StateMachine()
self.rk = Ratekeeper(100, print_delay_threshold=None)
self.prev_pedal_long_active = False
# Determine startup event
self.startup_event = StarPilotEventName.customStartupAlert
@@ -241,6 +242,22 @@ class SelfdriveD:
self.last_below_steer_speed_alert_time = now
self.events.add_from_msg(car_events)
if (self.CP.brand == "tesla"
and self.CP.carFingerprint == "TESLA_MODEL_S_PREAP"
and self.CP.openpilotLongitudinalControl
and not self.CP.pcmCruise):
pedal_long_active = bool(CS.cruiseState.enabled and getattr(CS, 'pedalLongActive', False))
if pedal_long_active and not self.prev_pedal_long_active:
self.events.add(EventName.pedalCruiseEnabled)
elif self.prev_pedal_long_active and not pedal_long_active:
self.events.add(EventName.pedalCruiseDisabled)
self.prev_pedal_long_active = pedal_long_active
if getattr(CS, 'pedalMaxRegen', False):
self.events.add(EventName.pedalMaxRegen)
else:
self.prev_pedal_long_active = False
if (getattr(self.starpilot_toggles, "nostalgia_mode", False) and
self.CP.openpilotLongitudinalControl and
self.enabled and