|
|
|
@ -56,6 +56,8 @@ class ModelRenderer(Widget): |
|
|
|
|
self._lead_vehicles = [LeadVehicle(), LeadVehicle()] |
|
|
|
|
self._path_offset_z = HEIGHT_INIT[0] |
|
|
|
|
|
|
|
|
|
self._render_lead_indicator = False |
|
|
|
|
|
|
|
|
|
# Initialize ModelPoints objects |
|
|
|
|
self._path = ModelPoints() |
|
|
|
|
self._lane_lines = [ModelPoints() for _ in range(4)] |
|
|
|
@ -83,20 +85,9 @@ class ModelRenderer(Widget): |
|
|
|
|
self._car_space_transform = transform.astype(np.float32) |
|
|
|
|
self._transform_dirty = True |
|
|
|
|
|
|
|
|
|
def _render(self, rect: rl.Rectangle): |
|
|
|
|
sm = ui_state.sm |
|
|
|
|
|
|
|
|
|
# Check if data is up-to-date |
|
|
|
|
if (sm.recv_frame["liveCalibration"] < ui_state.started_frame or |
|
|
|
|
sm.recv_frame["modelV2"] < ui_state.started_frame): |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
# Set up clipping region |
|
|
|
|
self._clip_region = rl.Rectangle( |
|
|
|
|
rect.x - CLIP_MARGIN, rect.y - CLIP_MARGIN, rect.width + 2 * CLIP_MARGIN, rect.height + 2 * CLIP_MARGIN |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def _update_state(self): |
|
|
|
|
# Update state |
|
|
|
|
sm = ui_state.sm |
|
|
|
|
self._experimental_mode = sm['selfdriveState'].experimentalMode |
|
|
|
|
|
|
|
|
|
live_calib = sm['liveCalibration'] |
|
|
|
@ -108,7 +99,7 @@ class ModelRenderer(Widget): |
|
|
|
|
model = sm['modelV2'] |
|
|
|
|
radar_state = sm['radarState'] if sm.valid['radarState'] else None |
|
|
|
|
lead_one = radar_state.leadOne if radar_state else None |
|
|
|
|
render_lead_indicator = self._longitudinal_control and radar_state is not None |
|
|
|
|
self._render_lead_indicator = self._longitudinal_control and radar_state is not None |
|
|
|
|
|
|
|
|
|
# Update model data when needed |
|
|
|
|
model_updated = sm.updated['modelV2'] |
|
|
|
@ -121,15 +112,28 @@ class ModelRenderer(Widget): |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
self._update_model(lead_one, path_x_array) |
|
|
|
|
if render_lead_indicator: |
|
|
|
|
if self._render_lead_indicator: |
|
|
|
|
self._update_leads(radar_state, path_x_array) |
|
|
|
|
self._transform_dirty = False |
|
|
|
|
|
|
|
|
|
def _render(self, rect: rl.Rectangle): |
|
|
|
|
sm = ui_state.sm |
|
|
|
|
|
|
|
|
|
# Check if data is up-to-date |
|
|
|
|
if (sm.recv_frame["liveCalibration"] < ui_state.started_frame or |
|
|
|
|
sm.recv_frame["modelV2"] < ui_state.started_frame): |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
# Set up clipping region |
|
|
|
|
self._clip_region = rl.Rectangle( |
|
|
|
|
rect.x - CLIP_MARGIN, rect.y - CLIP_MARGIN, rect.width + 2 * CLIP_MARGIN, rect.height + 2 * CLIP_MARGIN |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
# Draw elements |
|
|
|
|
self._draw_lane_lines() |
|
|
|
|
self._draw_path(sm) |
|
|
|
|
|
|
|
|
|
if render_lead_indicator and radar_state: |
|
|
|
|
if self._render_lead_indicator: |
|
|
|
|
self._draw_lead_indicator() |
|
|
|
|
|
|
|
|
|
def _update_raw_points(self, model): |
|
|
|
|