diff --git a/wpilibc/src/main/native/cpp/simulation/DifferentialDrivetrainSim.cpp b/wpilibc/src/main/native/cpp/simulation/DifferentialDrivetrainSim.cpp index fff76f22fc..73a0a0892a 100644 --- a/wpilibc/src/main/native/cpp/simulation/DifferentialDrivetrainSim.cpp +++ b/wpilibc/src/main/native/cpp/simulation/DifferentialDrivetrainSim.cpp @@ -89,6 +89,17 @@ units::ampere_t DifferentialDrivetrainSim::GetCurrentDraw() const { return loadIleft + loadIRight; } +void DifferentialDrivetrainSim::SetState( + const Eigen::Matrix& state) { + m_x = state; +} + +void DifferentialDrivetrainSim::SetPose(const frc::Pose2d& pose) { + m_x(State::kX) = pose.X().to(); + m_x(State::kY) = pose.Y().to(); + m_x(State::kHeading) = pose.Rotation().Radians().to(); +} + Eigen::Matrix DifferentialDrivetrainSim::Dynamics( const Eigen::Matrix& x, const Eigen::Matrix& u) { diff --git a/wpilibc/src/main/native/include/frc/simulation/DifferentialDrivetrainSim.h b/wpilibc/src/main/native/include/frc/simulation/DifferentialDrivetrainSim.h index c6d19c6c15..a75edb91e9 100644 --- a/wpilibc/src/main/native/include/frc/simulation/DifferentialDrivetrainSim.h +++ b/wpilibc/src/main/native/include/frc/simulation/DifferentialDrivetrainSim.h @@ -122,6 +122,20 @@ class DifferentialDrivetrainSim { */ units::ampere_t GetCurrentDraw() const; + /** + * Sets the system state. + * + * @param state The state. + */ + void SetState(const Eigen::Matrix& state); + + /** + * Sets the system pose. + * + * @param pose The pose. + */ + void SetPose(const frc::Pose2d& pose); + Eigen::Matrix Dynamics(const Eigen::Matrix& x, const Eigen::Matrix& u); diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/DifferentialDrivetrainSim.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/DifferentialDrivetrainSim.java index bf09e67ac5..79e67bc072 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/DifferentialDrivetrainSim.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/DifferentialDrivetrainSim.java @@ -174,6 +174,26 @@ public class DifferentialDrivetrainSim { this.m_currentGearing = newGearRatio; } + /** + * Sets the system state. + * + * @param state The state. + */ + public void setState(Matrix state) { + m_x = state; + } + + /** + * Sets the system pose. + * + * @param pose The pose. + */ + public void setPose(Pose2d pose) { + m_x.set(State.kX.value, 0, pose.getX()); + m_x.set(State.kY.value, 0, pose.getY()); + m_x.set(State.kHeading.value, 0, pose.getRotation().getRadians()); + } + @SuppressWarnings({"DuplicatedCode", "LocalVariableName"}) protected Matrix getDynamics(Matrix x, Matrix u) {