From 1320691eb42f5a9a7a9ea5fc9a8ef1b177be99d3 Mon Sep 17 00:00:00 2001 From: Tyler Veness Date: Sun, 27 Sep 2020 09:31:29 -0700 Subject: [PATCH] [wpilib] Shorten differential drive simulation stability test (#2745) If the model is unstable, it will almost always diverge within 10 seconds, and the results are rather dramatic. We're also reducing the threshold to 100 meters because the drivetrain is moving in a small circle. The translation norm is also used for this reason; the X component alone regularly crosses zero since the drivetrain moves in a circle. --- .../native/cpp/simulation/DifferentialDriveSimTest.cpp | 7 +++++-- .../wpilibj/simulation/DifferentialDrivetrainSimTest.java | 5 +++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/wpilibc/src/test/native/cpp/simulation/DifferentialDriveSimTest.cpp b/wpilibc/src/test/native/cpp/simulation/DifferentialDriveSimTest.cpp index af7cf8946b..b4aff7aa0e 100644 --- a/wpilibc/src/test/native/cpp/simulation/DifferentialDriveSimTest.cpp +++ b/wpilibc/src/test/native/cpp/simulation/DifferentialDriveSimTest.cpp @@ -6,6 +6,7 @@ /*----------------------------------------------------------------------------*/ #include +#include #include #include "frc/controller/LinearPlantInversionFeedforward.h" @@ -105,9 +106,11 @@ TEST(DifferentialDriveSim, ModelStability) { sim.SetInputs(2_V, 4_V); - for (int i = 0; i < 10000; ++i) { + // 10 seconds should be enough time to verify stability + for (int i = 0; i < 500; ++i) { sim.Update(20_ms); } - EXPECT_TRUE(std::abs(sim.GetEstimatedPosition().X().to()) < 10000); + EXPECT_LT(units::math::abs(sim.GetEstimatedPosition().Translation().Norm()), + 100_m); } diff --git a/wpilibj/src/test/java/edu/wpi/first/wpilibj/simulation/DifferentialDrivetrainSimTest.java b/wpilibj/src/test/java/edu/wpi/first/wpilibj/simulation/DifferentialDrivetrainSimTest.java index eafa398308..7ac5521101 100644 --- a/wpilibj/src/test/java/edu/wpi/first/wpilibj/simulation/DifferentialDrivetrainSimTest.java +++ b/wpilibj/src/test/java/edu/wpi/first/wpilibj/simulation/DifferentialDrivetrainSimTest.java @@ -136,10 +136,11 @@ class DifferentialDrivetrainSimTest { sim.setInputs(2, 4); - for (int i = 0; i < 10000; i++) { + // 10 seconds should be enough time to verify stability + for (int i = 0; i < 500; i++) { sim.update(0.020); } - assertTrue(Math.abs(sim.getEstimatedPosition().getX()) < 10000); + assertTrue(Math.abs(sim.getEstimatedPosition().getTranslation().getNorm()) < 100); } }