/*----------------------------------------------------------------------------*/ /* Copyright (c) 2019 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. */ /*----------------------------------------------------------------------------*/ #pragma once #include #include #include #include #include #include #include "Constants.h" #include "ExampleSmartMotorController.h" class DriveSubsystem : public frc2::SubsystemBase { public: DriveSubsystem(); /** * Will be called periodically whenever the CommandScheduler runs. */ void Periodic() override; // Subsystem methods go here. /** * Attempts to follow the given drive states using offboard PID. * * @param left The left wheel state. * @param right The right wheel state. */ void SetDriveStates(frc::TrapezoidProfile::State left, frc::TrapezoidProfile::State right); /** * Drives the robot using arcade controls. * * @param fwd the commanded forward movement * @param rot the commanded rotation */ void ArcadeDrive(double fwd, double rot); /** * Resets the drive encoders to currently read a position of 0. */ void ResetEncoders(); /** * Gets the distance of the left encoder. * * @return the average of the TWO encoder readings */ units::meter_t GetLeftEncoderDistance(); /** * Gets the distance of the right encoder. * * @return the average of the TWO encoder readings */ units::meter_t GetRightEncoderDistance(); /** * Sets the max output of the drive. Useful for scaling the drive to drive * more slowly. * * @param maxOutput the maximum output to which the drive will be constrained */ void SetMaxOutput(double maxOutput); private: // Components (e.g. motor controllers and sensors) should generally be // declared private and exposed only through public methods. // The motor controllers ExampleSmartMotorController m_leftMaster; ExampleSmartMotorController m_leftSlave; ExampleSmartMotorController m_rightMaster; ExampleSmartMotorController m_rightSlave; // A feedforward component for the drive frc::SimpleMotorFeedforward m_feedforward; // The robot's drive frc::DifferentialDrive m_drive{m_leftMaster, m_rightMaster}; };