Compare commits

...

35 Commits

Author SHA1 Message Date
rav4kumar
4c7fae7bad maybe it does not need to be complicated ? 2025-03-06 06:30:26 -07:00
rav4kumar
0e86137e43 hahaha 2025-03-05 18:07:06 -07:00
Kumar
64ed69847e Update long_mpc.py 2025-03-04 17:20:34 -07:00
Kumar
dd080960d8 Update long_mpc.py 2025-03-04 17:17:01 -07:00
Kumar
fc2424b77f Update long_mpc.py 2025-03-04 08:19:53 -07:00
Kumar
e7f56a2889 Update long_mpc.py 2025-03-04 08:17:29 -07:00
rav4kumar
64e7f2000f vroom? 2025-03-04 06:58:42 -07:00
rav4kumar
443836694e bump ref 2025-03-03 07:39:35 -07:00
rav4kumar
a18395b7ab rainbow toggle 2025-03-03 07:38:35 -07:00
rav4kumar
c4eb52317e vroom 2025-03-02 13:06:52 -07:00
rav4kumar
c13958b6db Merge remote-tracking branch 'origin/master-new' into tn 2025-03-02 13:04:05 -07:00
rav4kumar
ffe87b2996 i think this is it 2025-02-27 22:03:41 -07:00
rav4kumar
4ef3b9d5e3 bump ref 2025-02-24 17:45:33 -07:00
Kumar
de0297c93b Update long_mpc.py 2025-02-24 17:03:38 -05:00
rav4kumar
f5cfa5c3a2 fast 2025-02-24 07:28:06 -07:00
rav4kumar
c33505fc8e bump ref 2025-02-23 22:52:42 -07:00
rav4kumar
9628f0848e retune 2025-02-23 22:49:35 -07:00
Kumar
e13b37c81c Update long_mpc.py 2025-02-20 15:39:58 -07:00
rav4kumar
8452a8eaed remove min 2025-02-20 07:29:21 -07:00
Kumar
e33ceb5722 Update radard.py 2025-02-19 17:01:01 -07:00
rav4kumar
9c5045febe perhaphs 2025-02-19 07:46:09 -07:00
rav4kumar
a62ee3ae1d workaround? 2025-02-18 22:17:04 -07:00
rav4kumar
9efc0ca6f0 test 2025-02-18 19:38:38 -07:00
rav4kumar
e49296b6b3 fix accel_controller 2025-02-18 18:29:50 -07:00
rav4kumar
7df9e513d4 bump ref and merge fixes for accel_controller 2025-02-17 17:48:02 -07:00
rav4kumar
05228ce3fb accel and dec refinment 2025-02-17 17:34:28 -07:00
rav4kumar
ebbdc92531 "Concept by Aleksei Voronov: At SunnyPilot, we turn concepts into reality." 2025-02-17 17:33:07 -07:00
rav4kumar
984e09971e drive mode selector 2025-02-17 17:30:24 -07:00
rav4kumar
455505a6a4 init accel personality 2025-02-17 17:30:15 -07:00
rav4kumar
d5c5517045 misc. 2025-02-17 17:29:47 -07:00
rav4kumar
2efe2b8aa1 very very fast prius 2025-02-17 17:25:41 -07:00
rav4kumar
c42fcf5322 point ref and bump 2025-02-17 17:24:22 -07:00
rav4kumar
a5ba1afa4c 🌈 2025-02-17 17:24:15 -07:00
rav4kumar
345f520433 still too bright with my tint 2025-02-17 17:24:08 -07:00
rav4kumar
1fe5c0a3da eco, abh, 2025-02-17 17:23:48 -07:00
33 changed files with 1416 additions and 131 deletions

2
.gitmodules vendored
View File

@@ -1,9 +1,11 @@
[submodule "panda"]
path = panda
url = https://github.com/sunnyhaibin/panda.git
branch = tn
[submodule "opendbc"]
path = opendbc_repo
url = https://github.com/sunnypilot/opendbc.git
branch = tn
[submodule "msgq"]
path = msgq_repo
url = https://github.com/sunnypilot/msgq.git

View File

@@ -88,6 +88,7 @@ struct ModelManagerSP @0xaedffd8f31e7b55d {
struct LongitudinalPlanSP @0xf35cc4560bbf6ec2 {
dec @0 :DynamicExperimentalControl;
accelPersonality @1 :AccelerationPersonality;
struct DynamicExperimentalControl {
state @0 :DynamicExperimentalControlState;
@@ -99,6 +100,13 @@ struct LongitudinalPlanSP @0xf35cc4560bbf6ec2 {
blended @1;
}
}
enum AccelerationPersonality {
sport @0;
normal @1;
eco @2;
stock @3;
}
}
struct OnroadEventSP @0xda96579883444c35 {

View File

@@ -239,6 +239,13 @@ std::unordered_map<std::string, uint32_t> keys = {
{"HyundaiRadarTracksToggle", PERSISTENT},
{"DynamicExperimentalControl", PERSISTENT},
{"ToyotaAutoHold", PERSISTENT},
{"ToyotaEnhancedBsm", PERSISTENT},
{"ToyotaTSS2Long", PERSISTENT},
{"FastTakeOff", PERSISTENT},
{"AccelPersonality", PERSISTENT},
{"ToyotaDriveMode", PERSISTENT},
{"RainbowMode", PERSISTENT},
};
} // namespace

2
panda

Submodule panda updated: 44a9806bfb...b9dcb7811e

View File

@@ -121,9 +121,13 @@ class Car:
# set alternative experiences from parameters
disengage_on_accelerator = self.params.get_bool("DisengageOnAccelerator")
sp_toyota_auto_brake_hold = self.params.get_bool("ToyotaAutoHold")
self.CP.alternativeExperience = 0
if not disengage_on_accelerator:
self.CP.alternativeExperience |= ALTERNATIVE_EXPERIENCE.DISABLE_DISENGAGE_ON_GAS
if sp_toyota_auto_brake_hold:
self.CP.alternativeExperience |= ALTERNATIVE_EXPERIENCE.ALLOW_AEB
# mads
MadsParams().set_alternative_experience(self.CP)

View File

@@ -9,6 +9,8 @@ from openpilot.common.swaglog import cloudlog
# WARNING: imports outside of constants will not trigger a rebuild
from openpilot.selfdrive.modeld.constants import index_function
from openpilot.selfdrive.controls.radard import _LEAD_ACCEL_TAU
from openpilot.common.conversions import Conversions as CV
if __name__ == '__main__': # generating code
from openpilot.third_party.acados.acados_template import AcadosModel, AcadosOcp, AcadosOcpSolver
@@ -64,24 +66,48 @@ def get_jerk_factor(personality=log.LongitudinalPersonality.standard):
elif personality==log.LongitudinalPersonality.standard:
return 1.0
elif personality==log.LongitudinalPersonality.aggressive:
return 0.5
return 0.3
else:
raise NotImplementedError("Longitudinal personality not supported")
def get_T_FOLLOW(personality=log.LongitudinalPersonality.standard):
if personality==log.LongitudinalPersonality.relaxed:
return 1.75
return 1.80
elif personality==log.LongitudinalPersonality.standard:
return 1.45
elif personality==log.LongitudinalPersonality.aggressive:
return 1.25
elif personality==log.LongitudinalPersonality.aggressive:
return 1.10
else:
raise NotImplementedError("Longitudinal personality not supported")
def get_stopped_equivalence_factor(v_lead):
return (v_lead**2) / (2 * COMFORT_BRAKE)
def get_stopped_equivalence_factor_krkeegen(v_lead, v_ego):
v_diff_offset = 0
v_diff_offset_max = 12
speed_to_reach_max_v_diff_offset = 26 * CV.KPH_TO_MS # in m/s
delta_speed = v_lead - v_ego
if np.any(delta_speed > 0):
# Scale v_diff_offset with a hybrid approach: linear with a smooth transition
v_diff_offset = np.clip(delta_speed * 1.5, 0, v_diff_offset_max)
scaling_factor = np.clip((speed_to_reach_max_v_diff_offset - v_ego) / speed_to_reach_max_v_diff_offset, 0, 1)
# Apply a stronger decay at higher speeds to avoid pulling too close
smooth_scaling = scaling_factor ** 3 * (10 - 9 * scaling_factor)
v_diff_offset *= smooth_scaling
stopping_distance = (v_lead ** 2) / (2 * COMFORT_BRAKE) + v_diff_offset
return stopping_distance
def get_safe_obstacle_distance(v_ego, t_follow):
return (v_ego**2) / (2 * COMFORT_BRAKE) + t_follow * v_ego + STOP_DISTANCE
@@ -327,7 +353,7 @@ class LongitudinalMpc:
lead_xv = self.extrapolate_lead(x_lead, v_lead, a_lead, a_lead_tau)
return lead_xv
def update(self, radarstate, v_cruise, x, v, a, j, personality=log.LongitudinalPersonality.standard):
def update(self, radarstate, v_cruise, x, v, a, j, personality=log.LongitudinalPersonality.standard, fast_take_off = False):
t_follow = get_T_FOLLOW(personality)
v_ego = self.x0[1]
self.status = radarstate.leadOne.status or radarstate.leadTwo.status
@@ -338,8 +364,13 @@ class LongitudinalMpc:
# To estimate a safe distance from a moving lead, we calculate how much stopping
# distance that lead needs as a minimum. We can add that to the current distance
# and then treat that as a stopped car/obstacle at this new distance.
lead_0_obstacle = lead_xv_0[:,0] + get_stopped_equivalence_factor(lead_xv_0[:,1])
lead_1_obstacle = lead_xv_1[:,0] + get_stopped_equivalence_factor(lead_xv_1[:,1])
if fast_take_off:
lead_0_obstacle = lead_xv_0[:,0] + get_stopped_equivalence_factor_krkeegen(lead_xv_0[:,1], v_ego)
lead_1_obstacle = lead_xv_1[:,0] + get_stopped_equivalence_factor_krkeegen(lead_xv_1[:,1], v_ego)
else:
lead_0_obstacle = lead_xv_0[:,0] + get_stopped_equivalence_factor(lead_xv_0[:,1])
lead_1_obstacle = lead_xv_1[:,0] + get_stopped_equivalence_factor(lead_xv_1[:,1])
self.params[:,0] = ACCEL_MIN
self.params[:,1] = ACCEL_MAX

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python3
import math
import numpy as np
from openpilot.common.params import Params
import cereal.messaging as messaging
from opendbc.car.interfaces import ACCEL_MIN, ACCEL_MAX
from openpilot.common.conversions import Conversions as CV
@@ -88,6 +88,19 @@ class LongitudinalPlanner(LongitudinalPlannerSP):
self.j_desired_trajectory = np.zeros(CONTROL_N)
self.solverExecutionTime = 0.0
self.params = Params()
self.param_read_counter = 0
self.read_param()
self.fast_take_off = False
def read_param(self):
try:
self.fast_take_off = self.params.get_bool("FastTakeOff")
except AttributeError:
pass
@staticmethod
def parse_model(model_msg, model_error):
if (len(model_msg.position.x) == ModelConstants.IDX_N and
@@ -110,6 +123,9 @@ class LongitudinalPlanner(LongitudinalPlannerSP):
def update(self, sm):
LongitudinalPlannerSP.update(self, sm)
if self.param_read_counter % 50 == 0:
self.read_param()
self.param_read_counter += 1
self.mpc.mode = 'blended' if sm['selfdriveState'].experimentalMode else 'acc'
if dec_mpc_mode := self.get_mpc_mode():
self.mpc.mode = dec_mpc_mode
@@ -142,6 +158,35 @@ class LongitudinalPlanner(LongitudinalPlannerSP):
else:
accel_clip = [ACCEL_MIN, ACCEL_MAX]
# Override accel using Accel Controller if enabled
if self.accel_controller.is_enabled:
max_limit = self.accel_controller.get_accel_limits(v_ego, accel_clip)
# Ensure max_limit is a single float value
if isinstance(max_limit, list):
max_limit = max_limit[1]
# If needed, ensure braking is allowed
# if not self.allow_throttle:
# max_limit = min(max_limit, -3.5) # Ensure braking is allowed if needed
# print(f"allow_throttle={self.allow_throttle}, max_limit before={max_limit:.2f}")
print(f"Accel Controller: max_limit={max_limit:.2f}")
if self.mpc.mode == 'acc':
# Use the accel controller limits directly
accel_clip = [ACCEL_MIN, max_limit]
# Recalculate limit turn according to the new max limit
steer_angle_without_offset = sm['carState'].steeringAngleDeg - sm['liveParameters'].angleOffsetDeg
accel_clip = limit_accel_in_turns(v_ego, steer_angle_without_offset, accel_clip, self.CP)
print(f"ACC Mode Final: v_ego={v_ego:.2f}, accel_clip={accel_clip}")
else:
print(f"Blended Mode (Accel Controller Enabled): accel_clip={accel_clip}")
else:
print(f"Accel Controller Disabled: accel_clip={accel_clip}")
if reset_state:
self.v_desired_filter.x = v_ego
# Clip aEgo to cruise limits to prevent large accelerations when becoming active
@@ -165,7 +210,10 @@ class LongitudinalPlanner(LongitudinalPlannerSP):
self.mpc.set_weights(prev_accel_constraint, personality=sm['selfdriveState'].personality)
self.mpc.set_cur_state(self.v_desired_filter.x, self.a_desired)
self.mpc.update(sm['radarState'], v_cruise, x, v, a, j, personality=sm['selfdriveState'].personality)
#print("Fast take off status:", self.fast_take_off)
self.mpc.update(sm['radarState'], v_cruise, x, v, a, j, personality=sm['selfdriveState'].personality, fast_take_off=self.fast_take_off)
self.v_desired_trajectory = np.interp(CONTROL_N_T_IDX, T_IDXS_MPC, self.mpc.v_solution)
self.a_desired_trajectory = np.interp(CONTROL_N_T_IDX, T_IDXS_MPC, self.mpc.a_solution)

View File

@@ -150,7 +150,7 @@ def get_RadarState_from_vision(lead_msg: capnp._DynamicStructReader, v_ego: floa
"vRel": float(lead_v_rel_pred),
"vLead": float(v_ego + lead_v_rel_pred),
"vLeadK": float(v_ego + lead_v_rel_pred),
"aLeadK": 0.0,
"aLeadK": float(lead_msg.a[0]),
"aLeadTau": 0.3,
"fcw": False,
"modelProb": float(lead_msg.prob),

View File

@@ -36,6 +36,42 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
tr("Enable toggle to allow the model to determine when to use sunnypilot ACC or sunnypilot End to End Longitudinal."),
"../assets/offroad/icon_blank.png",
},
{
"FastTakeOff",
tr("Very fast prius"),
tr("When prius goes faster then sunnys car :) vroom"),
"../assets/offroad/icon_blank.png",
},
{
"ToyotaAutoHold",
tr("Toyota: Auto Brake Hold"),
tr("umm auto brake hold?"),
"../assets/offroad/icon_blank.png",
},
{
"ToyotaEnhancedBsm",
tr("Toyota: Enhanced BSM"),
tr("like blind spot monitoring but better?"),
"../assets/offroad/icon_blank.png",
},
{
"ToyotaTSS2Long",
tr("Toyota: custom tune"),
tr("idk something gas and brake"),
"../assets/offroad/icon_blank.png",
},
{
"ToyotaDriveMode",
tr("Enable Toyota Drive Mode Button"),
tr("Sunnypilot will link the Acceleration Personality to the car's physical drive mode selector.\nReboot Required."),
"../assets/offroad/icon_blank.png",
},
{
"RainbowMode",
tr("Enable Tesla Rainbow Mode"),
tr("....."),
"../assets/offroad/icon_blank.png",
},
{
"DisengageOnAccelerator",
tr("Disengage on Accelerator Pedal"),
@@ -91,6 +127,16 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
"../assets/offroad/icon_speed_limit.png",
longi_button_texts);
// accel controller
std::vector<QString> accel_personality_texts{tr("Sport"), tr("Normal"), tr("Eco"), tr("Stock")};
accel_personality_setting = new ButtonParamControlSP("AccelPersonality", tr("Acceleration Personality"),
tr("Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. "
"In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these "
"acceleration personality within Onroad Settings on the driving screen."),
"",
accel_personality_texts);
accel_personality_setting->showDescription();
// set up uiState update for personality setting
QObject::connect(uiState(), &UIState::uiUpdate, this, &TogglesPanel::updateState);
@@ -106,6 +152,7 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) {
// insert longitudinal personality after NDOG toggle
if (param == "DisengageOnAccelerator") {
addItem(long_personality_setting);
addItem(accel_personality_setting);
}
}
@@ -126,6 +173,13 @@ void TogglesPanel::updateState(const UIState &s) {
}
uiState()->scene.personality = personality;
}
if (sm.updated("longitudinalPlanSP")) {
auto accel_personality = sm["longitudinalPlanSP"].getLongitudinalPlanSP().getAccelPersonality();
if (accel_personality != s.scene.accel_personality && s.scene.started && isVisible()) {
accel_personality_setting->setCheckedButton(static_cast<int>(accel_personality));
}
uiState()->scene.accel_personality = accel_personality;
}
}
void TogglesPanel::expandToggleDescription(const QString &param) {
@@ -163,10 +217,12 @@ void TogglesPanel::updateToggles() {
experimental_mode_toggle->setEnabled(true);
experimental_mode_toggle->setDescription(e2e_description);
long_personality_setting->setEnabled(true);
accel_personality_setting->setEnabled(true);
} else {
// no long for now
experimental_mode_toggle->setEnabled(false);
long_personality_setting->setEnabled(false);
accel_personality_setting->setEnabled(true);
params.remove("ExperimentalMode");
const QString unavailable = tr("Experimental mode is currently unavailable on this car since the car's stock ACC is used for longitudinal control.");

View File

@@ -85,6 +85,7 @@ protected:
Params params;
std::map<std::string, ParamControl*> toggles;
ButtonParamControl *long_personality_setting;
ButtonParamControl *accel_personality_setting;
virtual void updateToggles();
};

View File

@@ -35,7 +35,7 @@ void ModelRenderer::draw(QPainter &painter, const QRect &surface_rect) {
update_model(model, lead_one);
drawLaneLines(painter);
drawPath(painter, model, surface_rect.height());
drawPath(painter, model, surface_rect.height(), surface_rect.width());
if (longitudinal_control && sm.alive("radarState")) {
update_leads(radar_state, model.getPosition());
@@ -105,9 +105,40 @@ void ModelRenderer::drawLaneLines(QPainter &painter) {
}
}
void ModelRenderer::drawPath(QPainter &painter, const cereal::ModelDataV2::Reader &model, int height) {
void ModelRenderer::drawPath(QPainter &painter, const cereal::ModelDataV2::Reader &model, int height, int width) {
QLinearGradient bg(0, height, 0, 0);
if (experimental_mode) {
auto *s = uiState();
auto &sm = *(s->sm);
float v_ego = sm["carState"].getCarState().getVEgo();
bool rainbow = Params().getBool("RainbowMode");
// Get the current time in seconds for dynamic effect (speed of rainbow movement)
float time_offset = std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::steady_clock::now().time_since_epoch()).count() / 1000.0f;
if (rainbow) { // Rainbow Mode
const int max_len = track_vertices.length();
bg.setSpread(QGradient::PadSpread); // Pad for a smooth gradient fade
for (int i = 0; i < max_len; i += 2) { // Skip every other point for performance
if (track_vertices[i].y() < 0 || track_vertices[i].y() > height) continue;
float lin_grad_point = (height - track_vertices[i].y()) / height;
// Use easing for smoother color transitions
float eased_point = pow(lin_grad_point, 1.5f); // Ease-in effect
// Dynamic hue with subtle, smooth animation
float path_hue = fmod(eased_point * 360.0 + (v_ego * 20.0) + (time_offset * 100.0), 360.0);
// Smooth alpha transition with longer fade
float alpha = util::map_val(eased_point, 0.2f, 0.75f, 0.8f, 0.0f);
// Use soft lightness for a premium feel
bg.setColorAt(eased_point, QColor::fromHslF(path_hue / 360.0, 1.0f, 0.55f, alpha));
}
} else if (experimental_mode) {
// The first half of track_vertices are the points for the right side of the path
const auto &acceleration = model.getAcceleration().getX();
const int max_len = std::min<int>(track_vertices.length() / 2, acceleration.size());
@@ -140,8 +171,12 @@ void ModelRenderer::drawPath(QPainter &painter, const cereal::ModelDataV2::Reade
painter.setBrush(bg);
painter.drawPolygon(track_vertices);
LongFuel(painter,height, width);
LateralFuel(painter, height, width);
}
void ModelRenderer::updatePathGradient(QLinearGradient &bg) {
static const QColor throttle_colors[] = {
QColor::fromHslF(148. / 360., 0.94, 0.51, 0.4),
@@ -186,6 +221,161 @@ QColor ModelRenderer::blendColors(const QColor &start, const QColor &end, float
(1 - t) * start.alphaF() + t * end.alphaF());
}
void ModelRenderer::LongFuel(QPainter &painter, int height, int width) {
qreal rectWidth = static_cast<qreal>(width);
qreal rectHeight = static_cast<qreal>(height);
UIState *s = uiState();
float currentAcceleration = (*s->sm)["carControl"].getCarControl().getActuators().getAccel();
//float currentAcceleration = (*s->sm)["carState"].getCarState().getAEgo();
qreal gaugeSize = 140.0; // Diameter of the semicircle
qreal backgroundSize = gaugeSize * 1.4; // Background is 30% larger than the gague
qreal centerX = rectWidth / 17; // Center the gague horz
qreal centerY = rectHeight / 2 + 120; // Center the gauge vertical offset
// Draw a dark circular background
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(0, 0, 0, 80)); // Semi-transparent black
painter.drawEllipse(QPointF(centerX, centerY), backgroundSize / 2, backgroundSize / 2);
// Add a subtle border/glow around the background
QPen borderPen(QColor(0, 0, 0, 100));
borderPen.setWidth(2);
painter.setPen(borderPen);
painter.drawEllipse(QPointF(centerX, centerY), backgroundSize / 2 + 1, backgroundSize / 2 + 1);
// Draw the background semicircle
QPen semicirclePen(QColor(50, 50, 50)); // Dark gray for the semicircle
semicirclePen.setWidth(30); // Thicker pen for the semicircle
semicirclePen.setCapStyle(Qt::RoundCap);
painter.setPen(semicirclePen);
painter.drawArc(QRectF(centerX - gaugeSize / 2, centerY - gaugeSize / 2, gaugeSize, gaugeSize), 0, 180 * 16);
// Determine the color based on the magnitude of acceleration
QColor indicatorColor;
float absoluteAcceleration = std::abs(currentAcceleration);
if (absoluteAcceleration < 0.3) {
indicatorColor = QColor(23, 241, 66, 200); // Green for low acceleration
} else if (absoluteAcceleration < 0.6) {
indicatorColor = QColor(255, 166, 0, 200); // Yellow for moderate acceleration
} else {
indicatorColor = QColor(245, 0, 0, 200); // Red for high acceleration
}
// Calculate the span of the arc based on acceleration
int spanAngle = static_cast<int>(90 * absoluteAcceleration * 16); // Scale for better visibility
spanAngle = std::clamp(spanAngle, 0, 90 * 16); // Ensure the arc does not exceed 90 degrees
// Starting angle is at the middle of the semicircle (90 degrees)
int startAngle = 90 * 16;
// Draw the acceleration arc if there's significant acceleration
if (absoluteAcceleration > 0.01) {
semicirclePen.setColor(indicatorColor);
painter.setPen(semicirclePen);
QRectF arcRect(centerX - gaugeSize / 2, centerY - gaugeSize / 2, gaugeSize, gaugeSize);
// For positive acceleration, draw the arc to the left
if (currentAcceleration > 0) {
painter.drawArc(arcRect, startAngle, -spanAngle); // Negative span for left side
} else {
// For negative acceleration (deceleration), draw the arc to the right
painter.drawArc(arcRect, startAngle, spanAngle); // Positive span for right side
}
}
// Draw the text center
painter.setPen(Qt::white);
QFont font = painter.font();
font.setPixelSize(20);
font.setBold(true);
painter.setFont(font);
painter.drawText(QRectF(centerX - 50, centerY + 10, 100, 20), Qt::AlignCenter, "LONG");
}
void ModelRenderer::LateralFuel(QPainter &painter, int height, int width) {
qreal rectWidth = static_cast<qreal>(width);
qreal rectHeight = static_cast<qreal>(height);
UIState *s = uiState();
float currentLateral = (*s->sm)["carState"].getCarState().getSteeringAngleDeg();
qreal gaugeSize = 140.0; // Diameter of the semicircle
qreal backgroundSize = gaugeSize * 1.4; // Background is 30% larger than the gague
qreal centerX = rectWidth / 17; // Center the gague horz
qreal centerY = rectHeight / 2 - 120; // Center the gague vertical offset
// Draw a dark circular background
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(0, 0, 0, 80)); // Semi-transparent black
painter.drawEllipse(QPointF(centerX, centerY), backgroundSize / 2, backgroundSize / 2);
// Add a subtle border/glow around the background
QPen borderPen(QColor(0, 0, 0, 100));
borderPen.setWidth(2);
painter.setPen(borderPen);
painter.drawEllipse(QPointF(centerX, centerY), backgroundSize / 2 + 1, backgroundSize / 2 + 1);
// Draw the background semicircle
QPen semicirclePen(QColor(50, 50, 50)); // Dark gray for the semicircle
semicirclePen.setWidth(30); // Thicker pen for the semicircle
semicirclePen.setCapStyle(Qt::RoundCap);
painter.setPen(semicirclePen);
painter.drawArc(QRectF(centerX - gaugeSize / 2, centerY - gaugeSize / 2, gaugeSize, gaugeSize), 0, 180 * 16);
// Determine the color based on the magnitude of lateral force
QColor indicatorColor;
float absoluteLateral = std::abs(currentLateral); // TODO: its too choppy, something is wrong here
if (absoluteLateral < 5.0) { // Low lateral force
indicatorColor = QColor(23, 241, 66, 200); // Green
} else if (absoluteLateral < 15.0) { // Moderate lateral force
indicatorColor = QColor(255, 166, 0, 200); // Yellow
} else { // High lateral force
indicatorColor = QColor(245, 0, 0, 200); // Red
}
// Calculate the span of the arc based on lateral force
int spanAngle = static_cast<int>(90 * (absoluteLateral / 15.0) * 16); // Scale for better visibility
spanAngle = std::clamp(spanAngle, 0, 90 * 16); // Ensure the arc does not exceed 90 degrees
// Starting angle is at the middle of the semicircle (90 degrees)
int startAngle = 90 * 16;
// Draw the lateral arc if there's significant lateral force
if (absoluteLateral > 0.1) {
semicirclePen.setColor(indicatorColor);
painter.setPen(semicirclePen);
QRectF arcRect(centerX - gaugeSize / 2, centerY - gaugeSize / 2, gaugeSize, gaugeSize);
// For left turn (negative lateral), draw the arc on the left side
if (currentLateral < 0) {
painter.drawArc(arcRect, startAngle, -spanAngle); // Negative span for left side
}
// For right turn (positive lateral), draw the arc on the right side
else {
painter.drawArc(arcRect, startAngle, spanAngle); // Positive span for right side
}
}
// Draw the text in the center
painter.setPen(Qt::white);
QFont font = painter.font();
font.setPixelSize(20);
font.setBold(true);
painter.setFont(font);
painter.drawText(QRectF(centerX - 50, centerY + 10, 100, 20), Qt::AlignCenter, "LAT");
}
void ModelRenderer::drawLead(QPainter &painter, const cereal::RadarState::LeadData::Reader &lead_data,
const QPointF &vd, const QRect &surface_rect) {
const float speedBuff = 10.;

View File

@@ -23,10 +23,11 @@ private:
void update_leads(const cereal::RadarState::Reader &radar_state, const cereal::XYZTData::Reader &line);
void update_model(const cereal::ModelDataV2::Reader &model, const cereal::RadarState::LeadData::Reader &lead);
void drawLaneLines(QPainter &painter);
void drawPath(QPainter &painter, const cereal::ModelDataV2::Reader &model, int height);
void drawPath(QPainter &painter, const cereal::ModelDataV2::Reader &model, int height, int width);
void updatePathGradient(QLinearGradient &bg);
QColor blendColors(const QColor &start, const QColor &end, float t);
void LongFuel(QPainter &p, int height, int width);
void LateralFuel(QPainter &p, int height, int width);
bool longitudinal_control = false;
bool experimental_mode = false;
float blend_factor = 1.0f;

View File

@@ -18,7 +18,7 @@ UIStateSP::UIStateSP(QObject *parent) : UIState(parent) {
"modelV2", "controlsState", "liveCalibration", "radarState", "deviceState",
"pandaStates", "carParams", "driverMonitoringState", "carState", "driverStateV2",
"wideRoadCameraState", "managerState", "selfdriveState", "longitudinalPlan",
"modelManagerSP", "selfdriveStateSP", "longitudinalPlanSP",
"modelManagerSP", "selfdriveStateSP", "longitudinalPlanSP", "carControl",
});
// update timer

View File

@@ -124,23 +124,11 @@
<translation>وضع المناورة الطولية</translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation>التحكم الطولي openpilot (ألفا)</translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation>تحذير: التحكم الطولي في openpilot في المرحلة ألفا لهذه السيارة، وسيقوم بتعطيل مكابح الطوارئ الآلية (AEB).</translation>
</message>
<message>
<source>On this car, openpilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation>في هذه السيارة يعمل openpilot افتراضياً بالشكل المدمج في التحكم التكيفي في السرعة بدلاً من التحكم الطولي. قم بتمكين هذا الخيار من أجل الانتقال إلى التحكم الطولي. يوصى بتمكين الوضع التجريبي عند استخدام وضع التحكم الطولي ألفا من openpilot.</translation>
</message>
<message>
<source>Enable ADB</source>
<source>Enables or disables the github runner service.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<source>Enable GitHub runner service</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -152,13 +140,25 @@
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable GitHub runner service</source>
<source>Enable ADB</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enables or disables the github runner service.</source>
<source>ADB (Android Debug Bridge) allows connecting to your device over USB or over the network. See https://docs.comma.ai/how-to/connect-to-comma for more info.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="unfinished">التحكم الطولي openpilot (ألفا)</translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="unfinished">تحذير: التحكم الطولي في openpilot في المرحلة ألفا لهذه السيارة، وسيقوم بتعطيل مكابح الطوارئ الآلية (AEB).</translation>
</message>
<message>
<source>On this car, openpilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="unfinished">في هذه السيارة يعمل openpilot افتراضياً بالشكل المدمج في التحكم التكيفي في السرعة بدلاً من التحكم الطولي. قم بتمكين هذا الخيار من أجل الانتقال إلى التحكم الطولي. يوصى بتمكين الوضع التجريبي عند استخدام وضع التحكم الطولي ألفا من openpilot.</translation>
</message>
</context>
<context>
<name>DevicePanel</name>
@@ -313,14 +313,18 @@
<source>Training Guide</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Regulatory</source>
<translation type="unfinished">التنظيمية</translation>
</message>
<message>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished">إعادة التشغيل</translation>
</message>
<message>
<source>Regulatory</source>
<translation type="unfinished">التنظيمية</translation>
</message>
<message>
<source>Are you sure you want to review the training guide?</source>
<translation type="unfinished">هل أنت متأكد أنك تريد مراجعة دليل التدريب؟</translation>
@@ -333,10 +337,6 @@
<source>Select a language</source>
<translation type="unfinished">اختر لغة</translation>
</message>
<message>
<source>Reboot</source>
<translation type="unfinished">إعادة التشغيل</translation>
</message>
<message>
<source>Power Off</source>
<translation type="unfinished">إيقاف التشغيل</translation>
@@ -374,27 +374,27 @@
<name>DriveStats</name>
<message>
<source>Drives</source>
<translation type="unfinished"></translation>
<translation>القيادة</translation>
</message>
<message>
<source>Hours</source>
<translation type="unfinished"></translation>
<translation>ساعات</translation>
</message>
<message>
<source>ALL TIME</source>
<translation type="unfinished"></translation>
<translation>كامل الوقت</translation>
</message>
<message>
<source>PAST WEEK</source>
<translation type="unfinished"></translation>
<translation>الأسبوع الماضي</translation>
</message>
<message>
<source>KM</source>
<translation type="unfinished"></translation>
<translation>كم</translation>
</message>
<message>
<source>Miles</source>
<translation type="unfinished"></translation>
<translation>ميل</translation>
</message>
</context>
<context>
@@ -461,10 +461,6 @@
<source>Toggle with Main Cruise</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unified Engagement Mode (UEM)</source>
<translation type="unfinished"></translation>
@@ -496,6 +492,10 @@ Remain Active: ALC will remain active even after the brake pedal is pressed.
Pause Steering: ALC will be paused after the brake pedal is manually pressed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Note: For vehicles without LFA/LKAS button, disabling this will prevent lateral control engagement.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MultiOptionDialog</name>
@@ -529,6 +529,10 @@ Pause Steering: ALC will be paused after the brake pedal is manually pressed.</s
</context>
<context>
<name>NetworkingSP</name>
<message>
<source>Advanced</source>
<translation type="obsolete">متقدم</translation>
</message>
<message>
<source>Scan</source>
<translation type="unfinished"></translation>
@@ -649,7 +653,7 @@ Pause Steering: ALC will be paused after the brake pedal is manually pressed.</s
</message>
<message>
<source>Please connect to Wi-Fi to complete initial pairing</source>
<translation>يرجى الاتصال بشبكة الواي فاي لإكمال الاقتران الأولي</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -667,11 +671,11 @@ Pause Steering: ALC will be paused after the brake pedal is manually pressed.</s
<name>ParamControlSP</name>
<message>
<source>Enable</source>
<translation type="unfinished">تمكين</translation>
<translation>تمكين</translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">إلغاء</translation>
<translation>إلغاء</translation>
</message>
</context>
<context>
@@ -895,30 +899,34 @@ This may take up to a minute.</source>
<name>SettingsWindowSP</name>
<message>
<source>×</source>
<translation type="unfinished">×</translation>
<translation>×</translation>
</message>
<message>
<source>Device</source>
<translation type="unfinished">الجهاز</translation>
<translation>الجهاز</translation>
</message>
<message>
<source>Network</source>
<translation type="unfinished">الشبكة</translation>
</message>
<message>
<source>sunnylink</source>
<translation type="unfinished"></translation>
<translation>الشبكة</translation>
</message>
<message>
<source>Toggles</source>
<translation type="unfinished">المثبتتات</translation>
<translation>المثبتتات</translation>
</message>
<message>
<source>Software</source>
<translation type="unfinished">البرنامج</translation>
<translation>البرنامج</translation>
</message>
<message>
<source>Developer</source>
<translation>المطور</translation>
</message>
<message>
<source>sunnypilot</source>
<translation>sunnypilot</translation>
</message>
<message>
<source>sunnylink</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -929,10 +937,6 @@ This may take up to a minute.</source>
<source>Vehicle</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Developer</source>
<translation type="unfinished">المطور</translation>
</message>
</context>
<context>
<name>Setup</name>
@@ -1223,16 +1227,32 @@ This may take up to a minute.</source>
</context>
<context>
<name>SoftwarePanelSP</name>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SELECT</source>
<translation type="unfinished">اختيار</translation>
</message>
<message>
<source>No custom model selected!</source>
<source>Reset Calibration</source>
<translation type="unfinished">إعادة ضبط المعايرة</translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">متابعة</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Current Model</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1251,6 +1271,22 @@ This may take up to a minute.</source>
<source>Downloading %1 model [%2]... (%3%)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] %3</source>
<translation type="unfinished"></translation>
@@ -1267,24 +1303,12 @@ This may take up to a minute.</source>
<source>from cache</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 model [%2] pending...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fetching models...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Use Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select a Model</source>
<source>No custom model selected!</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1292,7 +1316,11 @@ This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Model download has started in the background.</source>
<source>Cancel</source>
<translation type="unfinished">إلغاء</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1303,30 +1331,6 @@ This may take up to a minute.</source>
<source>Would you like to do that now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reset Calibration</source>
<translation type="unfinished">إعادة ضبط المعايرة</translation>
</message>
<message>
<source>Driving Model Selector</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning: You are on a metered connection!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue</source>
<translation type="unfinished">متابعة</translation>
</message>
<message>
<source>on Metered</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">إلغاء</translation>
</message>
</context>
<context>
<name>SshControl</name>
@@ -1385,11 +1389,11 @@ This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>🎉Welcome back! We&apos;re excited to see you&apos;ve enabled sunnylink again! 🚀</source>
<translation type="unfinished"></translation>
<source>N/A</source>
<translation type="unfinished">غير متاح</translation>
</message>
<message>
<source>👋Not going to lie, it&apos;s sad to see you disabled sunnylink 😢, but we&apos;ll be here when you&apos;re ready to come back 🎉.</source>
<source>🎉Welcome back! We&apos;re excited to see you&apos;ve enabled sunnylink again! 🚀</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1397,12 +1401,16 @@ This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>N/A</source>
<translation type="unfinished">غير متاح</translation>
<source>👋Not going to lie, it&apos;s sad to see you disabled sunnylink 😢, but we&apos;ll be here when you&apos;re ready to come back 🎉.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SunnypilotPanel</name>
<message>
<source>Customize MADS</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Modular Assistive Driving System (MADS)</source>
<translation type="unfinished"></translation>
@@ -1411,10 +1419,6 @@ This may take up to a minute.</source>
<source>Enable the beloved MADS feature. Disable toggle to revert back to stock openpilot engagement/disengagement.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize MADS</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TermsPage</name>
@@ -1477,6 +1481,18 @@ This may take up to a minute.</source>
<source>When enabled, pressing the accelerator pedal will disengage openpilot.</source>
<translation>عند تمكين هذه الميزة، فإن الضغط على دواسة الوقود سيؤدي إلى فك ارتباط openpilot.</translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="vanished">التحكم الطولي openpilot (ألفا)</translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="vanished">تحذير: التحكم الطولي في openpilot في المرحلة ألفا لهذه السيارة، وسيقوم بتعطيل مكابح الطوارئ الآلية (AEB).</translation>
</message>
<message>
<source>On this car, openpilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="vanished">في هذه السيارة يعمل openpilot افتراضياً بالشكل المدمج في التحكم التكيفي في السرعة بدلاً من التحكم الطولي. قم بتمكين هذا الخيار من أجل الانتقال إلى التحكم الطولي. يوصى بتمكين الوضع التجريبي عند استخدام وضع التحكم الطولي ألفا من openpilot.</translation>
</message>
<message>
<source>Experimental Mode</source>
<translation>الوضع التجريبي</translation>
@@ -1561,6 +1577,71 @@ This may take up to a minute.</source>
<source>Enable &lt;b&gt;FIREHOSE Mode&lt;/b&gt; to get your driving data in the training set.&lt;br&gt;&lt;br&gt;Follow these steps to get your device ready:&lt;br&gt; 1. Bring your device inside and connect to a good USB-C adapter&lt;br&gt; 2. Connect to Wi-Fi&lt;br&gt; 3. Enable this toggle&lt;br&gt; 4. Leave it connected for at least 30 minutes&lt;br&gt;&lt;br&gt;This toggle turns off once you restart your device. Repeat once a week for maximum effectiveness.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sport</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Eco</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Acceleration Personality</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these acceleration personality within Onroad Settings on the driving screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Toyota Drive Mode Button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sunnypilot will link the Acceleration Personality to the car&apos;s physical drive mode selector.
Reboot Required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Very fast prius</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When prius goes faster then sunnys car :) vroom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Auto Brake Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>umm auto brake hold?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Enhanced BSM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>like blind spot monitoring but better?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: custom tune</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>idk something gas and brake</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>

View File

@@ -525,6 +525,10 @@ Pause Steering: ALC will be paused after the brake pedal is manually pressed.</s
</context>
<context>
<name>NetworkingSP</name>
<message>
<source>Advanced</source>
<translation type="obsolete">Erweitert</translation>
</message>
<message>
<source>Scan</source>
<translation type="unfinished"></translation>
@@ -1545,6 +1549,71 @@ This may take up to a minute.</source>
<source>Enable &lt;b&gt;FIREHOSE Mode&lt;/b&gt; to get your driving data in the training set.&lt;br&gt;&lt;br&gt;Follow these steps to get your device ready:&lt;br&gt; 1. Bring your device inside and connect to a good USB-C adapter&lt;br&gt; 2. Connect to Wi-Fi&lt;br&gt; 3. Enable this toggle&lt;br&gt; 4. Leave it connected for at least 30 minutes&lt;br&gt;&lt;br&gt;This toggle turns off once you restart your device. Repeat once a week for maximum effectiveness.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sport</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Eco</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Acceleration Personality</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these acceleration personality within Onroad Settings on the driving screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Toyota Drive Mode Button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sunnypilot will link the Acceleration Personality to the car&apos;s physical drive mode selector.
Reboot Required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Very fast prius</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When prius goes faster then sunnys car :) vroom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Auto Brake Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>umm auto brake hold?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Enhanced BSM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>like blind spot monitoring but better?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: custom tune</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>idk something gas and brake</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>

View File

@@ -1429,6 +1429,18 @@ Esto puede tardar un minuto.</translation>
<source>Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation>Utilice el sistema openpilot para acceder a un autocrucero adaptativo y asistencia al conductor para mantenerse en el carril. Se requiere su atención en todo momento para utilizar esta función. Cambiar esta configuración solo tendrá efecto con el auto apagado.</translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="vanished">Control longitudinal de openpilot (fase experimental)</translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="vanished">AVISO: el control longitudinal de openpilot está en fase experimental para este automóvil y desactivará el Frenado Automático de Emergencia (AEB).</translation>
</message>
<message>
<source>On this car, openpilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="vanished">En este automóvil, openpilot se configura de manera predeterminada con el Autocrucero Adaptativo (ACC) incorporado en el automóvil en lugar del control longitudinal de openpilot. Habilita esta opción para cambiar al control longitudinal de openpilot. Se recomienda activar el modo experimental al habilitar el control longitudinal de openpilot (aún en fase experimental).</translation>
</message>
<message>
<source>Experimental Mode</source>
<translation>Modo Experimental</translation>
@@ -1545,6 +1557,71 @@ Esto puede tardar un minuto.</translation>
<source>Enable &lt;b&gt;FIREHOSE Mode&lt;/b&gt; to get your driving data in the training set.&lt;br&gt;&lt;br&gt;Follow these steps to get your device ready:&lt;br&gt; 1. Bring your device inside and connect to a good USB-C adapter&lt;br&gt; 2. Connect to Wi-Fi&lt;br&gt; 3. Enable this toggle&lt;br&gt; 4. Leave it connected for at least 30 minutes&lt;br&gt;&lt;br&gt;This toggle turns off once you restart your device. Repeat once a week for maximum effectiveness.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sport</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Eco</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Acceleration Personality</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these acceleration personality within Onroad Settings on the driving screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Toyota Drive Mode Button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sunnypilot will link the Acceleration Personality to the car&apos;s physical drive mode selector.
Reboot Required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Very fast prius</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When prius goes faster then sunnys car :) vroom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Auto Brake Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>umm auto brake hold?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Enhanced BSM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>like blind spot monitoring but better?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: custom tune</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>idk something gas and brake</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>

View File

@@ -1545,6 +1545,71 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
<source>Enable &lt;b&gt;FIREHOSE Mode&lt;/b&gt; to get your driving data in the training set.&lt;br&gt;&lt;br&gt;Follow these steps to get your device ready:&lt;br&gt; 1. Bring your device inside and connect to a good USB-C adapter&lt;br&gt; 2. Connect to Wi-Fi&lt;br&gt; 3. Enable this toggle&lt;br&gt; 4. Leave it connected for at least 30 minutes&lt;br&gt;&lt;br&gt;This toggle turns off once you restart your device. Repeat once a week for maximum effectiveness.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sport</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Eco</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Acceleration Personality</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these acceleration personality within Onroad Settings on the driving screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Toyota Drive Mode Button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sunnypilot will link the Acceleration Personality to the car&apos;s physical drive mode selector.
Reboot Required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Very fast prius</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When prius goes faster then sunnys car :) vroom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Auto Brake Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>umm auto brake hold?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Enhanced BSM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>like blind spot monitoring but better?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: custom tune</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>idk something gas and brake</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>

View File

@@ -1541,6 +1541,71 @@ This may take up to a minute.</source>
<source>Enable &lt;b&gt;FIREHOSE Mode&lt;/b&gt; to get your driving data in the training set.&lt;br&gt;&lt;br&gt;Follow these steps to get your device ready:&lt;br&gt; 1. Bring your device inside and connect to a good USB-C adapter&lt;br&gt; 2. Connect to Wi-Fi&lt;br&gt; 3. Enable this toggle&lt;br&gt; 4. Leave it connected for at least 30 minutes&lt;br&gt;&lt;br&gt;This toggle turns off once you restart your device. Repeat once a week for maximum effectiveness.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sport</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Eco</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Acceleration Personality</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these acceleration personality within Onroad Settings on the driving screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Toyota Drive Mode Button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sunnypilot will link the Acceleration Personality to the car&apos;s physical drive mode selector.
Reboot Required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Very fast prius</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When prius goes faster then sunnys car :) vroom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Auto Brake Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>umm auto brake hold?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Enhanced BSM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>like blind spot monitoring but better?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: custom tune</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>idk something gas and brake</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>

View File

@@ -524,6 +524,10 @@ Pause Steering: ALC will be paused after the brake pedal is manually pressed.</s
</context>
<context>
<name>NetworkingSP</name>
<message>
<source>Advanced</source>
<translation type="obsolete"> </translation>
</message>
<message>
<source>Scan</source>
<translation type="unfinished"></translation>
@@ -1481,6 +1485,18 @@ This may take up to a minute.</source>
<source>openpilot longitudinal control may come in a future update.</source>
<translation>openpilot .</translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="vanished">openpilot ()</translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="vanished">경고: openpilot (AEB) .</translation>
</message>
<message>
<source>On this car, openpilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="vanished"> openpilot ACC로 . openpilot의 . openpilot .</translation>
</message>
<message>
<source>Aggressive</source>
<translation></translation>
@@ -1541,6 +1557,71 @@ This may take up to a minute.</source>
<source>Enable &lt;b&gt;FIREHOSE Mode&lt;/b&gt; to get your driving data in the training set.&lt;br&gt;&lt;br&gt;Follow these steps to get your device ready:&lt;br&gt; 1. Bring your device inside and connect to a good USB-C adapter&lt;br&gt; 2. Connect to Wi-Fi&lt;br&gt; 3. Enable this toggle&lt;br&gt; 4. Leave it connected for at least 30 minutes&lt;br&gt;&lt;br&gt;This toggle turns off once you restart your device. Repeat once a week for maximum effectiveness.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sport</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Eco</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Acceleration Personality</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these acceleration personality within Onroad Settings on the driving screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Toyota Drive Mode Button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sunnypilot will link the Acceleration Personality to the car&apos;s physical drive mode selector.
Reboot Required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Very fast prius</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When prius goes faster then sunnys car :) vroom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Auto Brake Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>umm auto brake hold?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Enhanced BSM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>like blind spot monitoring but better?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: custom tune</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>idk something gas and brake</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>

View File

@@ -525,6 +525,10 @@ Pause Steering: ALC will be paused after the brake pedal is manually pressed.</s
</context>
<context>
<name>NetworkingSP</name>
<message>
<source>Advanced</source>
<translation type="obsolete">Avançado</translation>
</message>
<message>
<source>Scan</source>
<translation type="unfinished"></translation>
@@ -1485,6 +1489,18 @@ Isso pode levar até um minuto.</translation>
<source>openpilot longitudinal control may come in a future update.</source>
<translation>O controle longitudinal openpilot poderá vir em uma atualização futura.</translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="vanished">Controle Longitudinal openpilot (Embrionário)</translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="vanished">AVISO: o controle longitudinal openpilot está em estado embrionário para este carro e desativará a Frenagem Automática de Emergência (AEB).</translation>
</message>
<message>
<source>On this car, openpilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="vanished">Neste carro, o openpilot tem como padrão o ACC embutido do carro em vez do controle longitudinal do openpilot. Habilite isso para alternar para o controle longitudinal openpilot. Recomenda-se ativar o modo Experimental ao ativar o embrionário controle longitudinal openpilot.</translation>
</message>
<message>
<source>Aggressive</source>
<translation>Disputa</translation>
@@ -1545,6 +1561,71 @@ Isso pode levar até um minuto.</translation>
<source>Enable &lt;b&gt;FIREHOSE Mode&lt;/b&gt; to get your driving data in the training set.&lt;br&gt;&lt;br&gt;Follow these steps to get your device ready:&lt;br&gt; 1. Bring your device inside and connect to a good USB-C adapter&lt;br&gt; 2. Connect to Wi-Fi&lt;br&gt; 3. Enable this toggle&lt;br&gt; 4. Leave it connected for at least 30 minutes&lt;br&gt;&lt;br&gt;This toggle turns off once you restart your device. Repeat once a week for maximum effectiveness.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sport</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Eco</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Acceleration Personality</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these acceleration personality within Onroad Settings on the driving screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Toyota Drive Mode Button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sunnypilot will link the Acceleration Personality to the car&apos;s physical drive mode selector.
Reboot Required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Very fast prius</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When prius goes faster then sunnys car :) vroom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Auto Brake Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>umm auto brake hold?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Enhanced BSM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>like blind spot monitoring but better?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: custom tune</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>idk something gas and brake</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>

View File

@@ -524,6 +524,10 @@ Pause Steering: ALC will be paused after the brake pedal is manually pressed.</s
</context>
<context>
<name>NetworkingSP</name>
<message>
<source>Advanced</source>
<translation type="obsolete"></translation>
</message>
<message>
<source>Scan</source>
<translation type="unfinished"></translation>
@@ -1481,6 +1485,18 @@ This may take up to a minute.</source>
<source>openpilot longitudinal control may come in a future update.</source>
<translation>/ openpilot </translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="vanished">/ openpilot (Alpha)</translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="vanished">คำเตือน: การควบคุมการเร่ง/ openpilot alpha (AEB) </translation>
</message>
<message>
<source>On this car, openpilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="vanished"> openpilot / ACC openpilot openpilot / openpilot / alpha</translation>
</message>
<message>
<source>Aggressive</source>
<translation></translation>
@@ -1541,6 +1557,71 @@ This may take up to a minute.</source>
<source>Enable &lt;b&gt;FIREHOSE Mode&lt;/b&gt; to get your driving data in the training set.&lt;br&gt;&lt;br&gt;Follow these steps to get your device ready:&lt;br&gt; 1. Bring your device inside and connect to a good USB-C adapter&lt;br&gt; 2. Connect to Wi-Fi&lt;br&gt; 3. Enable this toggle&lt;br&gt; 4. Leave it connected for at least 30 minutes&lt;br&gt;&lt;br&gt;This toggle turns off once you restart your device. Repeat once a week for maximum effectiveness.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sport</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Eco</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Acceleration Personality</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these acceleration personality within Onroad Settings on the driving screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Toyota Drive Mode Button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sunnypilot will link the Acceleration Personality to the car&apos;s physical drive mode selector.
Reboot Required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Very fast prius</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When prius goes faster then sunnys car :) vroom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Auto Brake Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>umm auto brake hold?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Enhanced BSM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>like blind spot monitoring but better?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: custom tune</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>idk something gas and brake</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>

View File

@@ -524,6 +524,10 @@ Pause Steering: ALC will be paused after the brake pedal is manually pressed.</s
</context>
<context>
<name>NetworkingSP</name>
<message>
<source>Advanced</source>
<translation type="obsolete">Gelişmiş Seçenekler</translation>
</message>
<message>
<source>Scan</source>
<translation type="unfinished"></translation>
@@ -1539,6 +1543,71 @@ This may take up to a minute.</source>
<source>Enable &lt;b&gt;FIREHOSE Mode&lt;/b&gt; to get your driving data in the training set.&lt;br&gt;&lt;br&gt;Follow these steps to get your device ready:&lt;br&gt; 1. Bring your device inside and connect to a good USB-C adapter&lt;br&gt; 2. Connect to Wi-Fi&lt;br&gt; 3. Enable this toggle&lt;br&gt; 4. Leave it connected for at least 30 minutes&lt;br&gt;&lt;br&gt;This toggle turns off once you restart your device. Repeat once a week for maximum effectiveness.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sport</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Eco</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Acceleration Personality</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these acceleration personality within Onroad Settings on the driving screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Toyota Drive Mode Button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sunnypilot will link the Acceleration Personality to the car&apos;s physical drive mode selector.
Reboot Required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Very fast prius</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When prius goes faster then sunnys car :) vroom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Auto Brake Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>umm auto brake hold?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Enhanced BSM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>like blind spot monitoring but better?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: custom tune</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>idk something gas and brake</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>

View File

@@ -524,6 +524,10 @@ Pause Steering: ALC will be paused after the brake pedal is manually pressed.</s
</context>
<context>
<name>NetworkingSP</name>
<message>
<source>Advanced</source>
<translation type="obsolete"></translation>
</message>
<message>
<source>Scan</source>
<translation type="unfinished"></translation>
@@ -1481,6 +1485,18 @@ This may take up to a minute.</source>
<source>openpilot longitudinal control may come in a future update.</source>
<translation>openpilot纵向控制可能会在未来的更新中提供</translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="vanished">openpilot纵向控制Alpha </translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="vanished"> openpilot Alpha版本使AEB</translation>
</message>
<message>
<source>On this car, openpilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="vanished">openpilot 使ACC openpilot openpilot openpilot Alpha Experimental mode</translation>
</message>
<message>
<source>Aggressive</source>
<translation></translation>
@@ -1541,6 +1557,71 @@ This may take up to a minute.</source>
<source>Enable &lt;b&gt;FIREHOSE Mode&lt;/b&gt; to get your driving data in the training set.&lt;br&gt;&lt;br&gt;Follow these steps to get your device ready:&lt;br&gt; 1. Bring your device inside and connect to a good USB-C adapter&lt;br&gt; 2. Connect to Wi-Fi&lt;br&gt; 3. Enable this toggle&lt;br&gt; 4. Leave it connected for at least 30 minutes&lt;br&gt;&lt;br&gt;This toggle turns off once you restart your device. Repeat once a week for maximum effectiveness.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sport</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Eco</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Acceleration Personality</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these acceleration personality within Onroad Settings on the driving screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Toyota Drive Mode Button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sunnypilot will link the Acceleration Personality to the car&apos;s physical drive mode selector.
Reboot Required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Very fast prius</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When prius goes faster then sunnys car :) vroom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Auto Brake Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>umm auto brake hold?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Enhanced BSM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>like blind spot monitoring but better?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: custom tune</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>idk something gas and brake</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>

View File

@@ -524,6 +524,10 @@ Pause Steering: ALC will be paused after the brake pedal is manually pressed.</s
</context>
<context>
<name>NetworkingSP</name>
<message>
<source>Advanced</source>
<translation type="obsolete"></translation>
</message>
<message>
<source>Scan</source>
<translation type="unfinished"></translation>
@@ -1481,6 +1485,18 @@ This may take up to a minute.</source>
<source>openpilot longitudinal control may come in a future update.</source>
<translation>openpilot </translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation type="vanished">openpilot (Alpha )</translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation type="vanished"> openpilot Alpha 使AEB</translation>
</message>
<message>
<source>On this car, openpilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation type="vanished">openpilot 使ACC openpilot openpilot openpilot Alpha Experimental mode</translation>
</message>
<message>
<source>Aggressive</source>
<translation></translation>
@@ -1541,6 +1557,71 @@ This may take up to a minute.</source>
<source>Enable &lt;b&gt;FIREHOSE Mode&lt;/b&gt; to get your driving data in the training set.&lt;br&gt;&lt;br&gt;Follow these steps to get your device ready:&lt;br&gt; 1. Bring your device inside and connect to a good USB-C adapter&lt;br&gt; 2. Connect to Wi-Fi&lt;br&gt; 3. Enable this toggle&lt;br&gt; 4. Leave it connected for at least 30 minutes&lt;br&gt;&lt;br&gt;This toggle turns off once you restart your device. Repeat once a week for maximum effectiveness.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sport</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Eco</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stock</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Acceleration Personality</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Normal is recommended. In sport mode, sunnypilot will provide aggressive acceleration for a dynamic driving experience. In eco mode, sunnypilot will apply smoother and more relaxed acceleration. On supported cars, you can cycle through these acceleration personality within Onroad Settings on the driving screen.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Toyota Drive Mode Button</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Sunnypilot will link the Acceleration Personality to the car&apos;s physical drive mode selector.
Reboot Required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Very fast prius</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When prius goes faster then sunnys car :) vroom</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Auto Brake Hold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>umm auto brake hold?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: Enhanced BSM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>like blind spot monitoring but better?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota: custom tune</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>idk something gas and brake</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Updater</name>

View File

@@ -173,8 +173,8 @@ void Device::updateBrightness(const UIState &s) {
clipped_brightness = std::pow((clipped_brightness + 16.0) / 116.0, 3.0);
}
// Scale back to 10% to 100%
clipped_brightness = std::clamp(100.0f * clipped_brightness, 10.0f, 100.0f);
// Scale back to 5% to 100%
clipped_brightness = std::clamp(100.0f * clipped_brightness, 5.0f, 100.0f);
}
int brightness = brightness_filter.update(clipped_brightness);

View File

@@ -60,6 +60,7 @@ typedef struct UIScene {
cereal::PandaState::PandaType pandaType;
cereal::LongitudinalPersonality personality;
cereal::LongitudinalPlanSP::AccelerationPersonality accel_personality;
float light_sensor = -1;
bool started, ignition, is_metric;

View File

@@ -0,0 +1,95 @@
# The MIT License
#
# Copyright (c) 2019-, Rick Lan, dragonpilot community, and a number of other contributors.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# Last updated: February 20, 2025
from cereal import custom
from openpilot.common.numpy_fast import interp
from openpilot.common.realtime import DT_MDL
from openpilot.common.params import Params
AccelPersonality = custom.LongitudinalPlanSP.AccelerationPersonality
# Accel personality by @arne182 modified by cgw and kumar
_DP_CRUISE_MIN_V_ECO = [-0.01, -0.01, -0.10, -1.2]
_DP_CRUISE_MIN_V_NORMAL = [-0.015, -0.015, -0.12, -1.21]
_DP_CRUISE_MIN_V_SPORT = [-0.02, -0.02, -0.14, -1.22]
_DP_CRUISE_MIN_BP = [0., 2.0, 11, 25.]
_DP_CRUISE_MAX_V_ECO = [2.50, 1.80, 1.58, 1.45, 0.82, .532, .432, .32, .28, .085]
_DP_CRUISE_MAX_V_NORMAL = [2.50, 1.90, 1.72, 1.65, 1.10, .75, .61, .50, .41, .26]
_DP_CRUISE_MAX_V_SPORT = [2.50, 2.00, 1.95, 1.90, 1.60, 1.06, .74, .62, .54, .4]
_DP_CRUISE_MAX_BP = [0., 1., 6., 8., 11., 16, 20., 25., 30., 55.]
class AccelController:
def __init__(self):
self._params = Params()
self._personality = AccelPersonality.stock
self._frame = 0
def _read_params(self):
if self._frame % int(1. / DT_MDL) == 0:
personality_str = self._params.get("AccelPersonality", encoding='utf-8')
if personality_str is not None:
personality_int = int(personality_str)
if personality_int in [AccelPersonality.stock, AccelPersonality.normal, AccelPersonality.eco, AccelPersonality.sport]:
self._personality = personality_int
def _dp_calc_cruise_accel_limits(self, v_ego: float) -> tuple[float, float]:
self._read_params() # Ensure personality updates
# if self._personality == AccelPersonality.eco:
# min_v = _DP_CRUISE_MIN_V_ECO
# max_v = _DP_CRUISE_MAX_V_ECO
# elif self._personality == AccelPersonality.sport:
# min_v = _DP_CRUISE_MIN_V_SPORT
# max_v = _DP_CRUISE_MAX_V_SPORT
# else:
# min_v = _DP_CRUISE_MIN_V_NORMAL
# max_v = _DP_CRUISE_MAX_V_NORMAL
if self._personality == AccelPersonality.eco:
max_v = _DP_CRUISE_MAX_V_ECO
#print("eco")
elif self._personality == AccelPersonality.sport:
max_v = _DP_CRUISE_MAX_V_SPORT
#print("sport")
else:
max_v = _DP_CRUISE_MAX_V_NORMAL
#print("normal")
# a_cruise_min = interp(v_ego, _DP_CRUISE_MIN_BP, min_v)
a_cruise_max = interp(v_ego, _DP_CRUISE_MAX_BP, max_v)
return a_cruise_max
def get_accel_limits(self, v_ego: float, accel_limits: list[float]) -> tuple[float, float]:
self._read_params()
return accel_limits if self._personality == AccelPersonality.stock else self._dp_calc_cruise_accel_limits(v_ego)
def is_enabled(self, accel_personality: int = AccelPersonality.stock) -> bool:
self._personality = accel_personality
return self._personality != AccelPersonality.stock
def update(self):
self._frame += 1

View File

@@ -2,12 +2,13 @@ class WMACConstants:
LEAD_WINDOW_SIZE = 5
LEAD_PROB = 0.5
SLOW_DOWN_WINDOW_SIZE = 4
SLOW_DOWN_WINDOW_SIZE = 5
SLOW_DOWN_PROB = 0.6
SLOW_DOWN_BP = [0., 10., 20., 30., 40., 50., 55., 60.]
#SLOW_DOWN_DIST = [25., 38., 55., 75., 95., 115., 130., 150.]
SLOW_DOWN_DIST = [30., 45., 60., 80., 100., 120., 135., 150.]
SLOW_DOWN_DIST = [25., 38., 55., 75., 95., 115., 130., 150.]
#SLOW_DOWN_DIST = [30., 45., 60., 80., 100., 120., 135., 150.]
#SLOW_DOWN_DIST = [35., 50., 65., 85., 105., 125., 140., 155.]
SLOWNESS_WINDOW_SIZE = 12
SLOWNESS_PROB = 0.5
@@ -23,4 +24,4 @@ class WMACConstants:
class SNG_State:
off = 0
stopped = 1
going = 2
going = 2

View File

@@ -164,7 +164,7 @@ class DynamicExperimentalController:
"""
Adapts the slow-down threshold based on vehicle speed and recent behavior.
"""
slowdown_scaling_factor: float = (1.0 + 0.05 * np.log(1 + len(self._slow_down_gmac.data)))
slowdown_scaling_factor: float = (1.0 + 0.03 * np.log(1 + len(self._slow_down_gmac.data)))
adaptive_threshold: float = float(
interp(self._v_ego_kph, WMACConstants.SLOW_DOWN_BP, WMACConstants.SLOW_DOWN_DIST) * slowdown_scaling_factor
)
@@ -387,4 +387,4 @@ class DynamicExperimentalController:
self._active = sm['selfdriveState'].experimentalMode and self._enabled
self._frame += 1
self._frame += 1

View File

@@ -8,13 +8,14 @@ See the LICENSE.md file in the root directory for more details.
from cereal import messaging, custom
from opendbc.car import structs
from openpilot.sunnypilot.selfdrive.controls.lib.dec.dec import DynamicExperimentalController
from openpilot.sunnypilot.selfdrive.controls.lib.accel_personality.accel_controller import AccelController
DecState = custom.LongitudinalPlanSP.DynamicExperimentalControl.DynamicExperimentalControlState
class LongitudinalPlannerSP:
def __init__(self, CP: structs.CarParams, mpc):
self.dec = DynamicExperimentalController(CP, mpc)
self.accel_controller = AccelController()
def get_mpc_mode(self) -> str | None:
if not self.dec.active():
@@ -24,6 +25,7 @@ class LongitudinalPlannerSP:
def update(self, sm: messaging.SubMaster) -> None:
self.dec.update(sm)
self.accel_controller.update()
def publish_longitudinal_plan_sp(self, sm: messaging.SubMaster, pm: messaging.PubMaster) -> None:
plan_sp_send = messaging.new_message('longitudinalPlanSP')

View File

@@ -5,7 +5,7 @@ import signal
import sys
import traceback
from cereal import log
from cereal import log, custom
import cereal.messaging as messaging
import openpilot.system.sentry as sentry
from openpilot.common.params import Params, ParamKeyType
@@ -49,7 +49,14 @@ def manager_init() -> None:
("MadsPauseLateralOnBrake", "0"),
("MadsUnifiedEngagementMode", "1"),
("ModelManager_LastSyncTime", "0"),
("ModelManager_ModelsCache", "")
("ModelManager_ModelsCache", ""),
("ToyotaAutoHold", "0"),
("ToyotaEnhancedBsm", "0"),
("ToyotaTSS2Long", "0"),
("FastTakeOff", "0"),
("AccelPersonality", str(custom.LongitudinalPlanSP.AccelerationPersonality.stock)),
("ToyotaDriveMode", "0"),
]
if params.get_bool("RecordFrontLock"):