generated from Programming-TRIGON/RobotTemplate
-
Notifications
You must be signed in to change notification settings - Fork 0
Elevator #6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Elevator #6
Changes from all commits
Commits
Show all changes
29 commits
Select commit
Hold shift + click to select a range
5385141
made elevator
noamgreen12 d8d27d7
im stupid
noamgreen12 978d1b3
added reverse limit switch constants
noamgreen12 0e7ed66
Merge branch 'main' into elevator
noamgreen12 2959e64
fixed minor changes
noamgreen12 6146f3a
added poses and did sysid
noamgreen12 6e05c54
stuff
noamgreen12 aef54d8
limit switch incostent fixed
noamgreen12 c0afce9
Merge branch 'main' into elevator
noamgreen12 cf4f03d
Changed trigon to lib
noamgreen12 32ad205
Update ElevatorConstants.java
noamgreen12 64b2087
added proper visualization origin points
ShmayaR 8c9a5dc
Merge branch 'main' into elevator
ShmayaR 249b0a4
Merge branch 'main' into elevator
ShmayaR f025518
Update ElevatorCommands.java
ShmayaR bfae858
Merge branch 'elevator' of https://github.com/Programming-TRIGON/Robo…
noamgreen12 341a63e
Tuned elevator.
noamgreen12 47752cf
blar blar
noamgreen12 9c7420b
The last commit name is: fixed poses calculation
noamgreen12 d809559
Fixed constants minor issues and in Elevator fixed readability.
noamgreen12 981b8a4
Removed redundant function.
noamgreen12 4254ae0
fixed a mixup
noamgreen12 66f0269
Merge branch 'main' into elevator
noamgreen12 8d3984c
Fixed pose logic and recalibrated pid.
noamgreen12 2d60740
Merge branch 'main' into elevator
ShmayaR 7cea435
Changed names of things.
noamgreen12 4051c7f
Merge branch 'elevator' of https://github.com/Programming-TRIGON/Robo…
noamgreen12 bb6b511
Changed name issue.
noamgreen12 222216c
Changed name to be accurate.
noamgreen12 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
135 changes: 135 additions & 0 deletions
135
src/main/java/frc/trigon/robot/subsystems/elevator/Elevator.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
package frc.trigon.robot.subsystems.elevator; | ||
|
||
import com.ctre.phoenix6.controls.DynamicMotionMagicVoltage; | ||
import com.ctre.phoenix6.controls.VoltageOut; | ||
import edu.wpi.first.math.geometry.Pose3d; | ||
import edu.wpi.first.math.geometry.Rotation3d; | ||
import edu.wpi.first.math.geometry.Transform3d; | ||
import edu.wpi.first.math.geometry.Translation3d; | ||
import edu.wpi.first.units.Units; | ||
import edu.wpi.first.wpilibj.sysid.SysIdRoutineLog; | ||
import edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine; | ||
import frc.trigon.robot.subsystems.MotorSubsystem; | ||
import org.littletonrobotics.junction.Logger; | ||
import lib.hardware.phoenix6.talonfx.TalonFXMotor; | ||
import lib.hardware.phoenix6.talonfx.TalonFXSignal; | ||
import lib.utilities.Conversions; | ||
|
||
public class Elevator extends MotorSubsystem { | ||
private final TalonFXMotor masterMotor = ElevatorConstants.MASTER_MOTOR; | ||
private final VoltageOut voltageRequest = new VoltageOut(0).withEnableFOC(ElevatorConstants.FOC_ENABLED); | ||
private final DynamicMotionMagicVoltage positionRequest = new DynamicMotionMagicVoltage( | ||
0, | ||
ElevatorConstants.DEFAULT_MAXIMUM_VELOCITY, | ||
ElevatorConstants.DEFAULT_MAXIMUM_ACCELERATION, | ||
ElevatorConstants.DEFAULT_MAXIMUM_ACCELERATION * 10 | ||
).withEnableFOC(ElevatorConstants.FOC_ENABLED); | ||
private ElevatorConstants.ElevatorState targetState = ElevatorConstants.ElevatorState.REST; | ||
|
||
public Elevator() { | ||
setName("Elevator"); | ||
} | ||
|
||
@Override | ||
public SysIdRoutine.Config getSysIDConfig() { | ||
return ElevatorConstants.SYSID_CONFIG; | ||
} | ||
|
||
@Override | ||
public void setBrake(boolean brake) { | ||
masterMotor.setBrake(brake); | ||
} | ||
|
||
@Override | ||
public void stop() { | ||
masterMotor.stopMotor(); | ||
} | ||
|
||
@Override | ||
public void updateLog(SysIdRoutineLog log) { | ||
log.motor("Elevator") | ||
.linearPosition(Units.Meters.of(getPositionRotations())) | ||
.linearVelocity(Units.MetersPerSecond.of(masterMotor.getSignal(TalonFXSignal.VELOCITY))) | ||
.voltage(Units.Volts.of(masterMotor.getSignal(TalonFXSignal.MOTOR_VOLTAGE))); | ||
} | ||
|
||
@Override | ||
public void sysIDDrive(double targetVoltage) { | ||
masterMotor.setControl(voltageRequest.withOutput(targetVoltage)); | ||
} | ||
|
||
@Override | ||
public void updateMechanism() { | ||
ElevatorConstants.MECHANISM.update( | ||
getPositionMeters(), | ||
rotationsToMeters(masterMotor.getSignal(TalonFXSignal.CLOSED_LOOP_REFERENCE)) | ||
); | ||
noamgreen12 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Logger.recordOutput("Poses/Components/ElevatorFirstPose", getFirstStageComponentPose()); | ||
Logger.recordOutput("Poses/Components/ElevatorSecondPose", getSecondStageComponentPose()); | ||
} | ||
|
||
@Override | ||
public void updatePeriodically() { | ||
masterMotor.update(); | ||
Logger.recordOutput("Elevator/CurrentPositionMeters", getPositionMeters()); | ||
} | ||
|
||
void setTargetState(ElevatorConstants.ElevatorState targetState) { | ||
this.targetState = targetState; | ||
scalePositionRequestSpeed(targetState.speedScalar); | ||
setTargetPositionRotations(metersToRotations(targetState.targetPositionMeters)); | ||
} | ||
|
||
void setTargetPositionRotations(double targetPositionRotations) { | ||
masterMotor.setControl(positionRequest.withPosition(targetPositionRotations)); | ||
} | ||
|
||
private Pose3d getFirstStageComponentPose() { | ||
return calculateComponentPose(ElevatorConstants.ELEVATOR_FIRST_STAGE_VISUALIZATION_ORIGIN_POINT, getFirstStageComponentPoseHeight()); | ||
} | ||
|
||
private Pose3d getSecondStageComponentPose() { | ||
return calculateComponentPose(ElevatorConstants.ELEVATOR_SECOND_STAGE_VISUALIZATION_ORIGIN_POINT, getPositionMeters()); | ||
} | ||
|
||
private double getFirstStageComponentPoseHeight() { | ||
if (isSecondStageComponentLimitReached()) | ||
return getPositionMeters() - ElevatorConstants.SECOND_ELEVATOR_COMPONENT_EXTENDED_LENGTH_METERS; | ||
return 0; | ||
} | ||
|
||
private boolean isSecondStageComponentLimitReached() { | ||
return getPositionMeters() > ElevatorConstants.SECOND_ELEVATOR_COMPONENT_EXTENDED_LENGTH_METERS; | ||
} | ||
|
||
private Pose3d calculateComponentPose(Pose3d originPoint, double currentHeight) { | ||
final Transform3d elevatorTransform = new Transform3d( | ||
new Translation3d(0, 0, currentHeight), | ||
new Rotation3d() | ||
); | ||
return originPoint.transformBy(elevatorTransform); | ||
} | ||
noamgreen12 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
private void scalePositionRequestSpeed(double speedScalar) { | ||
noamgreen12 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
positionRequest.Velocity = ElevatorConstants.DEFAULT_MAXIMUM_VELOCITY * speedScalar; | ||
positionRequest.Acceleration = ElevatorConstants.DEFAULT_MAXIMUM_ACCELERATION * speedScalar; | ||
positionRequest.Jerk = positionRequest.Acceleration * 10; | ||
} | ||
|
||
private double getPositionMeters() { | ||
return rotationsToMeters(getPositionRotations()); | ||
} | ||
|
||
noamgreen12 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
private double rotationsToMeters(double positionsRotations) { | ||
return Conversions.rotationsToDistance(positionsRotations, ElevatorConstants.DRUM_DIAMETER_METERS); | ||
} | ||
|
||
private double metersToRotations(double positionsMeters) { | ||
return Conversions.distanceToRotations(positionsMeters, ElevatorConstants.DRUM_DIAMETER_METERS); | ||
} | ||
|
||
private double getPositionRotations() { | ||
return masterMotor.getSignal(TalonFXSignal.POSITION); | ||
} | ||
} |
35 changes: 35 additions & 0 deletions
35
src/main/java/frc/trigon/robot/subsystems/elevator/ElevatorCommands.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package frc.trigon.robot.subsystems.elevator; | ||
|
||
import edu.wpi.first.wpilibj2.command.Command; | ||
import edu.wpi.first.wpilibj2.command.StartEndCommand; | ||
import frc.trigon.robot.RobotContainer; | ||
import lib.commands.NetworkTablesCommand; | ||
|
||
import java.util.Set; | ||
|
||
public class ElevatorCommands { | ||
public static Command getDebbugingCommand() { | ||
return new NetworkTablesCommand( | ||
RobotContainer.ELEVATOR::setTargetPositionRotations, | ||
false, | ||
Set.of(RobotContainer.ELEVATOR), | ||
"Debugging/ElevatorTargetPositionRotations" | ||
); | ||
} | ||
|
||
public static Command getSetTargetStateCommand(ElevatorConstants.ElevatorState targetState) { | ||
noamgreen12 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
return new StartEndCommand( | ||
() -> RobotContainer.ELEVATOR.setTargetState(targetState), | ||
RobotContainer.ELEVATOR::stop, | ||
RobotContainer.ELEVATOR | ||
); | ||
} | ||
|
||
public static Command getSetTargetStateCommand(double targetPositionRotations) { | ||
return new StartEndCommand( | ||
() -> RobotContainer.ELEVATOR.setTargetPositionRotations(targetPositionRotations), | ||
RobotContainer.ELEVATOR::stop, | ||
RobotContainer.ELEVATOR | ||
); | ||
} | ||
} |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.