mirror of
https://github.com/Team4388/2023WayOfTheRobot.git
synced 2026-06-09 00:37:59 -06:00
added pid controller
This commit is contained in:
@@ -7,9 +7,13 @@
|
|||||||
|
|
||||||
package frc4388.robot;
|
package frc4388.robot;
|
||||||
|
|
||||||
|
import com.ctre.phoenix.sensors.WPI_Pigeon2;
|
||||||
|
|
||||||
import edu.wpi.first.wpilibj.TimedRobot;
|
import edu.wpi.first.wpilibj.TimedRobot;
|
||||||
|
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
|
||||||
import edu.wpi.first.wpilibj2.command.Command;
|
import edu.wpi.first.wpilibj2.command.Command;
|
||||||
import edu.wpi.first.wpilibj2.command.CommandScheduler;
|
import edu.wpi.first.wpilibj2.command.CommandScheduler;
|
||||||
|
import frc4388.utility.RobotGyro;
|
||||||
import frc4388.utility.RobotTime;
|
import frc4388.utility.RobotTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -106,6 +110,8 @@ public class Robot extends TimedRobot {
|
|||||||
m_autonomousCommand.cancel();
|
m_autonomousCommand.cancel();
|
||||||
}
|
}
|
||||||
m_robotTime.startMatchTime();
|
m_robotTime.startMatchTime();
|
||||||
|
|
||||||
|
m_robotContainer.gyroRef.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -113,7 +119,9 @@ public class Robot extends TimedRobot {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void teleopPeriodic() {
|
public void teleopPeriodic() {
|
||||||
|
SmartDashboard.putNumber("yaw", m_robotContainer.gyroRef.getAngle());
|
||||||
|
SmartDashboard.putNumber("pitch", m_robotContainer.gyroRef.getPitch());
|
||||||
|
SmartDashboard.putNumber("roll", m_robotContainer.gyroRef.getRoll());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import edu.wpi.first.wpilibj2.command.button.JoystickButton;
|
|||||||
import frc4388.robot.Constants.*;
|
import frc4388.robot.Constants.*;
|
||||||
import frc4388.robot.subsystems.LED;
|
import frc4388.robot.subsystems.LED;
|
||||||
import frc4388.utility.LEDPatterns;
|
import frc4388.utility.LEDPatterns;
|
||||||
|
import frc4388.utility.RobotGyro;
|
||||||
import frc4388.utility.controller.IHandController;
|
import frc4388.utility.controller.IHandController;
|
||||||
import frc4388.utility.controller.XboxController;
|
import frc4388.utility.controller.XboxController;
|
||||||
|
|
||||||
@@ -36,6 +37,8 @@ public class RobotContainer {
|
|||||||
private final XboxController m_driverXbox = new XboxController(OIConstants.XBOX_DRIVER_ID);
|
private final XboxController m_driverXbox = new XboxController(OIConstants.XBOX_DRIVER_ID);
|
||||||
private final XboxController m_operatorXbox = new XboxController(OIConstants.XBOX_OPERATOR_ID);
|
private final XboxController m_operatorXbox = new XboxController(OIConstants.XBOX_OPERATOR_ID);
|
||||||
|
|
||||||
|
public RobotGyro gyroRef = m_robotMap.gyro;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The container for the robot. Contains subsystems, OI devices, and commands.
|
* The container for the robot. Contains subsystems, OI devices, and commands.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import com.ctre.phoenix.motorcontrol.InvertType;
|
|||||||
import com.ctre.phoenix.motorcontrol.NeutralMode;
|
import com.ctre.phoenix.motorcontrol.NeutralMode;
|
||||||
import com.ctre.phoenix.motorcontrol.can.WPI_TalonFX;
|
import com.ctre.phoenix.motorcontrol.can.WPI_TalonFX;
|
||||||
import com.ctre.phoenix.sensors.PigeonIMU;
|
import com.ctre.phoenix.sensors.PigeonIMU;
|
||||||
|
import com.ctre.phoenix.sensors.WPI_Pigeon2;
|
||||||
|
|
||||||
import edu.wpi.first.wpilibj.motorcontrol.Spark;
|
import edu.wpi.first.wpilibj.motorcontrol.Spark;
|
||||||
import edu.wpi.first.wpilibj.drive.DifferentialDrive;
|
import edu.wpi.first.wpilibj.drive.DifferentialDrive;
|
||||||
@@ -22,6 +23,8 @@ import frc4388.utility.RobotGyro;
|
|||||||
* testing and modularization.
|
* testing and modularization.
|
||||||
*/
|
*/
|
||||||
public class RobotMap {
|
public class RobotMap {
|
||||||
|
private WPI_Pigeon2 m_pigeon2 = new WPI_Pigeon2(14);
|
||||||
|
public RobotGyro gyro = new RobotGyro(m_pigeon2);
|
||||||
|
|
||||||
public RobotMap() {
|
public RobotMap() {
|
||||||
configureLEDMotorControllers();
|
configureLEDMotorControllers();
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
package frc4388.robot.commands;
|
||||||
|
|
||||||
|
import edu.wpi.first.math.controller.PIDController;
|
||||||
|
import edu.wpi.first.wpilibj2.command.PIDCommand;
|
||||||
|
|
||||||
|
// NOTE: Consider using this command inline, rather than writing a subclass. For more
|
||||||
|
// information, see:
|
||||||
|
// https://docs.wpilib.org/en/stable/docs/software/commandbased/convenience-features.html
|
||||||
|
public class AutoBalanceTF2 extends PIDCommand {
|
||||||
|
/** Creates a new AutoBalanceTF2. */
|
||||||
|
public AutoBalanceTF2() {
|
||||||
|
super(
|
||||||
|
// The controller that the command will use
|
||||||
|
new PIDController(0, 0, 0),
|
||||||
|
// This should return the measurement
|
||||||
|
() -> 0,
|
||||||
|
// This should return the setpoint (can also be a constant)
|
||||||
|
() -> 0,
|
||||||
|
// This uses the output
|
||||||
|
output -> {
|
||||||
|
// Use the output here
|
||||||
|
});
|
||||||
|
// Use addRequirements() here to declare subsystem dependencies.
|
||||||
|
// Configure additional PID options by calling `getController` here.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns true when the command should end.
|
||||||
|
@Override
|
||||||
|
public boolean isFinished() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
package frc4388.utility;
|
package frc4388.utility;
|
||||||
|
|
||||||
import com.ctre.phoenix.sensors.PigeonIMU;
|
import com.ctre.phoenix.sensors.PigeonIMU;
|
||||||
|
import com.ctre.phoenix.sensors.WPI_Pigeon2;
|
||||||
import com.ctre.phoenix.sensors.PigeonIMU.CalibrationMode;
|
import com.ctre.phoenix.sensors.PigeonIMU.CalibrationMode;
|
||||||
import com.kauailabs.navx.frc.AHRS;
|
import com.kauailabs.navx.frc.AHRS;
|
||||||
|
|
||||||
@@ -21,14 +22,13 @@ import edu.wpi.first.math.MathUtil;
|
|||||||
public class RobotGyro implements Gyro {
|
public class RobotGyro implements Gyro {
|
||||||
private RobotTime m_robotTime = RobotTime.getInstance();
|
private RobotTime m_robotTime = RobotTime.getInstance();
|
||||||
|
|
||||||
private PigeonIMU m_pigeon = null;
|
private WPI_Pigeon2 m_pigeon = null;
|
||||||
private AHRS m_navX = null;
|
private AHRS m_navX = null;
|
||||||
public boolean m_isGyroAPigeon; //true if pigeon, false if navX
|
public boolean m_isGyroAPigeon; //true if pigeon, false if navX
|
||||||
|
|
||||||
private double m_lastPigeonAngle;
|
private double m_lastPigeonAngle;
|
||||||
private double m_deltaPigeonAngle;
|
private double m_deltaPigeonAngle;
|
||||||
|
|
||||||
private double yawZero = 0;
|
|
||||||
private double pitchZero = 0;
|
private double pitchZero = 0;
|
||||||
private double rollZero = 0;
|
private double rollZero = 0;
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ public class RobotGyro implements Gyro {
|
|||||||
* Creates a Gyro based on a pigeon
|
* Creates a Gyro based on a pigeon
|
||||||
* @param gyro the gyroscope to use for Gyro
|
* @param gyro the gyroscope to use for Gyro
|
||||||
*/
|
*/
|
||||||
public RobotGyro(PigeonIMU gyro) {
|
public RobotGyro(WPI_Pigeon2 gyro) {
|
||||||
m_pigeon = gyro;
|
m_pigeon = gyro;
|
||||||
m_isGyroAPigeon = true;
|
m_isGyroAPigeon = true;
|
||||||
}
|
}
|
||||||
@@ -53,10 +53,9 @@ public class RobotGyro implements Gyro {
|
|||||||
/**
|
/**
|
||||||
* Resets yaw, pitch, and roll.
|
* Resets yaw, pitch, and roll.
|
||||||
*/
|
*/
|
||||||
public void resetAllAngles() {
|
public void resetZeroValues() {
|
||||||
if (!m_isGyroAPigeon) return;
|
if (!m_isGyroAPigeon) return;
|
||||||
|
|
||||||
yawZero = m_pigeon.getYaw();
|
|
||||||
pitchZero = m_pigeon.getPitch();
|
pitchZero = m_pigeon.getPitch();
|
||||||
rollZero = m_pigeon.getRoll();
|
rollZero = m_pigeon.getRoll();
|
||||||
}
|
}
|
||||||
@@ -90,7 +89,7 @@ public class RobotGyro implements Gyro {
|
|||||||
@Override
|
@Override
|
||||||
public void calibrate() {
|
public void calibrate() {
|
||||||
if (m_isGyroAPigeon) {
|
if (m_isGyroAPigeon) {
|
||||||
m_pigeon.enterCalibrationMode(CalibrationMode.Temperature);
|
m_pigeon.calibrate();
|
||||||
} else {
|
} else {
|
||||||
m_navX.calibrate();
|
m_navX.calibrate();
|
||||||
}
|
}
|
||||||
@@ -98,6 +97,8 @@ public class RobotGyro implements Gyro {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset() {
|
public void reset() {
|
||||||
|
resetZeroValues();
|
||||||
|
|
||||||
if (m_isGyroAPigeon) {
|
if (m_isGyroAPigeon) {
|
||||||
m_pigeon.setYaw(0);
|
m_pigeon.setYaw(0);
|
||||||
} else {
|
} else {
|
||||||
@@ -117,7 +118,7 @@ public class RobotGyro implements Gyro {
|
|||||||
double[] ypr = new double[3];
|
double[] ypr = new double[3];
|
||||||
m_pigeon.getYawPitchRoll(ypr);
|
m_pigeon.getYawPitchRoll(ypr);
|
||||||
|
|
||||||
return new double[] {(ypr[0] - yawZero), (ypr[1] - pitchZero), (ypr[2] - rollZero)};
|
return new double[] {ypr[0], (ypr[1] - pitchZero), (ypr[2] - rollZero)};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -182,7 +183,7 @@ public class RobotGyro implements Gyro {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public PigeonIMU getPigeon(){
|
public WPI_Pigeon2 getPigeon(){
|
||||||
return m_pigeon;
|
return m_pigeon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user