[examples] Remove old command-based templates and examples (#3263)

Co-authored-by: Tyler Veness <calcmogul@gmail.com>
This commit is contained in:
Prateek Machiraju
2021-10-13 22:17:58 -04:00
committed by GitHub
parent 689e9ccfb5
commit 67df469c58
92 changed files with 8 additions and 3199 deletions

View File

@@ -1,40 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "OI.h"
#include <frc/smartdashboard/SmartDashboard.h>
#include "commands/Collect.h"
#include "commands/DriveForward.h"
#include "commands/LowGoal.h"
#include "commands/SetCollectionSpeed.h"
#include "commands/SetPivotSetpoint.h"
#include "commands/Shoot.h"
#include "subsystems/Collector.h"
#include "subsystems/Pivot.h"
OI::OI() {
m_r1.WhenPressed(new LowGoal());
m_r2.WhenPressed(new Collect());
m_l1.WhenPressed(new SetPivotSetpoint(Pivot::kShoot));
m_l2.WhenPressed(new SetPivotSetpoint(Pivot::kShootNear));
m_sticks.WhenActive(new Shoot());
// SmartDashboard Buttons
frc::SmartDashboard::PutData("Drive Forward", new DriveForward(2.25));
frc::SmartDashboard::PutData("Drive Backward", new DriveForward(-2.25));
frc::SmartDashboard::PutData("Start Rollers",
new SetCollectionSpeed(Collector::kForward));
frc::SmartDashboard::PutData("Stop Rollers",
new SetCollectionSpeed(Collector::kStop));
frc::SmartDashboard::PutData("Reverse Rollers",
new SetCollectionSpeed(Collector::kReverse));
}
frc::Joystick& OI::GetJoystick() {
return m_joystick;
}

View File

@@ -1,88 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "Robot.h"
#include <fmt/core.h>
#include <frc/commands/Scheduler.h>
#include <frc/livewindow/LiveWindow.h>
#include <frc/smartdashboard/SmartDashboard.h>
Drivetrain Robot::drivetrain;
Pivot Robot::pivot;
Collector Robot::collector;
Shooter Robot::shooter;
Pneumatics Robot::pneumatics;
OI Robot::oi;
void Robot::RobotInit() {
// Show what command your subsystem is running on the SmartDashboard
frc::SmartDashboard::PutData(&drivetrain);
frc::SmartDashboard::PutData(&pivot);
frc::SmartDashboard::PutData(&collector);
frc::SmartDashboard::PutData(&shooter);
frc::SmartDashboard::PutData(&pneumatics);
// instantiate the command used for the autonomous period
m_autoChooser.SetDefaultOption("Drive and Shoot", &m_driveAndShootAuto);
m_autoChooser.AddOption("Drive Forward", &m_driveForwardAuto);
frc::SmartDashboard::PutData("Auto Mode", &m_autoChooser);
pneumatics.Start(); // Pressurize the pneumatics.
}
void Robot::AutonomousInit() {
m_autonomousCommand = m_autoChooser.GetSelected();
m_autonomousCommand->Start();
}
void Robot::AutonomousPeriodic() {
frc::Scheduler::GetInstance()->Run();
Log();
}
void Robot::TeleopInit() {
// This makes sure that the autonomous stops running when
// teleop starts running. If you want the autonomous to
// continue until interrupted by another command, remove
// this line or comment it out.
if (m_autonomousCommand != nullptr) {
m_autonomousCommand->Cancel();
}
fmt::print("Starting Teleop\n");
}
void Robot::TeleopPeriodic() {
frc::Scheduler::GetInstance()->Run();
Log();
}
void Robot::TestPeriodic() {}
void Robot::DisabledInit() {
shooter.Unlatch();
}
void Robot::DisabledPeriodic() {
Log();
}
/**
* Log interesting values to the SmartDashboard.
*/
void Robot::Log() {
Robot::pneumatics.WritePressure();
frc::SmartDashboard::PutNumber("Pivot Pot Value", pivot.GetAngle());
frc::SmartDashboard::PutNumber("Left Distance",
drivetrain.GetLeftEncoder().GetDistance());
frc::SmartDashboard::PutNumber("Right Distance",
drivetrain.GetRightEncoder().GetDistance());
}
#ifndef RUNNING_FRC_TESTS
int main() {
return frc::StartRobot<Robot>();
}
#endif

View File

@@ -1,16 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/CheckForHotGoal.h"
#include "Robot.h"
CheckForHotGoal::CheckForHotGoal(units::second_t time) {
SetTimeout(time);
}
// Make this return true when this Command no longer needs to run execute()
bool CheckForHotGoal::IsFinished() {
return IsTimedOut() || Robot::shooter.GoalIsHot();
}

View File

@@ -1,16 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/CloseClaw.h"
#include "Robot.h"
CloseClaw::CloseClaw() {
Requires(&Robot::collector);
}
// Called just before this Command runs the first time
void CloseClaw::Initialize() {
Robot::collector.Close();
}

View File

@@ -1,18 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/Collect.h"
#include "Robot.h"
#include "commands/CloseClaw.h"
#include "commands/SetCollectionSpeed.h"
#include "commands/SetPivotSetpoint.h"
#include "commands/WaitForBall.h"
Collect::Collect() {
AddSequential(new SetCollectionSpeed(Collector::kForward));
AddParallel(new CloseClaw());
AddSequential(new SetPivotSetpoint(Pivot::kCollect));
AddSequential(new WaitForBall());
}

View File

@@ -1,25 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/DriveAndShootAutonomous.h"
#include "Robot.h"
#include "commands/CheckForHotGoal.h"
#include "commands/CloseClaw.h"
#include "commands/DriveForward.h"
#include "commands/SetPivotSetpoint.h"
#include "commands/Shoot.h"
#include "commands/WaitForPressure.h"
DriveAndShootAutonomous::DriveAndShootAutonomous() {
AddSequential(new CloseClaw());
AddSequential(new WaitForPressure(), 2_s);
#ifndef SIMULATION
// NOTE: Simulation doesn't currently have the concept of hot.
AddSequential(new CheckForHotGoal(2_s));
#endif
AddSequential(new SetPivotSetpoint(45));
AddSequential(new DriveForward(8, 0.3));
AddSequential(new Shoot());
}

View File

@@ -1,54 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/DriveForward.h"
#include <cmath>
#include "Robot.h"
void DriveForward::init(double dist, double maxSpeed) {
Requires(&Robot::drivetrain);
m_distance = dist;
m_driveForwardSpeed = maxSpeed;
}
DriveForward::DriveForward() {
init(10, 0.5);
}
DriveForward::DriveForward(double dist) {
init(dist, 0.5);
}
DriveForward::DriveForward(double dist, double maxSpeed) {
init(dist, maxSpeed);
}
// Called just before this Command runs the first time
void DriveForward::Initialize() {
Robot::drivetrain.GetRightEncoder().Reset();
SetTimeout(2_s);
}
// Called repeatedly when this Command is scheduled to run
void DriveForward::Execute() {
m_error = (m_distance - Robot::drivetrain.GetRightEncoder().GetDistance());
if (m_driveForwardSpeed * kP * m_error >= m_driveForwardSpeed) {
Robot::drivetrain.TankDrive(m_driveForwardSpeed, m_driveForwardSpeed);
} else {
Robot::drivetrain.TankDrive(m_driveForwardSpeed * kP * m_error,
m_driveForwardSpeed * kP * m_error);
}
}
// Make this return true when this Command no longer needs to run execute()
bool DriveForward::IsFinished() {
return (std::fabs(m_error) <= kTolerance) || IsTimedOut();
}
// Called once after isFinished returns true
void DriveForward::End() {
Robot::drivetrain.Stop();
}

View File

@@ -1,27 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/DriveWithJoystick.h"
#include "Robot.h"
DriveWithJoystick::DriveWithJoystick() {
Requires(&Robot::drivetrain);
}
// Called repeatedly when this Command is scheduled to run
void DriveWithJoystick::Execute() {
auto& joystick = Robot::oi.GetJoystick();
Robot::drivetrain.TankDrive(joystick.GetY(), joystick.GetRawAxis(4));
}
// Make this return true when this Command no longer needs to run execute()
bool DriveWithJoystick::IsFinished() {
return false;
}
// Called once after isFinished returns true
void DriveWithJoystick::End() {
Robot::drivetrain.Stop();
}

View File

@@ -1,21 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/ExtendShooter.h"
#include "Robot.h"
ExtendShooter::ExtendShooter() : frc::TimedCommand(1_s) {
Requires(&Robot::shooter);
}
// Called just before this Command runs the first time
void ExtendShooter::Initialize() {
Robot::shooter.ExtendBoth();
}
// Called once after isFinished returns true
void ExtendShooter::End() {
Robot::shooter.RetractBoth();
}

View File

@@ -1,16 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/LowGoal.h"
#include "Robot.h"
#include "commands/ExtendShooter.h"
#include "commands/SetCollectionSpeed.h"
#include "commands/SetPivotSetpoint.h"
LowGoal::LowGoal() {
AddSequential(new SetPivotSetpoint(Pivot::kLowGoal));
AddSequential(new SetCollectionSpeed(Collector::kReverse));
AddSequential(new ExtendShooter());
}

View File

@@ -1,21 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/OpenClaw.h"
#include "Robot.h"
OpenClaw::OpenClaw() {
Requires(&Robot::collector);
}
// Called just before this Command runs the first time
void OpenClaw::Initialize() {
Robot::collector.Open();
}
// Make this return true when this Command no longer needs to run execute()
bool OpenClaw::IsFinished() {
return Robot::collector.IsOpen();
}

View File

@@ -1,17 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/SetCollectionSpeed.h"
#include "Robot.h"
SetCollectionSpeed::SetCollectionSpeed(double speed) {
Requires(&Robot::collector);
m_speed = speed;
}
// Called just before this Command runs the first time
void SetCollectionSpeed::Initialize() {
Robot::collector.SetSpeed(m_speed);
}

View File

@@ -1,23 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/SetPivotSetpoint.h"
#include "Robot.h"
SetPivotSetpoint::SetPivotSetpoint(double setpoint) {
m_setpoint = setpoint;
Requires(&Robot::pivot);
}
// Called just before this Command runs the first time
void SetPivotSetpoint::Initialize() {
Robot::pivot.Enable();
Robot::pivot.SetSetpoint(m_setpoint);
}
// Make this return true when this Command no longer needs to run execute()
bool SetPivotSetpoint::IsFinished() {
return Robot::pivot.OnTarget();
}

View File

@@ -1,18 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/Shoot.h"
#include "Robot.h"
#include "commands/ExtendShooter.h"
#include "commands/OpenClaw.h"
#include "commands/SetCollectionSpeed.h"
#include "commands/WaitForPressure.h"
Shoot::Shoot() {
AddSequential(new WaitForPressure());
AddSequential(new SetCollectionSpeed(Collector::kStop));
AddSequential(new OpenClaw());
AddSequential(new ExtendShooter());
}

View File

@@ -1,16 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/WaitForBall.h"
#include "Robot.h"
WaitForBall::WaitForBall() {
Requires(&Robot::collector);
}
// Make this return true when this Command no longer needs to run execute()
bool WaitForBall::IsFinished() {
return Robot::collector.HasBall();
}

View File

@@ -1,16 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "commands/WaitForPressure.h"
#include "Robot.h"
WaitForPressure::WaitForPressure() {
Requires(&Robot::pneumatics);
}
// Make this return true when this Command no longer needs to run execute()
bool WaitForPressure::IsFinished() {
return Robot::pneumatics.IsPressurized();
}

View File

@@ -1,41 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "subsystems/Collector.h"
#include <frc/livewindow/LiveWindow.h>
Collector::Collector() : frc::Subsystem("Collector") {
// Put everything to the LiveWindow for testing.
AddChild("Roller Motor", m_rollerMotor);
AddChild("Ball Detector", m_ballDetector);
AddChild("Claw Open Detector", m_openDetector);
AddChild("Piston", m_piston);
}
bool Collector::HasBall() {
return m_ballDetector.Get(); // TODO: prepend ! to reflect real robot
}
void Collector::SetSpeed(double speed) {
m_rollerMotor.Set(-speed);
}
void Collector::Stop() {
m_rollerMotor.Set(0);
}
bool Collector::IsOpen() {
return m_openDetector.Get(); // TODO: prepend ! to reflect real robot
}
void Collector::Open() {
m_piston.Set(true);
}
void Collector::Close() {
m_piston.Set(false);
}
void Collector::InitDefaultCommand() {}

View File

@@ -1,71 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "subsystems/Drivetrain.h"
#include <frc/Joystick.h>
#include <units/length.h>
#include <wpi/numbers>
#include "commands/DriveWithJoystick.h"
Drivetrain::Drivetrain() : frc::Subsystem("Drivetrain") {
// AddChild("Front Left CIM", m_frontLeftCIM);
// AddChild("Front Right CIM", m_frontRightCIM);
// AddChild("Back Left CIM", m_backLeftCIM);
// AddChild("Back Right CIM", m_backRightCIM);
// Configure the DifferentialDrive to reflect the fact that all our
// motors are wired backwards and our drivers sensitivity preferences.
m_robotDrive.SetSafetyEnabled(false);
m_robotDrive.SetExpiration(100_ms);
m_robotDrive.SetMaxOutput(1.0);
m_leftCIMs.SetInverted(true);
m_rightCIMs.SetInverted(true);
#ifndef SIMULATION
// Converts to feet
m_rightEncoder.SetDistancePerPulse(0.0785398);
m_leftEncoder.SetDistancePerPulse(0.0785398);
#else
// Circumference = diameter * pi. 360 tick simulated encoders.
m_rightEncoder.SetDistancePerPulse(units::foot_t{4_in}.to<double>() *
wpi::numbers::pi / 360.0);
m_leftEncoder.SetDistancePerPulse(units::foot_t{4_in}.to<double>() *
wpi::numbers::pi / 360.0);
#endif
AddChild("Right Encoder", m_rightEncoder);
AddChild("Left Encoder", m_leftEncoder);
// Configure gyro
#ifndef SIMULATION
m_gyro.SetSensitivity(0.007); // TODO: Handle more gracefully?
#endif
AddChild("Gyro", m_gyro);
}
void Drivetrain::InitDefaultCommand() {
SetDefaultCommand(new DriveWithJoystick());
}
void Drivetrain::TankDrive(double leftAxis, double rightAxis) {
m_robotDrive.TankDrive(leftAxis, rightAxis);
}
void Drivetrain::Stop() {
m_robotDrive.TankDrive(0.0, 0.0);
}
frc::Encoder& Drivetrain::GetLeftEncoder() {
return m_leftEncoder;
}
frc::Encoder& Drivetrain::GetRightEncoder() {
return m_rightEncoder;
}
double Drivetrain::GetAngle() {
return m_gyro.GetAngle();
}

View File

@@ -1,45 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "subsystems/Pivot.h"
Pivot::Pivot() : frc::PIDSubsystem("Pivot", 7.0, 0.0, 8.0) {
SetAbsoluteTolerance(0.005);
GetPIDController()->SetContinuous(false);
#ifdef SIMULATION
// PID is different in simulation.
GetPIDController()->SetPID(0.5, 0.001, 2);
SetAbsoluteTolerance(5);
#endif
// Put everything to the LiveWindow for testing.
AddChild("Upper Limit Switch", m_upperLimitSwitch);
AddChild("Lower Limit Switch", m_lowerLimitSwitch);
AddChild("Pot", m_pot);
AddChild("Motor", m_motor);
}
void InitDefaultCommand() {}
double Pivot::ReturnPIDInput() {
return m_pot.Get();
}
void Pivot::UsePIDOutput(double output) {
m_motor.Set(output);
}
bool Pivot::IsAtUpperLimit() {
return m_upperLimitSwitch.Get(); // TODO: inverted from real robot
// (prefix with !)
}
bool Pivot::IsAtLowerLimit() {
return m_lowerLimitSwitch.Get(); // TODO: inverted from real robot
// (prefix with !)
}
double Pivot::GetAngle() {
return m_pot.Get();
}

View File

@@ -1,33 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "subsystems/Pneumatics.h"
#include <frc/smartdashboard/SmartDashboard.h>
Pneumatics::Pneumatics() : frc::Subsystem("Pneumatics") {
AddChild("Pressure Sensor", m_pressureSensor);
}
void Pneumatics::InitDefaultCommand() {
// No default command
}
void Pneumatics::Start() {
#ifndef SIMULATION
m_compressor.Start();
#endif
}
bool Pneumatics::IsPressurized() {
#ifndef SIMULATION
return kMaxPressure <= m_pressureSensor.GetVoltage();
#else
return true; // NOTE: Simulation always has full pressure
#endif
}
void Pneumatics::WritePressure() {
frc::SmartDashboard::PutNumber("Pressure", m_pressureSensor.GetVoltage());
}

View File

@@ -1,81 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "subsystems/Shooter.h"
Shooter::Shooter() : Subsystem("Shooter") {
// Put everything to the LiveWindow for testing.
AddChild("Hot Goal Sensor", m_hotGoalSensor);
AddChild("Piston1 Reed Switch Front ", m_piston1ReedSwitchFront);
AddChild("Piston1 Reed Switch Back ", m_piston1ReedSwitchBack);
AddChild("Latch Piston", m_latchPiston);
}
void Shooter::InitDefaultCommand() {
// Set the default command for a subsystem here.
// SetDefaultCommand(new MySpecialCommand());
}
void Shooter::ExtendBoth() {
m_piston1.Set(frc::DoubleSolenoid::kForward);
m_piston2.Set(frc::DoubleSolenoid::kForward);
}
void Shooter::RetractBoth() {
m_piston1.Set(frc::DoubleSolenoid::kReverse);
m_piston2.Set(frc::DoubleSolenoid::kReverse);
}
void Shooter::Extend1() {
m_piston1.Set(frc::DoubleSolenoid::kForward);
}
void Shooter::Retract1() {
m_piston1.Set(frc::DoubleSolenoid::kReverse);
}
void Shooter::Extend2() {
m_piston2.Set(frc::DoubleSolenoid::kReverse);
}
void Shooter::Retract2() {
m_piston2.Set(frc::DoubleSolenoid::kForward);
}
void Shooter::Off1() {
m_piston1.Set(frc::DoubleSolenoid::kOff);
}
void Shooter::Off2() {
m_piston2.Set(frc::DoubleSolenoid::kOff);
}
void Shooter::Unlatch() {
m_latchPiston.Set(true);
}
void Shooter::Latch() {
m_latchPiston.Set(false);
}
void Shooter::ToggleLatchPosition() {
m_latchPiston.Set(!m_latchPiston.Get());
}
bool Shooter::Piston1IsExtended() {
return !m_piston1ReedSwitchFront.Get();
}
bool Shooter::Piston1IsRetracted() {
return !m_piston1ReedSwitchBack.Get();
}
void Shooter::OffBoth() {
m_piston1.Set(frc::DoubleSolenoid::kOff);
m_piston2.Set(frc::DoubleSolenoid::kOff);
}
bool Shooter::GoalIsHot() {
return m_hotGoalSensor.Get();
}

View File

@@ -1,17 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "triggers/DoubleButton.h"
#include <frc/GenericHID.h>
DoubleButton::DoubleButton(frc::GenericHID* joy, int button1, int button2)
: m_joy(*joy) {
m_button1 = button1;
m_button2 = button2;
}
bool DoubleButton::Get() {
return m_joy.GetRawButton(m_button1) && m_joy.GetRawButton(m_button2);
}

View File

@@ -1,26 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/Joystick.h>
#include <frc/buttons/JoystickButton.h>
#include "triggers/DoubleButton.h"
class OI {
public:
OI();
frc::Joystick& GetJoystick();
private:
frc::Joystick m_joystick{0};
frc::JoystickButton m_l1{&m_joystick, 11};
frc::JoystickButton m_l2{&m_joystick, 9};
frc::JoystickButton m_r1{&m_joystick, 12};
frc::JoystickButton m_r2{&m_joystick, 10};
DoubleButton m_sticks{&m_joystick, 2, 3};
};

View File

@@ -1,45 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/TimedRobot.h>
#include <frc/commands/Command.h>
#include <frc/smartdashboard/SendableChooser.h>
#include "OI.h"
#include "commands/DriveAndShootAutonomous.h"
#include "commands/DriveForward.h"
#include "subsystems/Collector.h"
#include "subsystems/Drivetrain.h"
#include "subsystems/Pivot.h"
#include "subsystems/Pneumatics.h"
#include "subsystems/Shooter.h"
class Robot : public frc::TimedRobot {
public:
static Drivetrain drivetrain;
static Pivot pivot;
static Collector collector;
static Shooter shooter;
static Pneumatics pneumatics;
static OI oi;
private:
frc::Command* m_autonomousCommand = nullptr;
DriveAndShootAutonomous m_driveAndShootAuto;
DriveForward m_driveForwardAuto;
frc::SendableChooser<frc::Command*> m_autoChooser;
void RobotInit() override;
void AutonomousInit() override;
void AutonomousPeriodic() override;
void TeleopInit() override;
void TeleopPeriodic() override;
void TestPeriodic() override;
void DisabledInit() override;
void DisabledPeriodic() override;
void Log();
};

View File

@@ -1,20 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/Command.h>
#include <units/time.h>
/**
* This command looks for the hot goal and waits until it's detected or timed
* out. The timeout is because it's better to shoot and get some autonomous
* points than get none. When called sequentially, this command will block until
* the hot goal is detected or until it is timed out.
*/
class CheckForHotGoal : public frc::Command {
public:
explicit CheckForHotGoal(units::second_t time);
bool IsFinished() override;
};

View File

@@ -1,19 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/InstantCommand.h>
/**
* Close the claw.
*
* NOTE: It doesn't wait for the claw to close since there is no sensor to
* detect that.
*/
class CloseClaw : public frc::InstantCommand {
public:
CloseClaw();
void Initialize() override;
};

View File

@@ -1,15 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/CommandGroup.h>
/**
* Get the robot set to collect balls.
*/
class Collect : public frc::CommandGroup {
public:
Collect();
};

View File

@@ -1,16 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/CommandGroup.h>
/**
* Drive over the line and then shoot the ball. If the hot goal is not detected,
* it will wait briefly.
*/
class DriveAndShootAutonomous : public frc::CommandGroup {
public:
DriveAndShootAutonomous();
};

View File

@@ -1,31 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/Command.h>
/**
* This command drives the robot over a given distance with simple proportional
* control This command will drive a given distance limiting to a maximum speed.
*/
class DriveForward : public frc::Command {
public:
DriveForward();
explicit DriveForward(double dist);
DriveForward(double dist, double maxSpeed);
void Initialize() override;
void Execute() override;
bool IsFinished() override;
void End() override;
private:
double m_driveForwardSpeed;
double m_distance;
double m_error = 0;
static constexpr double kTolerance = 0.1;
static constexpr double kP = -1.0 / 5.0;
void init(double dist, double maxSpeed);
};

View File

@@ -1,19 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/Command.h>
/**
* This command allows PS3 joystick to drive the robot. It is always running
* except when interrupted by another command.
*/
class DriveWithJoystick : public frc::Command {
public:
DriveWithJoystick();
void Execute() override;
bool IsFinished() override;
void End() override;
};

View File

@@ -1,17 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/TimedCommand.h>
/**
* Extend the shooter and then retract it after a second.
*/
class ExtendShooter : public frc::TimedCommand {
public:
ExtendShooter();
void Initialize() override;
void End() override;
};

View File

@@ -1,16 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/CommandGroup.h>
/**
* Spit the ball out into the low goal assuming that the robot is in front of
* it.
*/
class LowGoal : public frc::CommandGroup {
public:
LowGoal();
};

View File

@@ -1,17 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/Command.h>
/**
* Opens the claw
*/
class OpenClaw : public frc::Command {
public:
OpenClaw();
void Initialize() override;
bool IsFinished() override;
};

View File

@@ -1,21 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/InstantCommand.h>
/**
* This command sets the collector rollers spinning at the given speed. Since
* there is no sensor for detecting speed, it finishes immediately. As a result,
* the spinners may still be adjusting their speed.
*/
class SetCollectionSpeed : public frc::InstantCommand {
public:
explicit SetCollectionSpeed(double speed);
void Initialize() override;
private:
double m_speed;
};

View File

@@ -1,22 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/Command.h>
/**
* Moves the pivot to a given angle. This command finishes when it is within
* the tolerance, but leaves the PID loop running to maintain the position.
* Other commands using the pivot should make sure they disable PID!
*/
class SetPivotSetpoint : public frc::Command {
public:
explicit SetPivotSetpoint(double setpoint);
void Initialize() override;
bool IsFinished() override;
private:
double m_setpoint;
};

View File

@@ -1,15 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/CommandGroup.h>
/**
* Shoot the ball at the current angle.
*/
class Shoot : public frc::CommandGroup {
public:
Shoot();
};

View File

@@ -1,18 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/Command.h>
/**
* Wait until the collector senses that it has the ball. This command does
* nothing and is intended to be used in command groups to wait for this
* condition.
*/
class WaitForBall : public frc::Command {
public:
WaitForBall();
bool IsFinished() override;
};

View File

@@ -1,17 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/commands/Command.h>
/**
* Wait until the pneumatics are fully pressurized. This command does nothing
* and is intended to be used in command groups to wait for this condition.
*/
class WaitForPressure : public frc::Command {
public:
WaitForPressure();
bool IsFinished() override;
};

View File

@@ -1,73 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/DigitalInput.h>
#include <frc/Solenoid.h>
#include <frc/commands/Subsystem.h>
#include <frc/motorcontrol/PWMSparkMax.h>
/**
* The Collector subsystem has one motor for the rollers, a limit switch for
* ball
* detection, a piston for opening and closing the claw, and a reed switch to
* check if the piston is open.
*/
class Collector : public frc::Subsystem {
public:
// Constants for some useful speeds
static constexpr double kForward = 1;
static constexpr double kStop = 0;
static constexpr double kReverse = -1;
Collector();
/**
* NOTE: The current simulation model uses the the lower part of the
* claw
* since the limit switch wasn't exported. At some point, this will be
* updated.
*
* @return Whether or not the robot has the ball.
*/
bool HasBall();
/**
* @param speed The speed to spin the rollers.
*/
void SetSpeed(double speed);
/**
* Stop the rollers from spinning
*/
void Stop();
/**
* @return Whether or not the claw is open.
*/
bool IsOpen();
/**
* Open the claw up. (For shooting)
*/
void Open();
/**
* Close the claw. (For collecting and driving)
*/
void Close();
/**
* No default command.
*/
void InitDefaultCommand() override;
private:
// Subsystem devices
frc::PWMSparkMax m_rollerMotor{6};
frc::DigitalInput m_ballDetector{10};
frc::Solenoid m_piston{frc::PneumaticsModuleType::CTREPCM, 1};
frc::DigitalInput m_openDetector{6};
};

View File

@@ -1,76 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/AnalogGyro.h>
#include <frc/Encoder.h>
#include <frc/commands/Subsystem.h>
#include <frc/drive/DifferentialDrive.h>
#include <frc/motorcontrol/MotorControllerGroup.h>
#include <frc/motorcontrol/PWMSparkMax.h>
namespace frc {
class Joystick;
} // namespace frc
/**
* The Drivetrain subsystem controls the robot's chassis and reads in
* information about it's speed and position.
*/
class Drivetrain : public frc::Subsystem {
public:
Drivetrain();
/**
* When other commands aren't using the drivetrain, allow tank drive
* with
* the joystick.
*/
void InitDefaultCommand() override;
/**
* @param leftAxis Left sides value
* @param rightAxis Right sides value
*/
void TankDrive(double leftAxis, double rightAxis);
/**
* Stop the drivetrain from moving.
*/
void Stop();
/**
* @return The encoder getting the distance and speed of left side of
* the drivetrain.
*/
frc::Encoder& GetLeftEncoder();
/**
* @return The encoder getting the distance and speed of right side of
* the drivetrain.
*/
frc::Encoder& GetRightEncoder();
/**
* @return The current angle of the drivetrain.
*/
double GetAngle();
private:
// Subsystem devices
frc::PWMSparkMax m_frontLeftCIM{1};
frc::PWMSparkMax m_rearLeftCIM{2};
frc::MotorControllerGroup m_leftCIMs{m_frontLeftCIM, m_rearLeftCIM};
frc::PWMSparkMax m_frontRightCIM{3};
frc::PWMSparkMax m_rearRightCIM{4};
frc::MotorControllerGroup m_rightCIMs{m_frontRightCIM, m_rearRightCIM};
frc::DifferentialDrive m_robotDrive{m_leftCIMs, m_rightCIMs};
frc::Encoder m_rightEncoder{1, 2, true, frc::Encoder::k4X};
frc::Encoder m_leftEncoder{3, 4, false, frc::Encoder::k4X};
frc::AnalogGyro m_gyro{0};
};

View File

@@ -1,71 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/AnalogPotentiometer.h>
#include <frc/DigitalInput.h>
#include <frc/commands/PIDSubsystem.h>
#include <frc/motorcontrol/PWMSparkMax.h>
/**
* The Pivot subsystem contains the Van-door motor and the pot for PID control
* of angle of the pivot and claw.
*/
class Pivot : public frc::PIDSubsystem {
public:
// Constants for some useful angles
static constexpr double kCollect = 105;
static constexpr double kLowGoal = 90;
static constexpr double kShoot = 45;
static constexpr double kShootNear = 30;
Pivot();
/**
* No default command, if PID is enabled, the current setpoint will be
* maintained.
*/
void InitDefaultCommand() override {}
/**
* @return The angle read in by the potentiometer
*/
double ReturnPIDInput() override;
/**
* Set the motor speed based off of the PID output
*/
void UsePIDOutput(double output) override;
/**
* @return If the pivot is at its upper limit.
*/
bool IsAtUpperLimit();
/**
* @return If the pivot is at its lower limit.
*/
bool IsAtLowerLimit();
/**
* @return The current angle of the pivot.
*/
double GetAngle();
private:
// Subsystem devices
// Sensors for measuring the position of the pivot
frc::DigitalInput m_upperLimitSwitch{13};
frc::DigitalInput m_lowerLimitSwitch{12};
/* 0 degrees is vertical facing up.
* Angle increases the more forward the pivot goes.
*/
frc::AnalogPotentiometer m_pot{1};
// Motor to move the pivot
frc::PWMSparkMax m_motor{5};
};

View File

@@ -1,51 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/AnalogInput.h>
#include <frc/Compressor.h>
#include <frc/commands/Subsystem.h>
/**
* The Pneumatics subsystem contains the compressor and a pressure sensor.
*
* NOTE: The simulator currently doesn't support the compressor or pressure
* sensors.
*/
class Pneumatics : public frc::Subsystem {
public:
Pneumatics();
/**
* No default command
*/
void InitDefaultCommand() override;
/**
* Start the compressor going. The compressor automatically starts and
* stops as it goes above and below maximum pressure.
*/
void Start();
/**
* @return Whether or not the system is fully pressurized.
*/
bool IsPressurized();
/**
* Puts the pressure on the SmartDashboard.
*/
void WritePressure();
private:
frc::AnalogInput m_pressureSensor{3};
#ifndef SIMULATION
frc::Compressor m_compressor{
1, frc::PneumaticsModuleType::CTREPCM}; // TODO: (1, 14, 1, 8);
#endif
static constexpr double kMaxPressure = 2.55;
};

View File

@@ -1,124 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/DigitalInput.h>
#include <frc/DoubleSolenoid.h>
#include <frc/Solenoid.h>
#include <frc/commands/Subsystem.h>
/**
* The Shooter subsystem handles shooting. The mechanism for shooting is
* slightly complicated because it has to pneumatic cylinders for shooting, and
* a third latch to allow the pressure to partially build up and reduce the
* effect of the airflow. For shorter shots, when full power isn't needed, only
* one cylinder fires.
*
* NOTE: Simulation currently approximates this as as single pneumatic cylinder
* and ignores the latch.
*/
class Shooter : public frc::Subsystem {
public:
Shooter();
void InitDefaultCommand() override;
/**
* Extend both solenoids to shoot.
*/
void ExtendBoth();
/**
* Retract both solenoids to prepare to shoot.
*/
void RetractBoth();
/**
* Extend solenoid 1 to shoot.
*/
void Extend1();
/**
* Retract solenoid 1 to prepare to shoot.
*/
void Retract1();
/**
* Extend solenoid 2 to shoot.
*/
void Extend2();
/**
* Retract solenoid 2 to prepare to shoot.
*/
void Retract2();
/**
* Turns off the piston1 double solenoid. This won't actuate anything
* because double solenoids preserve their state when turned off. This
* should be called in order to reduce the amount of time that the coils
* are
* powered.
*/
void Off1();
/**
* Turns off the piston1 double solenoid. This won't actuate anything
* because double solenoids preserve their state when turned off. This
* should be called in order to reduce the amount of time that the coils
* are
* powered.
*/
void Off2();
/**
* Release the latch so that we can shoot
*/
void Unlatch();
/**
* Latch so that pressure can build up and we aren't limited by air
* flow.
*/
void Latch();
/**
* Toggles the latch postions
*/
void ToggleLatchPosition();
/**
* @return Whether or not piston 1 is fully extended.
*/
bool Piston1IsExtended();
/**
* @return Whether or not piston 1 is fully retracted.
*/
bool Piston1IsRetracted();
/**
* Turns off all double solenoids. Double solenoids hold their position
* when
* they are turned off. We should turn them off whenever possible to
* extend
* the life of the coils
*/
void OffBoth();
/**
* @return Whether or not the goal is hot as read by the banner sensor
*/
bool GoalIsHot();
private:
// Devices
frc::DoubleSolenoid m_piston1{frc::PneumaticsModuleType::CTREPCM, 3, 4};
frc::DoubleSolenoid m_piston2{frc::PneumaticsModuleType::CTREPCM, 5, 6};
frc::Solenoid m_latchPiston{1, frc::PneumaticsModuleType::CTREPCM, 2};
frc::DigitalInput m_piston1ReedSwitchFront{9};
frc::DigitalInput m_piston1ReedSwitchBack{11};
frc::DigitalInput m_hotGoalSensor{
7}; // NOTE: Currently ignored in simulation
};

View File

@@ -1,23 +0,0 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <frc/buttons/Trigger.h>
namespace frc {
class GenericHID;
} // namespace frc
class DoubleButton : public frc::Trigger {
public:
DoubleButton(frc::GenericHID* joy, int button1, int button2);
bool Get() override;
private:
frc::GenericHID& m_joy;
int m_button1;
int m_button2;
};

View File

@@ -282,17 +282,6 @@
"gradlebase": "cpp",
"commandversion": 2
},
{
"name": "PacGoat",
"description": "A fully functional example CommandBased program for FRC Team 190&#39;s 2014 robot. This code can run on your computer if it supports simulation.",
"tags": [
"CommandBased Robot",
"Complete List"
],
"foldername": "PacGoat",
"gradlebase": "cpp",
"commandversion": 1
},
{
"name": "HAL",
"description": "A program created using the HAL exclusively. This example is for advanced users",