From 5075da5ac4db40f712d89d291689296faab14eb4 Mon Sep 17 00:00:00 2001 From: James <91348155+FrogAi@users.noreply.github.com> Date: Mon, 1 Dec 2025 12:00:00 -0700 Subject: [PATCH] Display the steering torque in the screen's border --- frogpilot/ui/qt/onroad/frogpilot_onroad.cc | 33 ++++++++++++++++++++++ frogpilot/ui/qt/onroad/frogpilot_onroad.h | 5 ++++ 2 files changed, 38 insertions(+) diff --git a/frogpilot/ui/qt/onroad/frogpilot_onroad.cc b/frogpilot/ui/qt/onroad/frogpilot_onroad.cc index 71cc40db..04e75d2a 100644 --- a/frogpilot/ui/qt/onroad/frogpilot_onroad.cc +++ b/frogpilot/ui/qt/onroad/frogpilot_onroad.cc @@ -15,7 +15,18 @@ void FrogPilotOnroadWindow::updateState(const UIState &s, const FrogPilotUIState const cereal::CarState::Reader &carState = sm["carState"].getCarState(); const cereal::CarControl::Reader &carControl = fpsm["carControl"].getCarControl(); + torque = -carControl.getActuators().getTorque(); + showFPS = frogpilot_toggles.value("show_fps").toBool(); + showSteering = frogpilot_toggles.value("steering_metrics").toBool(); + + if (showSteering) { + float absTorque = std::abs(torque); + smoothedSteer = 0.25f * absTorque + 0.75f * smoothedSteer; + if (std::abs(smoothedSteer - absTorque) < 0.01f) { + smoothedSteer = absTorque; + } + } if (showFPS) { static float avgFPS = 0.0f; @@ -48,6 +59,10 @@ void FrogPilotOnroadWindow::paintEvent(QPaintEvent *event) { p.setClipRegion(marginRegion); p.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); + if (showSteering) { + paintSteeringTorqueBorder(p); + } + if (showFPS) { paintFPS(p); } @@ -66,3 +81,21 @@ void FrogPilotOnroadWindow::paintFPS(QPainter &p) { p.restore(); } + +void FrogPilotOnroadWindow::paintSteeringTorqueBorder(QPainter &p) { + p.save(); + + QLinearGradient gradient(rect.topLeft(), rect.bottomLeft()); + gradient.setColorAt(0.0, bg_colors[STATUS_TRAFFIC_MODE_ENABLED]); + gradient.setColorAt(0.25, bg_colors[STATUS_EXPERIMENTAL_MODE_ENABLED]); + gradient.setColorAt(0.5, bg_colors[STATUS_CEM_DISABLED]); + gradient.setColorAt(0.75, bg_colors[STATUS_ENGAGED]); + + int visibleHeight = rect.height() * smoothedSteer; + int xPos = (torque < 0) ? rect.x() : (rect.x() + rect.width() - UI_BORDER_SIZE); + int yPos = rect.y() + rect.height() - visibleHeight; + + p.fillRect(QRect(xPos, yPos, UI_BORDER_SIZE, visibleHeight), gradient); + + p.restore(); +} diff --git a/frogpilot/ui/qt/onroad/frogpilot_onroad.h b/frogpilot/ui/qt/onroad/frogpilot_onroad.h index e8f4d4a7..fb7d7e82 100644 --- a/frogpilot/ui/qt/onroad/frogpilot_onroad.h +++ b/frogpilot/ui/qt/onroad/frogpilot_onroad.h @@ -21,9 +21,14 @@ public: private: void paintEvent(QPaintEvent *event); void paintFPS(QPainter &p); + void paintSteeringTorqueBorder(QPainter &p); void resizeEvent(QResizeEvent *event); bool showFPS; + bool showSteering; + + float smoothedSteer; + float torque; QRect rect;