From debb52156c0e4d0420b18090e06db365bd757992 Mon Sep 17 00:00:00 2001 From: Jade Date: Mon, 4 Nov 2024 02:37:44 +0800 Subject: [PATCH] [wpilib] Clamp sim battery voltage to 0 (#7325) --- .../main/native/include/frc/simulation/BatterySim.h | 11 +++++++---- .../edu/wpi/first/wpilibj/simulation/BatterySim.java | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/wpilibc/src/main/native/include/frc/simulation/BatterySim.h b/wpilibc/src/main/native/include/frc/simulation/BatterySim.h index ab79844e30c..d50ff224806 100644 --- a/wpilibc/src/main/native/include/frc/simulation/BatterySim.h +++ b/wpilibc/src/main/native/include/frc/simulation/BatterySim.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include @@ -33,8 +34,9 @@ class BatterySim { static units::volt_t Calculate(units::volt_t nominalVoltage, units::ohm_t resistance, std::span currents) { - return nominalVoltage - - std::accumulate(currents.begin(), currents.end(), 0_A) * resistance; + return std::max(0_V, nominalVoltage - std::accumulate(currents.begin(), + currents.end(), 0_A) * + resistance); } /** @@ -52,8 +54,9 @@ class BatterySim { static units::volt_t Calculate( units::volt_t nominalVoltage, units::ohm_t resistance, std::initializer_list currents) { - return nominalVoltage - - std::accumulate(currents.begin(), currents.end(), 0_A) * resistance; + return std::max(0_V, nominalVoltage - std::accumulate(currents.begin(), + currents.end(), 0_A) * + resistance); } /** diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/BatterySim.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/BatterySim.java index 78c988848c0..fcee31bdb3f 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/BatterySim.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/BatterySim.java @@ -27,7 +27,7 @@ public static double calculateLoadedBatteryVoltage( for (var current : currents) { retval -= current * resistanceOhms; } - return retval; + return Math.max(0.0, retval); } /**