Compare commits

..

27 Commits

Author SHA1 Message Date
royjr
03eb57b79c Merge branch 'master' into visuals-confidence-ball 2026-03-02 02:40:52 -05:00
royjr
27cb5c02a3 Merge branch 'master' into visuals-confidence-ball 2026-02-13 22:22:15 -05:00
royjr
f7e156d4ab Update ui_state.py 2026-02-13 00:36:56 -05:00
royjr
6ab6c9511f cleaner 2026-02-13 00:18:26 -05:00
royjr
7ba74317c7 Merge branch 'master' into visuals-confidence-ball 2026-02-12 23:49:33 -05:00
royjr
d9080a7128 move to ConfidenceBallSP 2026-02-12 23:46:09 -05:00
royjr
d954ae4b7a move to AugmentedRoadViewSP 2026-02-12 23:31:24 -05:00
royjr
fdda381d1f Merge branch 'master' into visuals-confidence-ball 2026-02-12 23:19:10 -05:00
royjr
68ddad7f5c Update params_metadata.json 2026-02-11 01:44:49 -05:00
royjr
820bef3255 000 2026-02-11 01:41:40 -05:00
royjr
dcb80a627b visual 2026-02-11 01:37:57 -05:00
royjr
731108a5a8 simpler 2026-02-11 01:21:46 -05:00
royjr
f0dba2446a ConfidenceVisual 2026-02-11 01:14:41 -05:00
royjr
1277503e7a move to visuals panel 2026-02-11 00:47:47 -05:00
royjr
dfd5a6a617 Merge branch 'master' into visuals-confidence-ball 2026-02-11 00:38:12 -05:00
royjr
fb36ee47b8 Update confidence_ball.py 2026-02-11 00:38:04 -05:00
royjr
f44952f09a Merge branch 'master' into visuals-confidence-ball 2026-02-11 00:24:50 -05:00
Jason Wen
88633bc5bf Merge branch 'master' into visuals-confidence-ball 2026-02-08 17:01:31 -05:00
royjr
5f6b9b9b74 Merge branch 'master' into visuals-confidence-ball 2026-02-05 00:53:44 -05:00
royjr
f9804e4899 bool 2025-12-31 14:18:16 -05:00
royjr
bd41dbcd5d cleaner 2025-12-29 23:08:41 -05:00
royjr
3c54a91ffb Update params_metadata.json 2025-12-29 22:53:10 -05:00
royjr
46b8732a00 Update params_keys.h 2025-12-29 14:47:16 -05:00
royjr
c5e3fd7323 add toggle 2025-12-29 14:42:09 -05:00
royjr
7f55fd5b39 Merge branch 'master' into visuals-confidence-ball 2025-12-29 14:35:46 -05:00
royjr
2067dbd823 bar 2025-11-28 00:56:47 -05:00
royjr
67345f59b7 init 2025-11-28 00:45:24 -05:00
9 changed files with 1416 additions and 3908 deletions

View File

@@ -25,6 +25,7 @@ inline static std::unordered_map<std::string, ParamKeyAttributes> keys = {
{"CarParamsPersistent", {PERSISTENT, BYTES}},
{"CarParamsPrevRoute", {PERSISTENT, BYTES}},
{"CompletedTrainingVersion", {PERSISTENT, STRING, "0"}},
{"ConfidenceVisual", {PERSISTENT | BACKUP, INT, "0"}},
{"ControlsReady", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, BOOL}},
{"CurrentBootlog", {PERSISTENT, STRING}},
{"CurrentRoute", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, STRING}},

View File

@@ -24,10 +24,12 @@ def draw_circle_gradient(center_x: float, center_y: float, radius: int,
class ConfidenceBall(Widget, ConfidenceBallSP):
def __init__(self, demo: bool = False):
def __init__(self, demo: bool = False, scale: float = 1.0, visual: int = 0):
Widget.__init__(self)
ConfidenceBallSP.__init__(self)
self._demo = demo
self._scale = scale
self._visual = visual
self._confidence_filter = FirstOrderFilter(-0.5, 0.5, 1 / gui_app.target_fps)
def update_filter(self, value: float):
@@ -54,7 +56,7 @@ class ConfidenceBall(Widget, ConfidenceBallSP):
self.rect.height,
)
status_dot_radius = 24
status_dot_radius = int(24 * self._scale)
dot_height = (1 - self._confidence_filter.x) * (content_rect.height - 2 * status_dot_radius) + status_dot_radius
dot_height = self._rect.y + dot_height
@@ -81,6 +83,7 @@ class ConfidenceBall(Widget, ConfidenceBallSP):
top_dot_color = rl.Color(50, 50, 50, 255)
bottom_dot_color = rl.Color(13, 13, 13, 255)
draw_circle_gradient(content_rect.x + content_rect.width - status_dot_radius,
dot_height, status_dot_radius,
top_dot_color, bottom_dot_color)
if not self.update_confidence_visual(content_rect, status_dot_radius, dot_height, top_dot_color, bottom_dot_color):
draw_circle_gradient(content_rect.x + content_rect.width - status_dot_radius,
dot_height, status_dot_radius,
top_dot_color, bottom_dot_color)

View File

@@ -95,6 +95,7 @@ class AugmentedRoadView(CameraView, AugmentedRoadViewSP):
# Draw all UI overlays
self.model_renderer.render(self._content_rect)
AugmentedRoadViewSP.update_fade_out_bottom_overlay(self, self._content_rect)
self.update_confidence_visual(self._content_rect)
self._hud_renderer.render(self._content_rect)
self.alert_renderer.render(self._content_rect)
self.driver_state_renderer.render(self._content_rect)

View File

@@ -120,10 +120,18 @@ class VisualsLayout(Widget):
button_width=350,
inline=False
)
self._confidence_visual = multiple_button_item_sp(
title=lambda: tr("Confidence Visual"),
description=lambda: tr("Display confidence ball or bar on the driving screen."),
buttons=[lambda: tr("Off"), lambda: tr("Ball"), lambda: tr("Bar")],
param="ConfidenceVisual",
inline=False
)
items = list(self._toggles.values()) + [
self._chevron_info,
self._dev_ui_info,
self._confidence_visual,
]
return items
@@ -135,6 +143,8 @@ class VisualsLayout(Widget):
self._dev_ui_info.action_item.set_selected_button(ui_state.params.get("DevUIInfo", return_default=True))
self._confidence_visual.action_item.set_selected_button(ui_state.params.get("ConfidenceVisual", return_default=True))
if ui_state.has_longitudinal_control:
self._chevron_info.set_description(tr(CHEVRON_INFO_DESCRIPTION["enabled"]))
self._chevron_info.action_item.set_selected_button(ui_state.params.get("ChevronInfo", return_default=True))

View File

@@ -4,7 +4,7 @@ Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
This file is part of sunnypilot and is licensed under the MIT License.
See the LICENSE.md file in the root directory for more details.
"""
from openpilot.selfdrive.ui.onroad.augmented_road_view import BORDER_COLORS
import pyray as rl
from openpilot.selfdrive.ui.ui_state import ui_state, UIStatus
@@ -19,8 +19,26 @@ class ConfidenceBallSP:
@staticmethod
def get_lat_long_dot_color():
from openpilot.selfdrive.ui.onroad.augmented_road_view import BORDER_COLORS
if ui_state.status == UIStatus.LAT_ONLY:
return BORDER_COLORS[UIStatus.LAT_ONLY]
# UIStatus.LONG_ONLY
return BORDER_COLORS[UIStatus.LONG_ONLY]
def update_confidence_visual(self, content_rect, status_dot_radius, dot_height, top_dot_color, bottom_dot_color) -> bool:
if self._visual == 2:
bar_width = int(20 * self._scale)
bar_x = content_rect.x + content_rect.width - bar_width
fill_h = int(content_rect.height * self._confidence_filter.x)
fill_y = int(content_rect.y + (content_rect.height - fill_h))
rl.draw_rectangle(int(bar_x), int(content_rect.y), bar_width, int(content_rect.height), rl.Color(20, 20, 20, 180))
rl.draw_rectangle_gradient_v(int(bar_x), fill_y, bar_width, fill_h, top_dot_color, bottom_dot_color)
return True
elif self._visual == 1:
rl.draw_circle_gradient(int(content_rect.x + content_rect.width - status_dot_radius),
int(dot_height), status_dot_radius,
top_dot_color, bottom_dot_color)
return True
return False

View File

@@ -8,6 +8,7 @@ import pyray as rl
from openpilot.common.filter_simple import FirstOrderFilter
from openpilot.selfdrive.ui.ui_state import UIStatus, ui_state
from openpilot.system.ui.lib.application import gui_app
from openpilot.selfdrive.ui.mici.onroad.confidence_ball import ConfidenceBall
BORDER_COLORS_SP = {
UIStatus.LAT_ONLY: rl.Color(0x00, 0xC8, 0xC8, 0xFF), # Cyan for lateral-only state
@@ -19,6 +20,7 @@ class AugmentedRoadViewSP:
def __init__(self):
self._fade_texture = gui_app.texture("icons_mici/onroad/onroad_fade.png")
self._fade_alpha_filter = FirstOrderFilter(0, 0.1, 1 / gui_app.target_fps)
self._confidence_visual = ConfidenceBall(scale=1.5)
def update_fade_out_bottom_overlay(self, _content_rect):
# Fade out bottom of overlays for looks (only when engaged)
@@ -29,3 +31,9 @@ class AugmentedRoadViewSP:
rl.Rectangle(0, 0, self._fade_texture.width, self._fade_texture.height),
_content_rect, rl.Vector2(0, 0), 0.0,
rl.Color(255, 255, 255, int(255 * fade_alpha)))
def update_confidence_visual(self, _content_rect):
mode = ui_state.confidence_visual
if mode in (1, 2):
self._confidence_visual._visual = mode
self._confidence_visual.render(_content_rect)

View File

@@ -143,6 +143,7 @@ class UIStateSP:
self.true_v_ego_ui = self.params.get_bool("TrueVEgoUI")
self.turn_signals = self.params.get_bool("ShowTurnSignals")
self.boot_offroad_mode = self.params.get("DeviceBootMode", return_default=True)
self.confidence_visual = self.params.get("ConfidenceVisual", return_default=True)
class DeviceSP:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff