This commit is contained in:
firestar5683
2026-05-04 15:40:38 -05:00
parent 90b05a1d18
commit 32185c0c2e
6 changed files with 62 additions and 16 deletions
+5 -4
View File
@@ -167,18 +167,19 @@ def create_acc_hud(packer, bus, CP, enabled, pcm_speed, pcm_accel, hud_control,
def create_lkas_hud(packer, bus, CP, hud_control, lat_active, steering_available, reduced_steering, alert_steer_required, lkas_hud):
commands = []
lanes_visible = bool(hud_control.lanesVisible or lat_active)
lkas_hud_values = {
'LKAS_READY': 1,
'LKAS_STATE_CHANGE': 1,
'STEERING_REQUIRED': alert_steer_required,
'SOLID_LANES': hud_control.lanesVisible,
'SOLID_LANES': lanes_visible,
'BEEP': 0,
}
if CP.carFingerprint in (HONDA_BOSCH_RADARLESS | HONDA_BOSCH_CANFD):
lkas_hud_values['LANE_LINES'] = 3
lkas_hud_values['DASHED_LANES'] = hud_control.lanesVisible
lkas_hud_values['DASHED_LANES'] = lanes_visible
# car likely needs to see LKAS_PROBLEM fall within a specific time frame, so forward from camera
# TODO: needed for Bosch CAN FD?
@@ -192,8 +193,8 @@ def create_lkas_hud(packer, bus, CP, hud_control, lat_active, steering_available
# New HUD concept for selected Bosch cars, overwrites some of the above
# TODO: make global across all Honda if feedback is favorable
if CP.carFingerprint in HONDA_BOSCH_ALT_RADAR:
lkas_hud_values['DASHED_LANES'] = steering_available
lkas_hud_values['SOLID_LANES'] = lat_active
lkas_hud_values['DASHED_LANES'] = bool(steering_available or lanes_visible)
lkas_hud_values['SOLID_LANES'] = lanes_visible
lkas_hud_values['LKAS_PROBLEM'] = lat_active and reduced_steering
if CP.flags & HondaFlags.BOSCH_EXT_HUD and not CP.openpilotLongitudinalControl:
@@ -11,6 +11,7 @@ from opendbc.car.honda.carcontroller import (
get_honda_bosch_wind_brake_mps2,
update_honda_bosch_live_learning,
)
from opendbc.car.honda.hondacan import create_lkas_hud
from opendbc.car.honda.fingerprints import FW_VERSIONS
from opendbc.car.honda.values import CAR, HONDA_BOSCH, HONDA_BOSCH_TJA_CONTROL, HondaFlags
@@ -18,6 +19,19 @@ HONDA_FW_VERSION_RE = rb"[A-Z0-9]{5}-[A-Z0-9]{3}(-|,)[A-Z0-9]{4}(\x00){2}$"
class TestHondaFingerprint:
def test_honda_lkas_hud_shows_lane_lines_when_lateral_only_is_active(self):
class FakePacker:
@staticmethod
def make_can_msg(name, bus, values):
return name, bus, values
CP = CarInterface.get_non_essential_params(CAR.HONDA_CIVIC_BOSCH)
hud_control = SimpleNamespace(lanesVisible=False)
cmds = create_lkas_hud(FakePacker(), 0, CP, hud_control, True, True, False, False, {})
assert cmds[0][2]["SOLID_LANES"] is True
def test_fw_version_format(self):
# Asserts all FW versions follow an expected format
for fw_by_ecu in FW_VERSIONS.values():
+11 -11
View File
@@ -47,23 +47,23 @@ UNWIND_D_DES_THRESHOLD = -1.0
UNWIND_LAT_ACCEL_NEAR_ZERO = 0.3
MIN_LATERAL_CONTROL_SPEED = 0.3
CIVIC_BOSCH_MODIFIED_B_FIXED_FRICTION_THRESHOLD = 0.30
CIVIC_BOSCH_MODIFIED_B_LAT_ACCEL_FACTOR_MULT = 1.10
CIVIC_BOSCH_MODIFIED_B_LAT_ACCEL_FACTOR_MULT = 1.20
CIVIC_BOSCH_MODIFIED_B_TRANSITION_SPEED = 12.0
CIVIC_BOSCH_MODIFIED_B_PHASE_SCALE = 0.10
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
CIVIC_BOSCH_MODIFIED_B_FF_CUTOFF_WIDTH = 0.30
CIVIC_BOSCH_MODIFIED_B_FF_REDUCTION_LEFT = 0.10
CIVIC_BOSCH_MODIFIED_B_FF_REDUCTION_RIGHT = 0.16
CIVIC_BOSCH_MODIFIED_B_TURN_IN_BOOST_LEFT = 0.02
CIVIC_BOSCH_MODIFIED_B_TURN_IN_BOOST_RIGHT = 0.04
CIVIC_BOSCH_MODIFIED_B_UNWIND_TAPER_LEFT = 0.28
CIVIC_BOSCH_MODIFIED_B_UNWIND_TAPER_RIGHT = 0.34
CIVIC_BOSCH_MODIFIED_B_TURN_IN_FRICTION_BOOST_LEFT = 0.01
CIVIC_BOSCH_MODIFIED_B_TURN_IN_FRICTION_BOOST_RIGHT = 0.02
CIVIC_BOSCH_MODIFIED_B_UNWIND_FRICTION_REDUCTION_LEFT = 0.18
CIVIC_BOSCH_MODIFIED_B_UNWIND_FRICTION_REDUCTION_RIGHT = 0.24
CIVIC_BOSCH_MODIFIED_B_FF_REDUCTION_LEFT = 0.14
CIVIC_BOSCH_MODIFIED_B_FF_REDUCTION_RIGHT = 0.24
CIVIC_BOSCH_MODIFIED_B_TURN_IN_BOOST_LEFT = 0.04
CIVIC_BOSCH_MODIFIED_B_TURN_IN_BOOST_RIGHT = 0.00
CIVIC_BOSCH_MODIFIED_B_UNWIND_TAPER_LEFT = 0.40
CIVIC_BOSCH_MODIFIED_B_UNWIND_TAPER_RIGHT = 0.60
CIVIC_BOSCH_MODIFIED_B_TURN_IN_FRICTION_BOOST_LEFT = 0.02
CIVIC_BOSCH_MODIFIED_B_TURN_IN_FRICTION_BOOST_RIGHT = 0.00
CIVIC_BOSCH_MODIFIED_B_UNWIND_FRICTION_REDUCTION_LEFT = 0.26
CIVIC_BOSCH_MODIFIED_B_UNWIND_FRICTION_REDUCTION_RIGHT = 0.40
BOLT_2022_2023_CARS = (
GM_CAR.CHEVROLET_BOLT_ACC_2022_2023,
+1 -1
View File
@@ -429,7 +429,7 @@ class TestLatControl:
CI = CarInterface(CP, custom.StarPilotCarParams.new_message())
controller = LatControlTorque(CP.as_reader(), CI, DT_CTRL)
assert controller.torque_params.latAccelFactor == pytest.approx(3.0 * 1.10)
assert controller.torque_params.latAccelFactor == pytest.approx(3.0 * 1.20)
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)
+2
View File
@@ -86,6 +86,8 @@ class StarPilotCard:
for be in carState.buttonEvents:
if be.type == ButtonType.lkas and be.pressed and starpilot_toggles.always_on_lateral_lkas:
self.always_on_lateral_allowed = not self.always_on_lateral_allowed
if carState.cruiseState.enabled or self.pause_lateral:
self.pause_lateral = not self.always_on_lateral_allowed
elif be.type == ButtonType.mainCruise and be.pressed:
if starpilot_toggles.always_on_lateral_main:
self.always_on_lateral_allowed = not self.always_on_lateral_allowed
@@ -88,6 +88,35 @@ def test_honda_lkas_button_can_toggle_always_on_lateral(monkeypatch, tmp_path):
ret = card.update(car_state, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is True
assert ret.pauseLateral is False
def test_honda_lkas_button_pauses_lateral_when_cruise_is_active(monkeypatch, tmp_path):
monkeypatch.setattr(spc, "Params", FakeParams)
monkeypatch.setattr(spc, "is_FrogsGoMoo", lambda: False)
monkeypatch.setattr(spc, "ERROR_LOGS_PATH", tmp_path)
card = spc.StarPilotCard(
SimpleNamespace(brand="honda"),
SimpleNamespace(alternativeExperience=spc.ALTERNATIVE_EXPERIENCE.ALWAYS_ON_LATERAL),
)
card.always_on_lateral_allowed = True
car_state = make_car_state(available=True, enabled=True, button_events=[SimpleNamespace(type=spc.ButtonType.lkas, pressed=True)])
starpilot_car_state = SimpleNamespace(distancePressed=False)
sm = make_sm()
sm["selfdriveState"].active = True
toggles = make_toggles(always_on_lateral_lkas=True, lkas_allowed_for_aol=True)
ret = card.update(car_state, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is False
assert ret.pauseLateral is True
ret = card.update(car_state, starpilot_car_state, sm, toggles)
assert ret.alwaysOnLateralAllowed is True
assert ret.pauseLateral is False
def test_main_aol_still_follows_cruise_main_for_other_platforms(monkeypatch, tmp_path):