[wpilib][sim] Add Onboard IMU Sim (#8855)

This provides the ability to simulate parts of the Onboard IMU at the
HAL level. This allows team to use and simulate the IMU in code, and a
follow up PR could be made to the halsim_gui to add a new widget to view
and modify the data graphically.

Since the C++ IMU uses radians for angles that is what I did for the
simulator.

Partially deals with #8845
This commit is contained in:
PJ Reiniger
2026-05-07 13:01:26 -04:00
committed by GitHub
parent 3d4cabfbc9
commit 4c07aedd91
23 changed files with 713 additions and 15 deletions

View File

@@ -132,8 +132,7 @@ void Drivetrain::SimulationPeriodic() {
leftEncoderSim.SetRate(drivetrainSimulator.GetLeftVelocity().value());
rightEncoderSim.SetDistance(drivetrainSimulator.GetRightPosition().value());
rightEncoderSim.SetRate(drivetrainSimulator.GetRightVelocity().value());
// gyroSim.SetAngle(-drivetrainSimulator.GetHeading().Degrees().value());
// // TODO(Ryan): fixup when sim implemented
imuSim.SetYaw(-drivetrainSimulator.GetHeading().Degrees());
}
void Drivetrain::Periodic() {

View File

@@ -23,6 +23,7 @@
#include "wpi/nt/NetworkTableInstance.hpp"
#include "wpi/simulation/DifferentialDrivetrainSim.hpp"
#include "wpi/simulation/EncoderSim.hpp"
#include "wpi/simulation/OnboardIMUSim.hpp"
#include "wpi/smartdashboard/Field2d.hpp"
#include "wpi/units/angle.hpp"
#include "wpi/units/angular_velocity.hpp"
@@ -166,6 +167,7 @@ class Drivetrain {
// Simulation classes
wpi::sim::EncoderSim leftEncoderSim{leftEncoder};
wpi::sim::EncoderSim rightEncoderSim{rightEncoder};
wpi::sim::OnboardIMUSim imuSim;
wpi::Field2d fieldSim;
wpi::Field2d fieldApproximation;
wpi::math::LinearSystem<2, 2, 2> drivetrainSystem =