diff options
| author | kartofen <mladenovnasko0@gmail.com> | 2024-03-03 23:20:11 +0200 | 
|---|---|---|
| committer | kartofen <mladenovnasko0@gmail.com> | 2024-03-03 23:20:11 +0200 | 
| commit | 39f4c3f833ec119a0060cb833c7a1953bca76eef (patch) | |
| tree | d943fd0f8d6f0e5edf423ee8ba24aabb671717c5 /src/main/java/frc/robot/subsystems/Arm.java | |
| parent | b929a1d34690d3d7fed6686459ff803962ce907f (diff) | |
more subsystems
Diffstat (limited to 'src/main/java/frc/robot/subsystems/Arm.java')
| -rw-r--r-- | src/main/java/frc/robot/subsystems/Arm.java | 59 | 
1 files changed, 59 insertions, 0 deletions
| diff --git a/src/main/java/frc/robot/subsystems/Arm.java b/src/main/java/frc/robot/subsystems/Arm.java new file mode 100644 index 0000000..dca7ebd --- /dev/null +++ b/src/main/java/frc/robot/subsystems/Arm.java @@ -0,0 +1,59 @@ +package frc.robot.subsystems; + +import org.littletonrobotics.junction.Logger; + +import com.revrobotics.CANSparkMax; +import com.revrobotics.RelativeEncoder; + +import edu.wpi.first.math.controller.ArmFeedforward; +import edu.wpi.first.math.controller.ProfiledPIDController; +import edu.wpi.first.wpilibj2.command.SubsystemBase; +import frc.robot.Constants; + +public class Arm extends SubsystemBase  +{ +    private final CANSparkMax m_armL = Constants.armL; +    private final CANSparkMax m_armR = Constants.armR; + +    private final RelativeEncoder m_encoderL = m_armL.getEncoder(); +    private final RelativeEncoder m_encoderR = m_armR.getEncoder(); + +    private final ArmFeedforward m_feedforward = Constants.arm_feedforward; + +    private final ProfiledPIDController m_pidL = new ProfiledPIDController(Constants.ArmkP, Constants.ArmkI, Constants.ArmkD, Constants.arm_constraints); +    private final ProfiledPIDController m_pidR = new ProfiledPIDController(Constants.ArmkP, Constants.ArmkI, Constants.ArmkD, Constants.arm_constraints); +     +    public Arm() +    {    +        m_armR.setInverted(true); + +        m_encoderL.setPositionConversionFactor(2*Math.PI / Constants.ArmGearReduction); +        m_encoderR.setPositionConversionFactor(2*Math.PI / Constants.ArmGearReduction); +    } + +    // in rad +    public void atAngle(double angle) +    { +        voltage( +            m_pidL.calculate(m_encoderL.getPosition()) +            + m_feedforward.calculate(m_pidL.getSetpoint().position, m_pidR.getSetpoint().velocity), + +            m_pidR.calculate(m_encoderR.getPosition()) +            + m_feedforward.calculate(m_pidR.getSetpoint().position, m_pidR.getSetpoint().velocity) +        ); +    } + + +    public void voltage(double leftVolts, double rightVolts) +    { +        m_armL.setVoltage(leftVolts); +        m_armR.setVoltage(rightVolts); +    } + +    @Override +    public void periodic()  +    { +        Logger.recordOutput(getName() + "/positionL", m_encoderL.getPosition()); +        Logger.recordOutput(getName() + "/positionR", m_encoderR.getPosition()); +    } +} | 
