mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-09-30 08:23:41 +08:00
better tracks
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user