mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
[epilogue] Add an annotation-based logging framework for Java programs (#6584)
This commit is contained in:
@@ -6,6 +6,7 @@ package edu.wpi.first.wpilibj.examples.rapidreactcommandbot;
|
||||
|
||||
import static edu.wpi.first.wpilibj2.command.Commands.parallel;
|
||||
|
||||
import edu.wpi.first.epilogue.Logged;
|
||||
import edu.wpi.first.wpilibj.examples.rapidreactcommandbot.Constants.AutoConstants;
|
||||
import edu.wpi.first.wpilibj.examples.rapidreactcommandbot.Constants.OIConstants;
|
||||
import edu.wpi.first.wpilibj.examples.rapidreactcommandbot.Constants.ShooterConstants;
|
||||
@@ -24,6 +25,7 @@ import edu.wpi.first.wpilibj2.command.button.Trigger;
|
||||
* periodic methods (other than the scheduler calls). Instead, the structure of the robot (including
|
||||
* subsystems, commands, and button mappings) should be declared here.
|
||||
*/
|
||||
@Logged(name = "Rapid React Command Robot Container")
|
||||
public class RapidReactCommandBot {
|
||||
// The robot's subsystems
|
||||
private final Drive m_drive = new Drive();
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
|
||||
package edu.wpi.first.wpilibj.examples.rapidreactcommandbot;
|
||||
|
||||
import edu.wpi.first.epilogue.Epilogue;
|
||||
import edu.wpi.first.epilogue.Logged;
|
||||
import edu.wpi.first.wpilibj.DataLogManager;
|
||||
import edu.wpi.first.wpilibj.TimedRobot;
|
||||
import edu.wpi.first.wpilibj2.command.Command;
|
||||
import edu.wpi.first.wpilibj2.command.CommandScheduler;
|
||||
@@ -14,6 +17,7 @@ import edu.wpi.first.wpilibj2.command.CommandScheduler;
|
||||
* the package after creating this project, you must also update the build.gradle file in the
|
||||
* project.
|
||||
*/
|
||||
@Logged(name = "Rapid React Command Robot")
|
||||
public class Robot extends TimedRobot {
|
||||
private Command m_autonomousCommand;
|
||||
|
||||
@@ -27,6 +31,10 @@ public class Robot extends TimedRobot {
|
||||
public void robotInit() {
|
||||
// Configure default commands and condition bindings on robot startup
|
||||
m_robot.configureBindings();
|
||||
|
||||
// Initialize data logging.
|
||||
DataLogManager.start();
|
||||
Epilogue.bind(this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
package edu.wpi.first.wpilibj.examples.rapidreactcommandbot.subsystems;
|
||||
|
||||
import edu.wpi.first.epilogue.Logged;
|
||||
import edu.wpi.first.epilogue.NotLogged;
|
||||
import edu.wpi.first.util.sendable.SendableRegistry;
|
||||
import edu.wpi.first.wpilibj.Encoder;
|
||||
import edu.wpi.first.wpilibj.drive.DifferentialDrive;
|
||||
@@ -13,6 +15,7 @@ import edu.wpi.first.wpilibj2.command.Command;
|
||||
import edu.wpi.first.wpilibj2.command.SubsystemBase;
|
||||
import java.util.function.DoubleSupplier;
|
||||
|
||||
@Logged
|
||||
public class Drive extends SubsystemBase {
|
||||
// The motors on the left side of the drive.
|
||||
private final PWMSparkMax m_leftLeader = new PWMSparkMax(DriveConstants.kLeftMotor1Port);
|
||||
@@ -23,6 +26,7 @@ public class Drive extends SubsystemBase {
|
||||
private final PWMSparkMax m_rightFollower = new PWMSparkMax(DriveConstants.kRightMotor2Port);
|
||||
|
||||
// The robot's drive
|
||||
@NotLogged // Would duplicate motor data, there's no point sending it twice
|
||||
private final DifferentialDrive m_drive =
|
||||
new DifferentialDrive(m_leftLeader::set, m_rightLeader::set);
|
||||
|
||||
|
||||
@@ -6,12 +6,14 @@ package edu.wpi.first.wpilibj.examples.rapidreactcommandbot.subsystems;
|
||||
|
||||
import static edu.wpi.first.wpilibj.examples.rapidreactcommandbot.Constants.IntakeConstants;
|
||||
|
||||
import edu.wpi.first.epilogue.Logged;
|
||||
import edu.wpi.first.wpilibj.DoubleSolenoid;
|
||||
import edu.wpi.first.wpilibj.PneumaticsModuleType;
|
||||
import edu.wpi.first.wpilibj.motorcontrol.PWMSparkMax;
|
||||
import edu.wpi.first.wpilibj2.command.Command;
|
||||
import edu.wpi.first.wpilibj2.command.SubsystemBase;
|
||||
|
||||
@Logged
|
||||
public class Intake extends SubsystemBase {
|
||||
private final PWMSparkMax m_motor = new PWMSparkMax(IntakeConstants.kMotorPort);
|
||||
|
||||
|
||||
@@ -4,14 +4,15 @@
|
||||
|
||||
package edu.wpi.first.wpilibj.examples.rapidreactcommandbot.subsystems;
|
||||
|
||||
import edu.wpi.first.epilogue.Logged;
|
||||
import edu.wpi.first.wpilibj.AnalogPotentiometer;
|
||||
import edu.wpi.first.wpilibj.Compressor;
|
||||
import edu.wpi.first.wpilibj.PneumaticsModuleType;
|
||||
import edu.wpi.first.wpilibj.shuffleboard.Shuffleboard;
|
||||
import edu.wpi.first.wpilibj2.command.Command;
|
||||
import edu.wpi.first.wpilibj2.command.SubsystemBase;
|
||||
|
||||
/** Subsystem for managing the compressor, pressure sensor, etc. */
|
||||
@Logged
|
||||
public class Pneumatics extends SubsystemBase {
|
||||
// External analog pressure sensor
|
||||
// product-specific voltage->pressure conversion, see product manual
|
||||
@@ -26,17 +27,12 @@ public class Pneumatics extends SubsystemBase {
|
||||
// Compressor connected to a PCM with a default CAN ID (0)
|
||||
private final Compressor m_compressor = new Compressor(PneumaticsModuleType.CTREPCM);
|
||||
|
||||
public Pneumatics() {
|
||||
var tab = Shuffleboard.getTab("Pneumatics");
|
||||
tab.addDouble("External Pressure [PSI]", this::getPressure);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query the analog pressure sensor.
|
||||
*
|
||||
* @return the measured pressure, in PSI
|
||||
*/
|
||||
private double getPressure() {
|
||||
public double getPressure() {
|
||||
// Get the pressure (in PSI) from an analog pressure sensor connected to the RIO.
|
||||
return m_pressureTransducer.get();
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import static edu.wpi.first.units.Units.Volts;
|
||||
import static edu.wpi.first.wpilibj2.command.Commands.parallel;
|
||||
import static edu.wpi.first.wpilibj2.command.Commands.waitUntil;
|
||||
|
||||
import edu.wpi.first.epilogue.Logged;
|
||||
import edu.wpi.first.math.controller.PIDController;
|
||||
import edu.wpi.first.math.controller.SimpleMotorFeedforward;
|
||||
import edu.wpi.first.wpilibj.Encoder;
|
||||
@@ -17,6 +18,7 @@ import edu.wpi.first.wpilibj.motorcontrol.PWMSparkMax;
|
||||
import edu.wpi.first.wpilibj2.command.Command;
|
||||
import edu.wpi.first.wpilibj2.command.SubsystemBase;
|
||||
|
||||
@Logged
|
||||
public class Shooter extends SubsystemBase {
|
||||
private final PWMSparkMax m_shooterMotor = new PWMSparkMax(ShooterConstants.kShooterMotorPort);
|
||||
private final PWMSparkMax m_feederMotor = new PWMSparkMax(ShooterConstants.kFeederMotorPort);
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
package edu.wpi.first.wpilibj.examples.rapidreactcommandbot.subsystems;
|
||||
|
||||
import edu.wpi.first.epilogue.Logged;
|
||||
import edu.wpi.first.epilogue.NotLogged;
|
||||
import edu.wpi.first.wpilibj.DigitalInput;
|
||||
import edu.wpi.first.wpilibj.examples.rapidreactcommandbot.Constants.StorageConstants;
|
||||
import edu.wpi.first.wpilibj.motorcontrol.PWMSparkMax;
|
||||
@@ -11,13 +13,16 @@ import edu.wpi.first.wpilibj2.command.Command;
|
||||
import edu.wpi.first.wpilibj2.command.SubsystemBase;
|
||||
import edu.wpi.first.wpilibj2.command.button.Trigger;
|
||||
|
||||
@Logged
|
||||
public class Storage extends SubsystemBase {
|
||||
private final PWMSparkMax m_motor = new PWMSparkMax(StorageConstants.kMotorPort);
|
||||
@NotLogged // We'll log a more meaningful boolean instead
|
||||
private final DigitalInput m_ballSensor = new DigitalInput(StorageConstants.kBallSensorPort);
|
||||
|
||||
// Expose trigger from subsystem to improve readability and ease
|
||||
// inter-subsystem communications
|
||||
/** Whether the ball storage is full. */
|
||||
@Logged(name = "Has Cargo")
|
||||
@SuppressWarnings("checkstyle:MemberName")
|
||||
public final Trigger hasCargo = new Trigger(m_ballSensor::get);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user