2026-02-20 18:30:35 -05:00
|
|
|
#
|
|
|
|
|
# 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.
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
import commands2
|
|
|
|
|
import commands2.cmd
|
|
|
|
|
|
|
|
|
|
import subsystems.drivesubsystem
|
|
|
|
|
import subsystems.hatchsubsystem
|
|
|
|
|
|
|
|
|
|
import constants
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Autos:
|
|
|
|
|
"""Container for auto command factories."""
|
|
|
|
|
|
|
|
|
|
def __init__(self) -> None:
|
|
|
|
|
raise Exception("This is a utility class!")
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def simpleAuto(drive: subsystems.drivesubsystem.DriveSubsystem):
|
|
|
|
|
"""A simple auto routine that drives forward a specified distance, and then stops."""
|
|
|
|
|
return commands2.FunctionalCommand(
|
|
|
|
|
# Reset encoders on command start
|
|
|
|
|
drive.resetEncoders,
|
|
|
|
|
# Drive forward while the command is executing,
|
2026-03-06 14:19:15 -08:00
|
|
|
lambda: drive.arcadeDrive(constants.kAutoDriveVelocity, 0),
|
2026-02-20 18:30:35 -05:00
|
|
|
# Stop driving at the end of the command
|
|
|
|
|
lambda interrupt: drive.arcadeDrive(0, 0),
|
|
|
|
|
# End the command when the robot's driven distance exceeds the desired value
|
|
|
|
|
lambda: drive.getAverageEncoderDistance()
|
|
|
|
|
>= constants.kAutoDriveDistanceInches,
|
|
|
|
|
# Require the drive subsystem
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def complexAuto(
|
|
|
|
|
driveSubsystem: subsystems.drivesubsystem.DriveSubsystem,
|
|
|
|
|
hatchSubsystem: subsystems.hatchsubsystem.HatchSubsystem,
|
|
|
|
|
):
|
|
|
|
|
"""A complex auto routine that drives forward, drops a hatch, and then drives backward."""
|
|
|
|
|
return commands2.cmd.sequence(
|
|
|
|
|
# Drive forward up to the front of the cargo ship
|
|
|
|
|
commands2.FunctionalCommand(
|
|
|
|
|
# Reset encoders on command start
|
|
|
|
|
driveSubsystem.resetEncoders,
|
|
|
|
|
# Drive forward while the command is executing
|
2026-03-06 14:19:15 -08:00
|
|
|
lambda: driveSubsystem.arcadeDrive(constants.kAutoDriveVelocity, 0),
|
2026-02-20 18:30:35 -05:00
|
|
|
# Stop driving at the end of the command
|
|
|
|
|
lambda interrupt: driveSubsystem.arcadeDrive(0, 0),
|
|
|
|
|
# End the command when the robot's driven distance exceeds the desired value
|
|
|
|
|
lambda: driveSubsystem.getAverageEncoderDistance()
|
|
|
|
|
>= constants.kAutoDriveDistanceInches,
|
|
|
|
|
# Require the drive subsystem
|
|
|
|
|
driveSubsystem,
|
|
|
|
|
),
|
|
|
|
|
# Release the hatch
|
|
|
|
|
hatchSubsystem.releaseHatch(),
|
|
|
|
|
# Drive backward the specified distance
|
|
|
|
|
commands2.FunctionalCommand(
|
|
|
|
|
# Reset encoders on command start
|
|
|
|
|
driveSubsystem.resetEncoders,
|
|
|
|
|
# Drive backwards while the command is executing
|
2026-03-06 14:19:15 -08:00
|
|
|
lambda: driveSubsystem.arcadeDrive(-constants.kAutoDriveVelocity, 0),
|
2026-02-20 18:30:35 -05:00
|
|
|
# Stop driving at the end of the command
|
|
|
|
|
lambda interrupt: driveSubsystem.arcadeDrive(0, 0),
|
|
|
|
|
# End the command when the robot's driven distance exceeds the desired value
|
|
|
|
|
lambda: abs(driveSubsystem.getAverageEncoderDistance())
|
|
|
|
|
>= constants.kAutoBackupDistanceInches,
|
|
|
|
|
# Require the drive subsystem
|
|
|
|
|
driveSubsystem,
|
|
|
|
|
),
|
|
|
|
|
)
|