From 8304a7f77b2bbbb0f2dd8eac42d8be89ccee2580 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Tue, 21 Apr 2026 22:38:23 -0500 Subject: [PATCH] UI --- selfdrive/ui/mici/onroad/model_renderer.py | 45 +++++++++++----------- selfdrive/ui/onroad/model_renderer.py | 29 +++++--------- 2 files changed, 32 insertions(+), 42 deletions(-) diff --git a/selfdrive/ui/mici/onroad/model_renderer.py b/selfdrive/ui/mici/onroad/model_renderer.py index 8bb9fce27..a993bb409 100644 --- a/selfdrive/ui/mici/onroad/model_renderer.py +++ b/selfdrive/ui/mici/onroad/model_renderer.py @@ -21,7 +21,14 @@ MIN_DRAW_DISTANCE = 10.0 MAX_DRAW_DISTANCE = 100.0 RAINBOW_GRADIENT_COLOR_COUNT = 19 RAINBOW_SCROLL_SPEED_DEG_PER_SEC = 60.0 -STOCK_LINE_GREEN = rl.Color(0, 255, 0, 255) +ACCEL_PATH_MIN_LIGHTNESS = 0.78 +ACCEL_PATH_MIN_SATURATION = 0.50 +STOCK_LANE_LINES_COLOR = rl.Color(255, 255, 255, 255) +LANE_LINE_COLORS = { + UIStatus.DISENGAGED: rl.Color(200, 200, 200, 255), + UIStatus.OVERRIDE: rl.Color(255, 255, 255, 255), + UIStatus.ENGAGED: rl.Color(0, 255, 64, 255), +} THROTTLE_COLORS = [ rl.Color(13, 248, 122, 102), # HSLF(148/360, 0.94, 0.51, 0.4) @@ -259,11 +266,6 @@ class ModelRenderer(Widget): self._exp_gradient = self._build_rainbow_gradient(gradient_bottom, gradient_top) return - custom_theme_selected = (self._params.get("ColorScheme", encoding="utf-8", default="stock") or "stock").lower() != "stock" - path_color = None - if custom_theme_selected or get_param_color(self._params, "PathColor", 255) is not None: - path_color = get_visual_color(self._params, "PathColor", "Path", rl.Color(48, 255, 156, 255)) - segment_colors = [] gradient_stops = [] @@ -278,19 +280,11 @@ class ModelRenderer(Widget): # Calculate color based on acceleration (0 is bottom, 1 is top) lin_grad_point = 1 - (track_y - self._rect.y) / self._rect.height - if path_color is not None and abs(self._acceleration_x[i]) < 0.25: - alpha = np.interp(lin_grad_point, [0.0, 1.0], [path_color.a, path_color.a * 0.10]) - color = with_alpha(path_color, int(alpha)) - gradient_stops.append(lin_grad_point) - segment_colors.append(color) - i += 1 + (1 if (i + 2) < max_len else 0) - continue - # speed up: 120, slow down: 0 path_hue = np.clip(60 + self._acceleration_x[i] * 35, 0, 120) - - saturation = min(abs(self._acceleration_x[i] * 1.5), 1) - lightness = np.interp(saturation, [0.0, 1.0], [0.95, 0.62]) + accel_magnitude = np.clip(abs(self._acceleration_x[i]) * 1.5, 0.0, 1.0) + saturation = np.interp(accel_magnitude, [0.0, 1.0], [ACCEL_PATH_MIN_SATURATION, 1.0]) + lightness = np.interp(accel_magnitude, [0.0, 1.0], [ACCEL_PATH_MIN_LIGHTNESS, 0.62]) alpha = np.interp(lin_grad_point, [0.75 / 2.0, 0.75], [0.4, 0.0]) # Use HSL to RGB conversion @@ -366,12 +360,16 @@ class ModelRenderer(Widget): def _get_ll_color(self, prob: float, adjacent: bool, left: bool): alpha = np.clip(prob, 0.0, 0.7) + stock_scheme = is_stock_color_scheme(self._params) if adjacent: override = get_param_color(self._params, "PathEdgesColor", 255) if override is not None: color = with_alpha(override, int(alpha * override.a)) + elif stock_scheme: + base_color = LANE_LINE_COLORS.get(ui_state.status, LANE_LINE_COLORS[UIStatus.DISENGAGED]) + color = rl.Color(base_color.r, base_color.g, base_color.b, int(alpha * 255)) else: - base_color = STOCK_LINE_GREEN if is_stock_color_scheme(self._params) else get_theme_color("PathEdge", STOCK_LINE_GREEN) + base_color = get_theme_color("PathEdge", rl.Color(0, 255, 64, 255)) color = with_alpha(base_color, int(alpha * base_color.a)) # turn adjacent lls orange if torque is high @@ -384,15 +382,18 @@ class ModelRenderer(Widget): np.interp(abs(torque), [0.6, 0.8], [0.0, 1.0]) ) else: - lane_lines_override = get_param_color(self._params, "LaneLinesColor", STOCK_LINE_GREEN.a) + lane_lines_override = get_param_color(self._params, "LaneLinesColor", STOCK_LANE_LINES_COLOR.a) if lane_lines_override is not None: lane_lines_color = lane_lines_override - elif is_stock_color_scheme(self._params): - lane_lines_color = STOCK_LINE_GREEN + elif stock_scheme: + lane_lines_color = STOCK_LANE_LINES_COLOR else: - lane_lines_color = get_theme_color("LaneLines", STOCK_LINE_GREEN) + lane_lines_color = get_theme_color("LaneLines", STOCK_LANE_LINES_COLOR) color = with_alpha(lane_lines_color, int(alpha * lane_lines_color.a)) + if stock_scheme and ui_state.status == UIStatus.DISENGAGED: + color = rl.Color(0, 0, 0, int(alpha * 255)) + return color def _draw_lane_lines(self): diff --git a/selfdrive/ui/onroad/model_renderer.py b/selfdrive/ui/onroad/model_renderer.py index 13aadb799..62938deb7 100644 --- a/selfdrive/ui/onroad/model_renderer.py +++ b/selfdrive/ui/onroad/model_renderer.py @@ -19,7 +19,9 @@ MIN_DRAW_DISTANCE = 10.0 MAX_DRAW_DISTANCE = 100.0 RAINBOW_GRADIENT_COLOR_COUNT = 19 RAINBOW_SCROLL_SPEED_DEG_PER_SEC = 60.0 -STOCK_LINE_GREEN = rl.Color(0, 255, 0, 255) +ACCEL_PATH_MIN_LIGHTNESS = 0.78 +ACCEL_PATH_MIN_SATURATION = 0.50 +STOCK_LANE_LINES_COLOR = rl.Color(255, 255, 255, 255) THROTTLE_COLORS = [ rl.Color(13, 248, 122, 102), # HSLF(148/360, 0.94, 0.51, 0.4) @@ -255,11 +257,6 @@ class ModelRenderer(Widget): self._exp_gradient = self._build_rainbow_gradient(gradient_bottom, gradient_top) return - custom_theme_selected = (self._params.get('ColorScheme', encoding='utf-8', default='stock') or 'stock').lower() != 'stock' - path_color = None - if custom_theme_selected or get_param_color(self._params, 'PathColor', 255) is not None: - path_color = get_visual_color(self._params, 'PathColor', 'Path', rl.Color(48, 255, 156, 255)) - segment_colors = [] gradient_stops = [] @@ -274,19 +271,11 @@ class ModelRenderer(Widget): # Calculate color based on acceleration (0 is bottom, 1 is top) lin_grad_point = 1 - (track_y - self._rect.y) / self._rect.height - if path_color is not None and abs(self._acceleration_x[i]) < 0.25: - alpha = np.interp(lin_grad_point, [0.0, 1.0], [path_color.a, path_color.a * 0.10]) - color = with_alpha(path_color, int(alpha)) - gradient_stops.append(lin_grad_point) - segment_colors.append(color) - i += 1 + (1 if (i + 2) < max_len else 0) - continue - # speed up: 120, slow down: 0 path_hue = np.clip(60 + self._acceleration_x[i] * 35, 0, 120) - - saturation = min(abs(self._acceleration_x[i] * 1.5), 1) - lightness = np.interp(saturation, [0.0, 1.0], [0.95, 0.62]) + accel_magnitude = np.clip(abs(self._acceleration_x[i]) * 1.5, 0.0, 1.0) + saturation = np.interp(accel_magnitude, [0.0, 1.0], [ACCEL_PATH_MIN_SATURATION, 1.0]) + lightness = np.interp(accel_magnitude, [0.0, 1.0], [ACCEL_PATH_MIN_LIGHTNESS, 0.62]) alpha = np.interp(lin_grad_point, [0.75 / 2.0, 0.75], [0.4, 0.0]) # Use HSL to RGB conversion @@ -364,13 +353,13 @@ class ModelRenderer(Widget): def _draw_lane_lines(self): """Draw lane lines and road edges""" - lane_lines_override = get_param_color(self._params, "LaneLinesColor", STOCK_LINE_GREEN.a) + lane_lines_override = get_param_color(self._params, "LaneLinesColor", STOCK_LANE_LINES_COLOR.a) if lane_lines_override is not None: lane_lines_color = lane_lines_override elif is_stock_color_scheme(self._params): - lane_lines_color = STOCK_LINE_GREEN + lane_lines_color = STOCK_LANE_LINES_COLOR else: - lane_lines_color = get_theme_color("LaneLines", STOCK_LINE_GREEN) + lane_lines_color = get_theme_color("LaneLines", STOCK_LANE_LINES_COLOR) for i, lane_line in enumerate(self._lane_lines): if lane_line.projected_points.size == 0: