From 823bc19e36a499b1c4637f8e8bff9f1921270e0d Mon Sep 17 00:00:00 2001 From: James <91348155+FrogAi@users.noreply.github.com> Date: Thu, 8 Jan 2026 01:25:42 -0700 Subject: [PATCH] Gas / Brake Pedal Indicators --- frogpilot/assets/other_images/brake_pedal.png | Bin 0 -> 6522 bytes frogpilot/assets/other_images/gas_pedal.png | Bin 0 -> 11278 bytes .../qt/onroad/frogpilot_annotated_camera.cc | 34 ++++++++++++++++++ .../ui/qt/onroad/frogpilot_annotated_camera.h | 5 +++ 4 files changed, 39 insertions(+) create mode 100644 frogpilot/assets/other_images/brake_pedal.png create mode 100644 frogpilot/assets/other_images/gas_pedal.png diff --git a/frogpilot/assets/other_images/brake_pedal.png b/frogpilot/assets/other_images/brake_pedal.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0ee24d1842f20e3edb37b8b9aeac036d902ab4 GIT binary patch literal 6522 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 literal 0 HcmV?d00001 diff --git a/frogpilot/assets/other_images/gas_pedal.png b/frogpilot/assets/other_images/gas_pedal.png new file mode 100644 index 0000000000000000000000000000000000000000..754a0bbf7226b1a596bbca2153e3da047abcce98 GIT binary patch literal 11278 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 B#QXpN literal 0 HcmV?d00001 diff --git a/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.cc b/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.cc index ae304571b..78e7c1dd1 100644 --- a/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.cc +++ b/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.cc @@ -5,8 +5,10 @@ FrogPilotAnnotatedCameraWidget::FrogPilotAnnotatedCameraWidget(QWidget *parent) QSize iconSize(img_size / 4, img_size / 4); + brakePedalImg = loadPixmap("../../frogpilot/assets/other_images/brake_pedal.png", {btn_size, btn_size}); curveSpeedIcon = loadPixmap("../../frogpilot/assets/other_images/curve_speed.png", {btn_size, btn_size}); curveSpeedIconFlipped = curveSpeedIcon.transformed(QTransform().scale(-1, 1)); + gasPedalImg = loadPixmap("../../frogpilot/assets/other_images/gas_pedal.png", {btn_size, btn_size}); pausedIcon = loadPixmap("../../frogpilot/assets/other_images/paused_icon.png", {widget_size, widget_size}); speedIcon = loadPixmap("../../frogpilot/assets/other_images/speed_icon.png", {widget_size, widget_size}); stopSignImg = loadPixmap("../../frogpilot/assets/other_images/stop_sign.png", {btn_size, btn_size}); @@ -143,10 +145,12 @@ void FrogPilotAnnotatedCameraWidget::updateState(const UIState &s, const FrogPil speedConversionMetrics = MS_TO_MPH; } + accelerationEgo = carState.getAEgo(); blindspotLeft = carState.getLeftBlindspot(); blindspotRight = carState.getRightBlindspot(); blinkerLeft = carState.getLeftBlinker(); blinkerRight = carState.getRightBlinker(); + brakeLights = frogpilotCarState.getBrakeLights(); cscControllingSpeed = frogpilotPlan.getCscControllingSpeed(); cscSpeed = frogpilotPlan.getCscSpeed(); cscTraining = frogpilotPlan.getCscTraining(); @@ -227,6 +231,10 @@ void FrogPilotAnnotatedCameraWidget::paintFrogPilotWidgets(QPainter &p, UIState paintLongitudinalPaused(p); } + if (frogpilot_toggles.value("pedals_on_ui").toBool()) { + paintPedalIcons(p); + } + if (frogpilot_toggles.value("radar_tracks").toBool()) { paintRadarTracks(p); } @@ -488,6 +496,32 @@ void FrogPilotAnnotatedCameraWidget::paintLongitudinalPaused(QPainter &p) { p.restore(); } +void FrogPilotAnnotatedCameraWidget::paintPedalIcons(QPainter &p) { + p.save(); + + float brakeOpacity = 1.0f; + float gasOpacity = 1.0f; + + if (frogpilot_toggles.value("dynamic_pedals_on_ui").toBool()) { + brakeOpacity = frogpilot_scene.standstill ? 1.0f : accelerationEgo < -0.25f ? std::max(0.25f, std::abs(accelerationEgo)) : 0.25f; + gasOpacity = std::max(0.25f, accelerationEgo); + } else if (frogpilot_toggles.value("static_pedals_on_ui").toBool()) { + brakeOpacity = frogpilot_scene.standstill || brakeLights || accelerationEgo < -0.25f ? 1.0f : 0.25f; + gasOpacity = accelerationEgo > 0.25 ? 1.0f : 0.25f; + } + + int startX = experimentalButtonPosition.x(); + int startY = experimentalButtonPosition.y() + btn_size + UI_BORDER_SIZE; + + p.setOpacity(brakeOpacity); + p.drawPixmap(startX, startY, brakePedalImg); + + p.setOpacity(gasOpacity); + p.drawPixmap(startX + btn_size / 2, startY, gasPedalImg); + + p.restore(); +} + void FrogPilotAnnotatedCameraWidget::paintRadarTracks(QPainter &p) { if (radar_tracks.empty()) { return; diff --git a/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.h b/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.h index e69fcf040..6e3d64774 100644 --- a/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.h +++ b/frogpilot/ui/qt/onroad/frogpilot_annotated_camera.h @@ -53,6 +53,7 @@ private: void paintCurveSpeedControl(QPainter &p); void paintCurveSpeedControlTraining(QPainter &p); void paintLongitudinalPaused(QPainter &p); + void paintPedalIcons(QPainter &p); void paintRadarTracks(QPainter &p); void paintRoadName(QPainter &p); void paintStandstillTimer(QPainter &p); @@ -64,6 +65,7 @@ private: bool blindspotRight; bool blinkerLeft; bool blinkerRight; + bool brakeLights; bool cscControllingSpeed; bool cscTraining; bool experimentalMode; @@ -78,6 +80,7 @@ private: int signalWidth; int totalFrames; + float accelerationEgo; float cscSpeed; float distanceConversion; float roadCurvature; @@ -95,8 +98,10 @@ private: QElapsedTimer glowTimer; QElapsedTimer standstillTimer; + QPixmap brakePedalImg; QPixmap curveSpeedIcon; QPixmap curveSpeedIconFlipped; + QPixmap gasPedalImg; QPixmap pausedIcon; QPixmap speedIcon; QPixmap stopSignImg;