From 78c97ba7091cdb5a4b7ef01e3ff0c19e0cfdaec1 Mon Sep 17 00:00:00 2001 From: Daniel Koepping Date: Tue, 6 Oct 2026 15:51:25 -0700 Subject: [PATCH] ui: longitudinal policy indicator (#39040) * ui: mici longitudinal icons * ui: rm orange state * ui: lead policy indicator * fix * show on op long * make own widget * sync long indicator with dmoji * fast fade in with dmoji Original-upstream-commit: 035a447d1f0f0ef5abf2ed9724e33d9265399019 Upstream: https://github.com/commaai/openpilot/commit/035a447d1f0f0ef5abf2ed9724e33d9265399019 --- .../assets/icons_mici/longitudinal/car.png | Bin 0 -> 1793 bytes .../icons_mici/longitudinal/car_green.png | Bin 0 -> 33215 bytes .../icons_mici/longitudinal/distance_1.png | Bin 0 -> 237 bytes .../longitudinal/distance_1_green.png | Bin 0 -> 10348 bytes .../icons_mici/longitudinal/distance_2.png | Bin 0 -> 282 bytes .../longitudinal/distance_2_green.png | Bin 0 -> 12103 bytes .../icons_mici/longitudinal/distance_3.png | Bin 0 -> 320 bytes .../longitudinal/distance_3_green.png | Bin 0 -> 13868 bytes .../ui/mici/onroad/augmented_road_view.py | 4 + .../ui/mici/onroad/long_indicator.py | 89 ++++++++++++++++++ .../ui/mici/onroad/model_renderer.py | 2 +- 11 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 openpilot/selfdrive/assets/icons_mici/longitudinal/car.png create mode 100644 openpilot/selfdrive/assets/icons_mici/longitudinal/car_green.png create mode 100644 openpilot/selfdrive/assets/icons_mici/longitudinal/distance_1.png create mode 100644 openpilot/selfdrive/assets/icons_mici/longitudinal/distance_1_green.png create mode 100644 openpilot/selfdrive/assets/icons_mici/longitudinal/distance_2.png create mode 100644 openpilot/selfdrive/assets/icons_mici/longitudinal/distance_2_green.png create mode 100644 openpilot/selfdrive/assets/icons_mici/longitudinal/distance_3.png create mode 100644 openpilot/selfdrive/assets/icons_mici/longitudinal/distance_3_green.png create mode 100644 openpilot/selfdrive/ui/mici/onroad/long_indicator.py diff --git a/openpilot/selfdrive/assets/icons_mici/longitudinal/car.png b/openpilot/selfdrive/assets/icons_mici/longitudinal/car.png new file mode 100644 index 0000000000000000000000000000000000000000..b95798228421fd798bbcbda74016abee6c916a39 GIT binary patch literal 1793 zcmV+c2mbhpP)599bBB0vVb}M%b^KTB z{8pIFW)GM!GmMPM;JJxP6Hf7z!G$|rAPs7)3xmJ^G+}83a)%KaMF1w#OB1~{VS(1$>2Oz7L#sUlEaL0&w-%0*WsS zla}X*M3gGPwe~A0A$b#{&mfisxP%g#C{;ml3*b6=ZZJIcM!ea5`xE^*ZGC>Oi@Ct? zaD#A(fW#2McN6`MFf^HX=VH#p8c*G+qxZMF>aK8Ko6n~%X3>Of1asH%8Kw#+2KjSu z!iBRWNx;uy!WD&Kx?Shyk6Vx*w`5CHl8`MR75NeEjldh1fl|KHl+_&wen#@M24l3Z z4rBhXImxMV$ovK;f{Nsn2t>%&zz>k~e(Dn^LgJqFJ>-;_8Xk(Crb!zBes+>^k3a;m z0L~;8knu0_oQx_Wf_3MeZm%uFFs*KjWj;BF8?X)Bj8 z6~Wpp>H>annttk=rk!U6llAWXjPUh0H-2jP)q% O0|O8rH@9s>_cL3c!_mp6Xpf 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 CEY{2b literal 0 HcmV?d00001 diff --git a/openpilot/selfdrive/assets/icons_mici/longitudinal/distance_1.png b/openpilot/selfdrive/assets/icons_mici/longitudinal/distance_1.png new file mode 100644 index 0000000000000000000000000000000000000000..dfe8915cf19458327ff48962ac6ae590c0942ec8 GIT binary patch literal 237 zcmV zVG+VG4255+pc0A#h60KM<^Tye;HCfzNSFiafJvAHP*7fa^bQSs-(8xdKfkuQ8vdxY z-k2_ogzZuolbMyiVZES$JJS_9j1)0@(IiknW_m)4l@fMdgx|&)dL$nH;6<0PhbGyV zKpU|)g0#c;n=n9^HU?ZmhAxpWA-RMjw8=&j71})fCcL4|$0aP#X7T5cSiBe!dKCT| nPl3zI=D?VtgO7lTF?#a_>q0EA%}yj700000NkvXXu0mjf;_+Vi literal 0 HcmV?d00001 diff --git a/openpilot/selfdrive/assets/icons_mici/longitudinal/distance_1_green.png b/openpilot/selfdrive/assets/icons_mici/longitudinal/distance_1_green.png new file mode 100644 index 0000000000000000000000000000000000000000..812dc0b92f1d4da66f12b9003f63bf85aebf464a GIT binary patch literal 10348 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 KMNUMnLSTYVgH8Yd literal 0 HcmV?d00001 diff --git a/openpilot/selfdrive/assets/icons_mici/longitudinal/distance_2.png b/openpilot/selfdrive/assets/icons_mici/longitudinal/distance_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb90ab6f007a3c489cff965826bdeb1bd183955 GIT binary patch literal 282 zcmV+#0phU{gR*0206f4#*T>0SQQ$1SCwt9F%L>CCw7D?tZ^7x$Rp1y_CyR zhm{!PLta;@7NlmWx76UAo5~+txsdRl^16fmnWTCNan=p5jf5A#@V2yAW#o(g0;+K? z7iEA)P>oLht&J{nfXhY)sui@+6UgxP3EF6YoPYZqwDIc=suFY#`lSh=z4F-e;QX`7 zV=o05Ko)uIr2zT;XOq7NojfAQs!u0y23a*Jzz@h`l3STE1$YBbp~a9Mez_p*@w+gj gZKKpla(ku47jU04Bu^Od;Q#;t07*qoM6N<$g06getN;K2 literal 0 HcmV?d00001 diff --git a/openpilot/selfdrive/assets/icons_mici/longitudinal/distance_2_green.png b/openpilot/selfdrive/assets/icons_mici/longitudinal/distance_2_green.png new file mode 100644 index 0000000000000000000000000000000000000000..59ed0b67944aa0d3c430efbbc24fb48b1d134779 GIT binary patch literal 12103 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 rl.Texture: + return gui_app.texture(f'icons_mici/longitudinal/{name}.png', width, height, keep_aspect_ratio=False) + + def set_should_draw(self, should_draw: bool): + self._should_draw = should_draw + + def _render(self, rect: rl.Rectangle) -> None: + sm = ui_state.sm + if sm.recv_frame['selfdriveState'] < ui_state.started_frame or not sm['selfdriveState'].enabled or not ui_state.has_longitudinal_control: + self._personality = None + self._personality_changed_time = -HIGHLIGHT_TIME + self._alpha_filter.x = 0.0 + return + + # hidden under alerts and set speed + visible = self._should_draw and sm['selfdriveState'].alertSize == log.SelfdriveState.AlertSize.none + alpha = self._alpha_filter.update(visible) + self._draw_lead_car(rect, alpha) + self._draw_distance_bars(rect, alpha, visible) + + def _draw_lead_car(self, rect: rl.Rectangle, alpha: float) -> None: + sm = ui_state.sm + plan = sm['longitudinalPlan'] + has_lead = sm.alive['longitudinalPlan'] and plan.hasLead + + e2e = has_lead and plan.longitudinalPlanSource == log.LongitudinalPlan.LongitudinalPlanSource.e2e + white_f, green_f = self._lead_car_filters + white_alpha = white_f.update(0.0 if e2e else 0.9 if has_lead else 0.35) + green_alpha = green_f.update(float(e2e)) + + white, green = self._txt_lead_car + self._draw_centered(white, rect, 100, white_alpha * alpha) + self._draw_centered(green, rect, 100, green_alpha * alpha) + + def _draw_distance_bars(self, rect: rl.Rectangle, alpha: float, visible: bool) -> None: + sm = ui_state.sm + now = rl.get_time() + personality = sm['selfdriveState'].personality.raw + if self._personality is not None and personality != self._personality: + self._personality_changed_time = now + self._personality = personality + # the personality alert covers the bars, hold the highlight until they show + if not visible and now - self._personality_changed_time < HIGHLIGHT_TIME: + self._personality_changed_time = now + highlight = now - self._personality_changed_time < HIGHLIGHT_TIME + + # blink at double the turn signal rate (2.67 Hz) while overriding the gas + overriding = any(e.name == log.OnroadEvent.EventName.gasPressedOverride for e in sm['onroadEvents']) + blink = 0.35 / 0.9 if overriding and now % 0.375 > 0.1875 else 1.0 + + count = personality + 1 + for i, ((white, green), y, (active_f, green_f)) in enumerate(zip(self._txt_distance, (122, 136, 152), self._distance_filters, strict=True)): + active = active_f.update(float(i < count)) + green_alpha = green_f.update(float(highlight and i == count - 1)) + # only lit bars blink on override + self._draw_centered(white, rect, y, (0.35 * (1 - active) + 0.9 * (active - green_alpha) * blink) * alpha) + self._draw_centered(green, rect, y, green_alpha * blink * alpha) + + @staticmethod + def _draw_centered(texture: rl.Texture, rect: rl.Rectangle, y: float, alpha: float) -> None: + pos = rl.Vector2(rect.x + 46 - texture.width / 2, rect.y + y - texture.height / 2) + rl.draw_texture_ex(texture, pos, 0.0, 1.0, rl.Color(255, 255, 255, round(255 * alpha))) diff --git a/openpilot/selfdrive/ui/mici/onroad/model_renderer.py b/openpilot/selfdrive/ui/mici/onroad/model_renderer.py index e927fa506e..e5dcfc44bf 100644 --- a/openpilot/selfdrive/ui/mici/onroad/model_renderer.py +++ b/openpilot/selfdrive/ui/mici/onroad/model_renderer.py @@ -180,7 +180,7 @@ class ModelRenderer(Widget): ss, cs = sm['selfdriveState'], sm['carState'] # braking disengages without making openpilot unavailable available = ss.enabled or ss.engageable or cs.brakePressed - lane = (self._lane_lines[1].raw_points + self._lane_lines[2].raw_points) / 2 + lane = self._path.raw_points opacity = 0.4 if ui_state.status == UIStatus.DISENGAGED else 0.8 for lead, (present, d_rel, y_rel) in zip(self._lead_vehicles, leads, strict=True): visible = available and present and d_rel < MAX_DRAW_DISTANCE and len(lane) > 0