better tracks

This commit is contained in:
royjr
2026-07-15 17:38:53 -04:00
parent 78327b8204
commit 1f0bfa1f05
3 changed files with 28 additions and 7 deletions
+1 -1
View File
@@ -154,7 +154,7 @@ class ModelRenderer(Widget, ModelRendererSP):
self._draw_path(sm)
if 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=5,
self.radar_tracks.draw_radar_tracks(sm['liveTracks'], self._map_to_screen, self._path_offset_z,
screen_offset=(self._rect.x, self._rect.y), v_ego=sm['carState'].vEgo)
# if render_lead_indicator and radar_state:
@@ -18,13 +18,17 @@ RECEDING_COLOR = (255, 45, 45)
def radar_track_color(v_rel: float, v_ego: float = 0.0) -> rl.Color:
"""Classify tracks as stationary, approaching, or receding with discrete colors."""
if abs(v_ego + v_rel) <= STATIONARY_SPEED_THRESHOLD or abs(v_rel) <= RELATIVE_SPEED_MOVING_THRESHOLD:
if radar_track_is_stationary(v_rel, v_ego) or abs(v_rel) <= RELATIVE_SPEED_MOVING_THRESHOLD:
return rl.Color(*NEUTRAL_COLOR, 255)
color = APPROACHING_COLOR if v_rel < 0.0 else RECEDING_COLOR
return rl.Color(*color, 255)
def radar_track_is_stationary(v_rel: float, v_ego: float = 0.0) -> bool:
return abs(v_ego + v_rel) <= STATIONARY_SPEED_THRESHOLD
def format_radar_tracks_onroad_columns(live_tracks) -> tuple[str, str]:
sources = sorted(live_tracks.trackSources, key=lambda source: (source.startAddress, source.endAddress, source.bus))
if not sources:
@@ -128,7 +132,7 @@ class RadarTracksStatus:
class RadarTracks:
def draw_radar_tracks(self, live_tracks, map_to_screen, path_offset_z, track_size=6, screen_offset=(0, 0), v_ego=0.0):
def draw_radar_tracks(self, live_tracks, map_to_screen, path_offset_z, track_size=7, screen_offset=(0, 0), v_ego=0.0):
for track in live_tracks.points:
d_rel, y_rel, v_rel = track.dRel, track.yRel, track.vRel
if not (math.isfinite(d_rel) and math.isfinite(y_rel) and math.isfinite(v_rel)):
@@ -140,5 +144,5 @@ class RadarTracks:
x, y = pt[0] + screen_offset[0], pt[1] + screen_offset[1]
color = radar_track_color(v_rel, v_ego)
neutral = (color.r, color.g, color.b) == NEUTRAL_COLOR
rl.draw_circle(int(x), int(y), max(1, track_size - 3) if neutral else track_size, color)
stationary = radar_track_is_stationary(v_rel, v_ego)
rl.draw_circle(int(x), int(y), max(1, track_size - 4) if stationary else track_size, color)
@@ -94,7 +94,7 @@ def test_draw_radar_tracks_allows_unknown_acceleration(monkeypatch):
assert drawn_colors == [color_tuple(radar_track_color(-5))]
def test_draw_radar_tracks_shrinks_neutral_dots(monkeypatch):
def test_draw_radar_tracks_shrinks_stationary_dots(monkeypatch):
live_tracks = car.RadarData.new_message()
point = live_tracks.init("points", 1)[0]
point.dRel = 10
@@ -105,7 +105,24 @@ def test_draw_radar_tracks_shrinks_neutral_dots(monkeypatch):
monkeypatch.setattr(radar_tracks.rl, "draw_circle", lambda x, y, size, color: drawn_sizes.append(size))
radar_tracks.RadarTracks().draw_radar_tracks(
live_tracks, lambda d_rel, y_rel, z: (20, 30), path_offset_z=1.2, track_size=5, v_ego=20,
live_tracks, lambda d_rel, y_rel, z: (20, 30), path_offset_z=1.2, track_size=6, v_ego=20,
)
assert drawn_sizes == [2]
def test_draw_radar_tracks_keeps_moving_white_dots_large(monkeypatch):
live_tracks = car.RadarData.new_message()
point = live_tracks.init("points", 1)[0]
point.dRel = 10
point.yRel = 1
point.vRel = 0.5
point.aRel = 0
drawn_sizes = []
monkeypatch.setattr(radar_tracks.rl, "draw_circle", lambda x, y, size, color: drawn_sizes.append(size))
radar_tracks.RadarTracks().draw_radar_tracks(
live_tracks, lambda d_rel, y_rel, z: (20, 30), path_offset_z=1.2, track_size=6, v_ego=20,
)
assert drawn_sizes == [6]