diff --git a/common/params.cc b/common/params.cc index d3ad9edb9..4f10520b5 100644 --- a/common/params.cc +++ b/common/params.cc @@ -535,6 +535,8 @@ std::unordered_map keys = { {"SteerDelayStock", PERSISTENT}, {"SteerFriction", PERSISTENT}, {"SteerFrictionStock", PERSISTENT}, + {"SteerOffset", PERSISTENT}, + {"SteerOffsetStock", PERSISTENT}, {"SteerLatAccel", PERSISTENT}, {"SteerLatAccelStock", PERSISTENT}, {"SteerKP", PERSISTENT}, diff --git a/common/params_pyx.so b/common/params_pyx.so index 15bb97df8..6c4173b8c 100755 Binary files a/common/params_pyx.so and b/common/params_pyx.so differ diff --git a/frogpilot/common/frogpilot_variables.py b/frogpilot/common/frogpilot_variables.py index 4924963b4..2a8dac683 100644 --- a/frogpilot/common/frogpilot_variables.py +++ b/frogpilot/common/frogpilot_variables.py @@ -409,6 +409,8 @@ frogpilot_default_params: list[tuple[str, str | bytes, int, str]] = [ ("SteerDelayStock", "", 3, ""), ("SteerFriction", "", 3, ""), ("SteerFrictionStock", "", 3, ""), + ("SteerOffset", "", 3, ""), + ("SteerOffsetStock", "", 3, ""), ("SteerKP", "", 3, ""), ("SteerKPStock", "", 3, ""), ("SteerLatAccel", "", 3, ""), @@ -615,6 +617,7 @@ class FrogPilotVariables: toggle.steerActuatorDelay = np.clip(params.get_float("SteerDelay"), 0.01, 1.0) if advanced_lateral_tuning and tuning_level >= level["SteerDelay"] else steerActuatorDelay toggle.use_custom_steerActuatorDelay = bool(round(toggle.steerActuatorDelay, 2) != round(steerActuatorDelay, 2)) toggle.friction = np.clip(params.get_float("SteerFriction"), 0, 0.5) if advanced_lateral_tuning and tuning_level >= level["SteerFriction"] else friction + toggle.steer_offset = np.clip(params.get_float("SteerOffset"), -0.2, 0.2) if advanced_lateral_tuning and tuning_level >= level["SteerOffset"] and toggle.car_make == "gm" else 0.0 toggle.use_custom_friction = bool(round(toggle.friction, 2) != round(friction, 2)) and is_torque_car and not toggle.force_auto_tune or toggle.force_auto_tune_off toggle.steerKp = [[0], [np.clip(params.get_float("SteerKP"), steerKp * 0.5, steerKp * 1.5) if advanced_lateral_tuning and is_torque_car and tuning_level >= level["SteerKP"] else steerKp]] toggle.latAccelFactor = np.clip(params.get_float("SteerLatAccel"), latAccelFactor * 0.75, latAccelFactor * 1.25) if advanced_lateral_tuning and tuning_level >= level["SteerLatAccel"] else latAccelFactor diff --git a/frogpilot/ui/qt/offroad/frogpilot_settings.cc b/frogpilot/ui/qt/offroad/frogpilot_settings.cc index 57d541293..97b231302 100644 --- a/frogpilot/ui/qt/offroad/frogpilot_settings.cc +++ b/frogpilot/ui/qt/offroad/frogpilot_settings.cc @@ -285,6 +285,7 @@ void FrogPilotSettingsWindow::updateVariables() { longitudinalActuatorDelay = CP.getLongitudinalActuatorDelay(); startAccel = CP.getStartAccel(); steerActuatorDelay = CP.getSteerActuatorDelay(); + steerOffset = 0.0f; steerKp = CP.getLateralTuning().which() == cereal::CarParams::LateralTuning::PID ? CP.getLateralTuning().getPid().getKpV()[0] : 0.6; steerRatio = CP.getSteerRatio(); stopAccel = CP.getStopAccel(); @@ -296,6 +297,7 @@ void FrogPilotSettingsWindow::updateVariables() { float currentDelayStock = params.getFloat("SteerDelayStock"); float currentFrictionStock = params.getFloat("SteerFrictionStock"); + float currentSteerOffsetStock = params.getFloat("SteerOffsetStock"); float currentKPStock = params.getFloat("SteerKPStock"); float currentLatAccelStock = params.getFloat("SteerLatAccelStock"); float currentLongDelayStock = params.getFloat("LongitudinalActuatorDelayStock"); @@ -320,6 +322,13 @@ void FrogPilotSettingsWindow::updateVariables() { params.putFloat("SteerFrictionStock", friction); } + if (currentSteerOffsetStock != steerOffset) { + if (params.getFloat("SteerOffset") == currentSteerOffsetStock) { + params.putFloat("SteerOffset", steerOffset); + } + params.putFloat("SteerOffsetStock", steerOffset); + } + if (currentKPStock != steerKp && steerKp != 0) { if (params.getFloat("SteerKP") == currentKPStock || currentKPStock == 0) { params.putFloat("SteerKP", steerKp); diff --git a/frogpilot/ui/qt/offroad/frogpilot_settings.h b/frogpilot/ui/qt/offroad/frogpilot_settings.h index aa4db8d8f..4c516aaed 100644 --- a/frogpilot/ui/qt/offroad/frogpilot_settings.h +++ b/frogpilot/ui/qt/offroad/frogpilot_settings.h @@ -47,6 +47,7 @@ public: float longitudinalActuatorDelay; float startAccel; float steerActuatorDelay; + float steerOffset; float steerKp; float steerRatio; float stopAccel; diff --git a/frogpilot/ui/qt/offroad/lateral_settings.cc b/frogpilot/ui/qt/offroad/lateral_settings.cc index 3db5dc80e..9b01ca282 100644 --- a/frogpilot/ui/qt/offroad/lateral_settings.cc +++ b/frogpilot/ui/qt/offroad/lateral_settings.cc @@ -41,6 +41,7 @@ FrogPilotLateralPanel::FrogPilotLateralPanel(FrogPilotSettingsWindow *parent) : {"AdvancedLateralTune", tr("Advanced Lateral Tuning"), tr("Advanced steering control changes to fine-tune how openpilot drives."), "../../frogpilot/assets/toggle_icons/icon_advanced_lateral_tune.png"}, {"SteerDelay", parent->steerActuatorDelay != 0 ? QString(tr("Actuator Delay (Default: %1)")).arg(QString::number(parent->steerActuatorDelay, 'f', 2)) : tr("Actuator Delay"), tr("The time between openpilot's steering command and the vehicle's response. Increase if the vehicle reacts late; decrease if it feels jumpy. Auto-learned by default."), ""}, {"SteerFriction", parent->friction != 0 ? QString(tr("Friction (Default: %1)")).arg(QString::number(parent->friction, 'f', 2)) : tr("Friction"), tr("Compensates for steering friction. Increase if the wheel sticks near center; decrease if it jitters. Auto-learned by default."), ""}, + {"SteerOffset", parent->steerOffset != 0 ? QString(tr("Steer Offset (Default: %1)")).arg(QString::number(parent->steerOffset, 'f', 3)) : tr("Steer Offset"), tr("Offsets steering torque to help compensate for alignment or tire issues. More negative pulls the car right; more positive pulls it left. Most users should not need to touch this."), ""}, {"SteerKP", parent->steerKp != 0 ? QString(tr("Kp Factor (Default: %1)")).arg(QString::number(parent->steerKp, 'f', 2)) : tr("Kp Factor"), tr("How strongly openpilot corrects lane position. Higher is tighter but twitchier; lower is smoother but slower. Auto-learned by default."), ""}, {"SteerLatAccel", parent->latAccelFactor != 0 ? QString(tr("Lateral Acceleration (Default: %1)")).arg(QString::number(parent->latAccelFactor, 'f', 2)) : tr("Lateral Acceleration"), tr("Maps steering torque to turning response. Increase for sharper turns; decrease for gentler steering. Auto-learned by default."), ""}, {"SteerRatio", parent->steerRatio != 0 ? QString(tr("Steer Ratio (Default: %1)")).arg(QString::number(parent->steerRatio, 'f', 2)) : tr("Steer Ratio"), tr("The relationship between steering wheel rotation and road wheel angle. Increase if steering feels too quick or twitchy; decrease if it feels too slow or weak. Auto-learned by default."), ""}, @@ -87,6 +88,9 @@ FrogPilotLateralPanel::FrogPilotLateralPanel(FrogPilotSettingsWindow *parent) : } else if (param == "SteerFriction") { std::vector steerFrictionButton{"Reset"}; lateralToggle = new FrogPilotParamValueButtonControl(param, title, desc, icon, 0, 0.5, QString(), std::map(), 0.01, false, {}, steerFrictionButton, false, false); + } else if (param == "SteerOffset") { + std::vector steerOffsetButton{"Reset"}; + lateralToggle = new FrogPilotParamValueButtonControl(param, title, desc, icon, -0.2, 0.2, QString(), std::map(), 0.005, false, {}, steerOffsetButton, false, false); } else if (param == "SteerKP") { std::vector steerKPButton{"Reset"}; lateralToggle = new FrogPilotParamValueButtonControl(param, title, desc, icon, parent->steerKp * 0.5, parent->steerKp * 1.5, QString(), std::map(), 0.01, false, {}, steerKPButton, false, false); @@ -216,6 +220,14 @@ FrogPilotLateralPanel::FrogPilotLateralPanel(FrogPilotSettingsWindow *parent) : } }); + steerOffsetToggle = static_cast(toggles["SteerOffset"]); + QObject::connect(steerOffsetToggle, &FrogPilotParamValueButtonControl::buttonClicked, [parent, this]() { + if (FrogPilotConfirmationDialog::yesorno(tr("Reset Steer Offset to its default value?"), this)) { + params.putFloat("SteerOffset", parent->steerOffset); + steerOffsetToggle->refresh(); + } + }); + steerKPToggle = static_cast(toggles["SteerKP"]); QObject::connect(steerKPToggle, &FrogPilotParamValueButtonControl::buttonClicked, [parent, this]() { if (FrogPilotConfirmationDialog::yesorno(tr("Reset Kp Factor to its default value?"), this)) { @@ -255,6 +267,7 @@ void FrogPilotLateralPanel::showEvent(QShowEvent *event) { steerDelayToggle->setTitle(QString(tr("Actuator Delay (Default: %1)")).arg(QString::number(parent->steerActuatorDelay, 'f', 2))); steerFrictionToggle->setTitle(QString(tr("Friction (Default: %1)")).arg(QString::number(parent->friction, 'f', 2))); + steerOffsetToggle->setTitle(QString(tr("Steer Offset (Default: %1)")).arg(QString::number(parent->steerOffset, 'f', 3))); steerKPToggle->setTitle(QString(tr("Kp Factor (Default: %1)")).arg(QString::number(parent->steerKp, 'f', 2))); steerKPToggle->updateControl(parent->steerKp * 0.5, parent->steerKp * 1.5); steerLatAccelToggle->setTitle(QString(tr("Lateral Accel (Default: %1)")).arg(QString::number(parent->latAccelFactor, 'f', 2))); @@ -405,6 +418,12 @@ void FrogPilotLateralPanel::updateToggles() { setVisible &= !usingNNFF; } + else if (key == "SteerOffset") { + setVisible &= parent->isGM; + setVisible &= parent->isTorqueCar || forcingTorqueController; + setVisible &= !usingNNFF; + } + else if (key == "SteerKP") { setVisible &= parent->steerKp != 0; setVisible &= !parent->isAngleCar; diff --git a/frogpilot/ui/qt/offroad/lateral_settings.h b/frogpilot/ui/qt/offroad/lateral_settings.h index e414ccf94..235697ce0 100644 --- a/frogpilot/ui/qt/offroad/lateral_settings.h +++ b/frogpilot/ui/qt/offroad/lateral_settings.h @@ -31,6 +31,7 @@ private: float friction; float latAccelFactor; float steerActuatorDelay; + float steerOffset; float steerKp; float steerRatio; @@ -38,7 +39,7 @@ private: std::map toggles; - QSet advancedLateralTuneKeys = {"ForceAutoTune", "ForceAutoTuneOff", "ForceTorqueController", "SteerDelay", "SteerFriction", "SteerLatAccel", "SteerKP", "SteerRatio"}; + QSet advancedLateralTuneKeys = {"ForceAutoTune", "ForceAutoTuneOff", "ForceTorqueController", "SteerDelay", "SteerFriction", "SteerOffset", "SteerLatAccel", "SteerKP", "SteerRatio"}; QSet aolKeys = {"AlwaysOnLateralLKAS", "AlwaysOnLateralMain", "PauseAOLOnBrake"}; QSet laneChangeKeys = {"LaneChangeTime", "LaneDetectionWidth", "MinimumLaneChangeSpeed", "NudgelessLaneChange", "OneLaneChange"}; QSet lateralTuneKeys = {"NNFF", "NNFFLite", "TurnDesires"}; @@ -48,6 +49,7 @@ private: FrogPilotParamValueButtonControl *steerDelayToggle; FrogPilotParamValueButtonControl *steerFrictionToggle; + FrogPilotParamValueButtonControl *steerOffsetToggle; FrogPilotParamValueButtonControl *steerLatAccelToggle; FrogPilotParamValueButtonControl *steerKPToggle; FrogPilotParamValueButtonControl *steerRatioToggle; diff --git a/selfdrive/car/gm/interface.py b/selfdrive/car/gm/interface.py index 077581400..1404088c3 100644 --- a/selfdrive/car/gm/interface.py +++ b/selfdrive/car/gm/interface.py @@ -47,6 +47,10 @@ NON_LINEAR_TORQUE_PARAMS = { class CarInterface(CarInterfaceBase): + def __init__(self, CP, FPCP, CarController, CarState): + super().__init__(CP, FPCP, CarController, CarState) + self.steer_offset = 0.0 + @staticmethod def get_pid_accel_limits(CP, current_speed, cruise_speed): return CarControllerParams.ACCEL_MIN, CarControllerParams.ACCEL_MAX @@ -90,20 +94,28 @@ class CarInterface(CarInterfaceBase): torque_values, lataccel_values = self.get_lataccel_torque_siglin() def torque_from_lateral_accel_siglin(lateral_acceleration: float, torque_params: car.CarParams.LateralTorqueTuning): - return np.interp(lateral_acceleration, lataccel_values, torque_values) + return float(np.interp(lateral_acceleration, lataccel_values, torque_values) + self.steer_offset) return torque_from_lateral_accel_siglin else: - return self.torque_from_lateral_accel_linear + def torque_from_lateral_accel_linear(lateral_acceleration: float, torque_params: car.CarParams.LateralTorqueTuning): + return self.torque_from_lateral_accel_linear(lateral_acceleration, torque_params) + self.steer_offset + return torque_from_lateral_accel_linear def lateral_accel_from_torque(self) -> LateralAccelFromTorqueCallbackType: if self.CP.carFingerprint in NON_LINEAR_TORQUE_PARAMS: torque_values, lataccel_values = self.get_lataccel_torque_siglin() def lateral_accel_from_torque_siglin(torque: float, torque_params: car.CarParams.LateralTorqueTuning): - return np.interp(torque, torque_values, lataccel_values) + return np.interp(torque - self.steer_offset, torque_values, lataccel_values) return lateral_accel_from_torque_siglin else: - return self.lateral_accel_from_torque_linear + def lateral_accel_from_torque_linear(torque: float, torque_params: car.CarParams.LateralTorqueTuning): + return self.lateral_accel_from_torque_linear(torque - self.steer_offset, torque_params) + return lateral_accel_from_torque_linear + + def update(self, c: car.CarControl, can_strings: list[bytes], frogpilot_toggles) -> car.CarState: + self.steer_offset = float(getattr(frogpilot_toggles, "steer_offset", 0.0)) + return super().update(c, can_strings, frogpilot_toggles) @staticmethod def _get_params(ret, candidate, fingerprint, car_fw, experimental_long, docs, frogpilot_toggles): diff --git a/selfdrive/ui/_spinner b/selfdrive/ui/_spinner index 5ab0079c1..ff7794cce 100755 Binary files a/selfdrive/ui/_spinner and b/selfdrive/ui/_spinner differ diff --git a/selfdrive/ui/_text b/selfdrive/ui/_text index 400d38c6f..8c652ae34 100755 Binary files a/selfdrive/ui/_text and b/selfdrive/ui/_text differ diff --git a/selfdrive/ui/translations/main_ar.ts b/selfdrive/ui/translations/main_ar.ts index 25cb34c8a..e64ca4b1c 100644 --- a/selfdrive/ui/translations/main_ar.ts +++ b/selfdrive/ui/translations/main_ar.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>تعديلات Twilsonco المعتمدة على العزم لتنعيم التوجيه في المنعطفات.</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_caveman.ts b/selfdrive/ui/translations/main_caveman.ts index fc1626e78..9c875e9e0 100644 --- a/selfdrive/ui/translations/main_caveman.ts +++ b/selfdrive/ui/translations/main_caveman.ts @@ -1200,6 +1200,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Twilsonco make torque tweak. Steering smooth in curve.</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_de.ts b/selfdrive/ui/translations/main_de.ts index 26f6b333a..a8f694f68 100644 --- a/selfdrive/ui/translations/main_de.ts +++ b/selfdrive/ui/translations/main_de.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Twilsoncos drehmomentbasierte Anpassungen zur Glättung der Lenkung in Kurven.</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_duck.ts b/selfdrive/ui/translations/main_duck.ts index 3b22e85b2..a175c16cb 100644 --- a/selfdrive/ui/translations/main_duck.ts +++ b/selfdrive/ui/translations/main_duck.ts @@ -1201,6 +1201,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Quack! Twilsonco’s torque tweaks to smooth out steering in curves, waddle-waddle.</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_es.ts b/selfdrive/ui/translations/main_es.ts index 3c000f675..78e2e5eac 100644 --- a/selfdrive/ui/translations/main_es.ts +++ b/selfdrive/ui/translations/main_es.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Ajustes basados en par de Twilsonco para suavizar la dirección en curvas.</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_fr.ts b/selfdrive/ui/translations/main_fr.ts index a76c963e3..a89e6557f 100644 --- a/selfdrive/ui/translations/main_fr.ts +++ b/selfdrive/ui/translations/main_fr.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Ajustements basés sur le couple de Twilsonco pour adoucir la direction dans les virages.</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_frog.ts b/selfdrive/ui/translations/main_frog.ts index e23c8c16d..19bf32128 100644 --- a/selfdrive/ui/translations/main_frog.ts +++ b/selfdrive/ui/translations/main_frog.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Ribbit! Twilsonco’s torque tweaks smooth steering through curves, croak.</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts index 95adb8a07..936678282 100644 --- a/selfdrive/ui/translations/main_ja.ts +++ b/selfdrive/ui/translations/main_ja.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>カーブでのステアリングを滑らかにするためのTwilsoncoのトルクベース調整。</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts index ae6c0e972..adfb0fc97 100644 --- a/selfdrive/ui/translations/main_ko.ts +++ b/selfdrive/ui/translations/main_ko.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>커브에서 조향을 부드럽게 하기 위한 Twilsonco의 토크 기반 조정.</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_pirate.ts b/selfdrive/ui/translations/main_pirate.ts index f2de3638e..3c441894f 100644 --- a/selfdrive/ui/translations/main_pirate.ts +++ b/selfdrive/ui/translations/main_pirate.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Twilsonco’s torque-based tweaks t’ smooth out steerin’ in curves, arr!</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_pt-BR.ts b/selfdrive/ui/translations/main_pt-BR.ts index 72c8b8e5a..9226945c3 100644 --- a/selfdrive/ui/translations/main_pt-BR.ts +++ b/selfdrive/ui/translations/main_pt-BR.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Ajustes baseados em torque do Twilsonco para suavizar a direção em curvas.</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_shakespearean.ts b/selfdrive/ui/translations/main_shakespearean.ts index 40cf76d1a..1e23dff34 100644 --- a/selfdrive/ui/translations/main_shakespearean.ts +++ b/selfdrive/ui/translations/main_shakespearean.ts @@ -1203,6 +1203,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Twilsonco’s torque-wrought tweaks to make steering flow smoother ’midst the curves.</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_th.ts b/selfdrive/ui/translations/main_th.ts index aa74c7961..5a6da70e0 100644 --- a/selfdrive/ui/translations/main_th.ts +++ b/selfdrive/ui/translations/main_th.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>การปรับตามแรงบิดของ Twilsonco เพื่อทำให้การบังคับเลี้ยวในโค้งนุ่มนวลขึ้น</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_tr.ts b/selfdrive/ui/translations/main_tr.ts index 543d9f924..96b9c8f59 100644 --- a/selfdrive/ui/translations/main_tr.ts +++ b/selfdrive/ui/translations/main_tr.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Virajlarda direksiyonu yumuşatmak için Twilsonco’nun torka dayalı ayarlamaları.</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts index 9c259e009..5ae52234d 100644 --- a/selfdrive/ui/translations/main_zh-CHS.ts +++ b/selfdrive/ui/translations/main_zh-CHS.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Twilsonco 基于扭矩的调整,用于在弯道中平滑转向。</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts index 6678e70e8..f8c640ed8 100644 --- a/selfdrive/ui/translations/main_zh-CHT.ts +++ b/selfdrive/ui/translations/main_zh-CHT.ts @@ -1199,6 +1199,22 @@ <b>Twilsonco's torque-based adjustments to smoothen out steering in curves.</b> <b>Twilsonco 的扭力式調整,可在轉彎時讓轉向更平順。</b> + + Steer Offset (Default: %1) + + + + Steer Offset + + + + <b>Offsets steering torque to help compensate for alignment or tire issues.</b> More negative pulls the car right; more positive pulls it left. Most users should not need to touch this. + + + + Reset <b>Steer Offset</b> to its default value? + + FrogPilotLongitudinalPanel diff --git a/selfdrive/ui/ui b/selfdrive/ui/ui index 60af000cd..fe6bf09fb 100755 Binary files a/selfdrive/ui/ui and b/selfdrive/ui/ui differ