[command] Add simulationPeriodic method to Subsystem (#2577)

This method is run periodically during simulation, after periodic().
This commit is contained in:
Matt
2020-07-06 23:32:18 -07:00
committed by GitHub
parent 4043c461d7
commit a175f6e862
5 changed files with 29 additions and 3 deletions

View File

@@ -22,6 +22,7 @@ import edu.wpi.first.hal.FRCNetComm.tInstances;
import edu.wpi.first.hal.FRCNetComm.tResourceType;
import edu.wpi.first.hal.HAL;
import edu.wpi.first.networktables.NetworkTableEntry;
import edu.wpi.first.wpilibj.RobotBase;
import edu.wpi.first.wpilibj.RobotState;
import edu.wpi.first.wpilibj.Sendable;
import edu.wpi.first.wpilibj.TimedRobot;
@@ -253,6 +254,9 @@ public final class CommandScheduler implements Sendable, AutoCloseable {
//Run the periodic method of all registered subsystems.
for (Subsystem subsystem : m_subsystems.keySet()) {
subsystem.periodic();
if (RobotBase.isSimulation()) {
subsystem.simulationPeriodic();
}
m_watchdog.addEpoch(subsystem.getClass().getSimpleName() + ".periodic()");
}

View File

@@ -1,5 +1,5 @@
/*----------------------------------------------------------------------------*/
/* Copyright (c) 2018-2019 FIRST. All Rights Reserved. */
/* Copyright (c) 2018-2020 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
@@ -33,6 +33,14 @@ public interface Subsystem {
default void periodic() {
}
/**
* This method is called periodically by the {@link CommandScheduler}. Useful for updating
* subsystem-specific state that needs to be maintained for simulations, such as for updating
* {@link edu.wpi.first.wpilibj.simulation} classes and setting simulated sensor readings.
*/
default void simulationPeriodic() {
}
/**
* Sets the default {@link Command} of the subsystem. The default command will be
* automatically scheduled when no other commands are scheduled that require the subsystem.