From be4223fe13be0602ffa583a5d7a2718f331b4b64 Mon Sep 17 00:00:00 2001 From: royjr Date: Tue, 9 Jun 2026 00:15:45 -0400 Subject: [PATCH] visuals-radar-tracks commit 1e8d692804609bd03c69de5ce042f3b9540bb4f6 Merge: 5d5dc6c50c 097dd9b5f2 Author: royjr Date: Tue Jun 9 00:13:12 2026 -0400 Merge branch 'master' into visuals-radar-tracks commit 5d5dc6c50cd1023a56beb979fced7d37c2a2c334 Author: royjr Date: Tue Jun 9 00:12:06 2026 -0400 yaml commit 5c64fe069554f9aacd1e48d29d9711c79a82944b Merge: 37eeb121cd 066ba92e77 Author: royjr Date: Mon Jun 8 23:19:24 2026 -0400 Merge branch 'master' into visuals-radar-tracks commit 37eeb121cd24ab724782f5df072080e2b409002f Merge: 19a5202f4c 1658898498 Author: royjr Date: Fri Mar 27 16:27:10 2026 -0700 Merge branch 'master' into visuals-radar-tracks commit 19a5202f4ccc29ce6375d2dee954eb753bd03971 Merge: 920ef49b32 a17a38d8c3 Author: royjr Date: Mon Mar 2 02:44:58 2026 -0500 Merge branch 'master' into visuals-radar-tracks commit 920ef49b32b33873e71ae8d4e5c2dc7d7d08e3c8 Author: royjr Date: Thu Feb 5 01:01:07 2026 -0500 no return commit c7a37ca89e2cc82ddefde9c19b27ad8b8b1b8092 Merge: 45ca076aef 5c12a7cfc3 Author: royjr Date: Thu Feb 5 00:52:12 2026 -0500 Merge branch 'master' into visuals-radar-tracks commit 45ca076aeff9278f018d0af0e155b820f7644e5c Merge: 70cf5e6d52 19a7d1d5d7 Author: royjr Date: Wed Dec 31 15:26:12 2025 -0500 Merge branch 'master' into visuals-radar-tracks commit 70cf5e6d5267c8ae598cb576bf3b217c3209b9a3 Author: royjr Date: Mon Dec 29 12:03:57 2025 -0500 Update params_metadata.json commit f4c71e49186cd0a8660ea54fcdc63536facf9c3e Author: royjr Date: Mon Dec 29 10:05:17 2025 -0500 lint commit 8408241495b970cbc6da4e1b58a53b778fbd6d4e Author: royjr Date: Mon Dec 29 02:23:10 2025 -0500 Update toggles.py commit 640988673eb4db37fceda291c7144d56a811f5ee Author: royjr Date: Mon Dec 29 02:22:16 2025 -0500 mici toggle commit 1429975f1ec763cfe7567b8aad8fe57301319c30 Author: royjr Date: Mon Dec 29 02:22:01 2025 -0500 Revert "force enable for now" This reverts commit efd499448a86c270c8eb5bf069657abbee00c95b. commit efd499448a86c270c8eb5bf069657abbee00c95b Author: royjr Date: Mon Dec 29 00:42:38 2025 -0500 force enable for now commit f7e636f0893cf9ddf488a0a652c52419f2f920e6 Author: royjr Date: Mon Dec 29 00:42:19 2025 -0500 use params commit 00187dc59ef7a3aad266432a1bcfb1d2a17e7070 Author: royjr Date: Mon Dec 29 00:37:19 2025 -0500 use checks commit cde6368cf7d8ca6dc6bf3423d46323a320163381 Author: royjr Date: Mon Dec 29 00:30:15 2025 -0500 cleaner commit 08b56f9b33dc350d963509a0ee0b24594a3d497e Author: royjr Date: Mon Dec 29 00:28:12 2025 -0500 better sp commit 78efe3a476911c48c294c2a02b8288413ebbb867 Author: royjr Date: Mon Dec 29 00:21:08 2025 -0500 init sp commit 54578675c2ae62797ec7ef5e4070e5bcdfdf947e Author: royjr Date: Mon Dec 29 00:19:17 2025 -0500 init --- common/params_keys.h | 1 + selfdrive/ui/mici/layouts/settings/toggles.py | 3 +++ selfdrive/ui/mici/onroad/model_renderer.py | 3 +++ selfdrive/ui/onroad/model_renderer.py | 3 +++ .../ui/sunnypilot/onroad/model_renderer.py | 3 +++ .../ui/sunnypilot/onroad/radar_tracks.py | 23 +++++++++++++++++++ selfdrive/ui/sunnypilot/ui_state.py | 1 + selfdrive/ui/ui_state.py | 1 + sunnypilot/sunnylink/settings_ui.json | 6 +++++ .../settings_ui_src/pages/visuals.yaml | 4 ++++ 10 files changed, 48 insertions(+) create mode 100644 selfdrive/ui/sunnypilot/onroad/radar_tracks.py diff --git a/common/params_keys.h b/common/params_keys.h index 624901401e..e946622920 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -178,6 +178,7 @@ inline static std::unordered_map keys = { {"OnroadUploads", {PERSISTENT | BACKUP, BOOL, "1"}}, {"QuickBootToggle", {PERSISTENT | BACKUP, BOOL, "0"}}, {"QuietMode", {PERSISTENT | BACKUP, BOOL, "0"}}, + {"RadarTracks", {PERSISTENT | BACKUP, BOOL, "0"}}, {"RainbowMode", {PERSISTENT | BACKUP, BOOL, "0"}}, {"RocketFuel", {PERSISTENT | BACKUP, BOOL, "0"}}, {"ShowAdvancedControls", {PERSISTENT | BACKUP, BOOL, "0"}}, diff --git a/selfdrive/ui/mici/layouts/settings/toggles.py b/selfdrive/ui/mici/layouts/settings/toggles.py index 69482cfaff..0aca256134 100644 --- a/selfdrive/ui/mici/layouts/settings/toggles.py +++ b/selfdrive/ui/mici/layouts/settings/toggles.py @@ -22,8 +22,10 @@ class TogglesLayoutMici(NavScroller): record_mic = BigParamControl("record & upload mic audio", "RecordAudio", toggle_callback=restart_needed_callback) enable_openpilot = BigParamControl("enable sunnypilot", "OpenpilotEnabledToggle", toggle_callback=restart_needed_callback) hyundai_radar = BigMultiParamToggle("hyundai radar", "HyundaiRadar", ["off", "lead only", "full radar"]) + radar_tracks = BigParamControl("radar tracks", "RadarTracks") self._scroller.add_widgets([ + radar_tracks, self._personality_toggle, self._experimental_btn, is_metric_toggle, @@ -37,6 +39,7 @@ class TogglesLayoutMici(NavScroller): # Toggle lists self._refresh_toggles = ( ("HyundaiRadar", hyundai_radar), + ("RadarTracks", radar_tracks), ("ExperimentalMode", self._experimental_btn), ("IsMetric", is_metric_toggle), ("IsLdwEnabled", ldw_toggle), diff --git a/selfdrive/ui/mici/onroad/model_renderer.py b/selfdrive/ui/mici/onroad/model_renderer.py index e88d320a3f..b15af9b32a 100644 --- a/selfdrive/ui/mici/onroad/model_renderer.py +++ b/selfdrive/ui/mici/onroad/model_renderer.py @@ -153,6 +153,9 @@ class ModelRenderer(Widget, ModelRendererSP): self._draw_lane_lines() self._draw_path(sm) + if ui_state.radar_tracks and sm.valid['liveTracks'] and sm.recv_frame['liveTracks'] >= ui_state.started_frame: + self.radar_tracks.draw_radar_tracks(sm['liveTracks'], self._map_to_screen, self._path_offset_z, track_size=3) + # if render_lead_indicator and radar_state: # self._draw_lead_indicator() diff --git a/selfdrive/ui/onroad/model_renderer.py b/selfdrive/ui/onroad/model_renderer.py index 353cc5aa40..b750f0832c 100644 --- a/selfdrive/ui/onroad/model_renderer.py +++ b/selfdrive/ui/onroad/model_renderer.py @@ -135,6 +135,9 @@ class ModelRenderer(Widget, ChevronMetrics, ModelRendererSP): self._draw_lane_lines() self._draw_path(sm) + if ui_state.radar_tracks and sm.valid['liveTracks'] and sm.recv_frame['liveTracks'] >= ui_state.started_frame: + self.radar_tracks.draw_radar_tracks(sm['liveTracks'], self._map_to_screen, self._path_offset_z) + if render_lead_indicator and radar_state: self._draw_lead_indicator() self.chevron_metrics.draw_lead_status(sm, radar_state, self._rect, self._lead_vehicles) diff --git a/selfdrive/ui/sunnypilot/onroad/model_renderer.py b/selfdrive/ui/sunnypilot/onroad/model_renderer.py index 5d78997662..cfea9ba7ac 100644 --- a/selfdrive/ui/sunnypilot/onroad/model_renderer.py +++ b/selfdrive/ui/sunnypilot/onroad/model_renderer.py @@ -6,9 +6,12 @@ See the LICENSE.md file in the root directory for more details. """ from openpilot.selfdrive.ui.sunnypilot.onroad.chevron_metrics import ChevronMetrics from openpilot.selfdrive.ui.sunnypilot.onroad.rainbow_path import RainbowPath +from openpilot.selfdrive.ui.sunnypilot.onroad.radar_tracks import RadarTracks class ModelRendererSP: def __init__(self): self.rainbow_path = RainbowPath() self.chevron_metrics = ChevronMetrics() + self.radar_tracks = RadarTracks() + diff --git a/selfdrive/ui/sunnypilot/onroad/radar_tracks.py b/selfdrive/ui/sunnypilot/onroad/radar_tracks.py new file mode 100644 index 0000000000..1f4da80231 --- /dev/null +++ b/selfdrive/ui/sunnypilot/onroad/radar_tracks.py @@ -0,0 +1,23 @@ +""" +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. +""" +import math +import pyray as rl + + +class RadarTracks: + def draw_radar_tracks(self, live_tracks, map_to_screen, path_offset_z, track_size=6): + for track in live_tracks.points: + d_rel, y_rel, v_rel, a_rel = track.dRel, track.yRel, track.vRel, track.aRel + if not (math.isfinite(d_rel) and math.isfinite(y_rel) and math.isfinite(v_rel) and math.isfinite(a_rel)): + continue + + pt = map_to_screen(d_rel, -y_rel, path_offset_z) + if pt is None: + continue + + x, y = pt + rl.draw_circle(int(x), int(y), track_size, rl.Color(0, 255, 64, 255)) diff --git a/selfdrive/ui/sunnypilot/ui_state.py b/selfdrive/ui/sunnypilot/ui_state.py index 8cd37583f3..38786d8b16 100644 --- a/selfdrive/ui/sunnypilot/ui_state.py +++ b/selfdrive/ui/sunnypilot/ui_state.py @@ -169,6 +169,7 @@ class UIStateSP: self.turn_signals = self.params.get_bool("ShowTurnSignals") self.boot_offroad_mode = self.params.get("DeviceBootMode", return_default=True) self.always_offroad = self.params.get_bool("OffroadMode") + self.radar_tracks = self.params.get_bool("RadarTracks") if not self._sp_initialized: self._sp_initialized = True diff --git a/selfdrive/ui/ui_state.py b/selfdrive/ui/ui_state.py index 806dc11a6d..7ba537ce6f 100644 --- a/selfdrive/ui/ui_state.py +++ b/selfdrive/ui/ui_state.py @@ -63,6 +63,7 @@ class UIState(UIStateSP): "liveParameters", "testJoystick", "rawAudioData", + "liveTracks", ] + self.sm_services_ext ) diff --git a/sunnypilot/sunnylink/settings_ui.json b/sunnypilot/sunnylink/settings_ui.json index 1745235d96..0620dfc045 100644 --- a/sunnypilot/sunnylink/settings_ui.json +++ b/sunnypilot/sunnylink/settings_ui.json @@ -1296,6 +1296,12 @@ "title": "Display Turn Signals", "description": "When enabled, visual turn indicators are drawn on the HUD." }, + { + "key": "RadarTracks", + "widget": "toggle", + "title": "Radar Tracks", + "description": "Show radar tracks" + }, { "key": "RoadNameToggle", "widget": "toggle", diff --git a/sunnypilot/sunnylink/settings_ui_src/pages/visuals.yaml b/sunnypilot/sunnylink/settings_ui_src/pages/visuals.yaml index 3170991157..d63833168e 100644 --- a/sunnypilot/sunnylink/settings_ui_src/pages/visuals.yaml +++ b/sunnypilot/sunnylink/settings_ui_src/pages/visuals.yaml @@ -24,6 +24,10 @@ sections: widget: toggle title: Display Turn Signals description: When enabled, visual turn indicators are drawn on the HUD. + - key: RadarTracks + widget: toggle + title: Radar Tracks + description: Show radar tracks - key: RoadNameToggle widget: toggle title: Display Road Name