Interface Command
-
- All Known Implementing Classes:
CommandBase
,CommandGroupBase
,ConditionalCommand
,FunctionalCommand
,InstantCommand
,MecanumControllerCommand
,NotifierCommand
,ParallelCommandGroup
,ParallelDeadlineGroup
,ParallelRaceGroup
,PerpetualCommand
,PIDCommand
,PrintCommand
,ProfiledPIDCommand
,ProxyScheduleCommand
,RamseteCommand
,RunCommand
,ScheduleCommand
,SelectCommand
,SequentialCommandGroup
,StartEndCommand
,SwerveControllerCommand
,TrapezoidProfileCommand
,WaitCommand
,WaitUntilCommand
public interface Command
A state machine representing a complete action to be performed by the robot. Commands are run by theCommandScheduler
, and can be composed into CommandGroups to allow users to build complicated multi-step actions without the need to roll the state machine logic themselves.Commands are run synchronously from the main robot loop; no multithreading is used, unless specified explicitly from the command implementation.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description default ParallelCommandGroup
alongWith(Command... parallel)
Decorates this command with a set of commands to run parallel to it, ending when the last command ends.default SequentialCommandGroup
andThen(Command... next)
Decorates this command with a set of commands to run after it in sequence.default SequentialCommandGroup
andThen(Runnable toRun, Subsystem... requirements)
Decorates this command with a runnable to run after the command finishes.default ProxyScheduleCommand
asProxy()
Decorates this command to run "by proxy" by wrapping it in aProxyScheduleCommand
.default SequentialCommandGroup
beforeStarting(Command before)
Decorates this command with another command to run before this command starts.default SequentialCommandGroup
beforeStarting(Runnable toRun, Subsystem... requirements)
Decorates this command with a runnable to run before this command starts.default void
cancel()
Cancels this command.default ParallelDeadlineGroup
deadlineWith(Command... parallel)
Decorates this command with a set of commands to run parallel to it, ending when the calling command ends and interrupting all the others.default void
end(boolean interrupted)
The action to take when the command ends.default void
execute()
The main body of a command.default String
getName()
Gets the name of this Command.Set<Subsystem>
getRequirements()
Specifies the set of subsystems used by this command.default boolean
hasRequirement(Subsystem requirement)
Whether the command requires a given subsystem.default void
initialize()
The initial subroutine of a command.default boolean
isFinished()
Whether the command has finished.default boolean
isScheduled()
Whether or not the command is currently scheduled.default PerpetualCommand
perpetually()
Decorates this command to run perpetually, ignoring its ordinary end conditions.default ParallelRaceGroup
raceWith(Command... parallel)
Decorates this command with a set of commands to run parallel to it, ending when the first command ends.default boolean
runsWhenDisabled()
Whether the given command should run when the robot is disabled.default void
schedule()
Schedules this command, defaulting to interruptible.default void
schedule(boolean interruptible)
Schedules this command.default ParallelRaceGroup
withInterrupt(BooleanSupplier condition)
Decorates this command with an interrupt condition.default ParallelRaceGroup
withTimeout(double seconds)
Decorates this command with a timeout.
-
-
-
Method Detail
-
initialize
default void initialize()
The initial subroutine of a command. Called once when the command is initially scheduled.
-
execute
default void execute()
The main body of a command. Called repeatedly while the command is scheduled.
-
end
default void end(boolean interrupted)
The action to take when the command ends. Called when either the command finishes normally, or when it interrupted/canceled.Do not schedule commands here that share requirements with this command. Use
andThen(Command...)
instead.- Parameters:
interrupted
- whether the command was interrupted/canceled
-
isFinished
default boolean isFinished()
Whether the command has finished. Once a command finishes, the scheduler will call its end() method and un-schedule it.- Returns:
- whether the command has finished.
-
getRequirements
Set<Subsystem> getRequirements()
Specifies the set of subsystems used by this command. Two commands cannot use the same subsystem at the same time. If the command is scheduled as interruptible and another command is scheduled that shares a requirement, the command will be interrupted. Else, the command will not be scheduled. If no subsystems are required, return an empty set.Note: it is recommended that user implementations contain the requirements as a field, and return that field here, rather than allocating a new set every time this is called.
- Returns:
- the set of subsystems that are required
-
withTimeout
default ParallelRaceGroup withTimeout(double seconds)
Decorates this command with a timeout. If the specified timeout is exceeded before the command finishes normally, the command will be interrupted and un-scheduled. Note that the timeout only applies to the command returned by this method; the calling command is not itself changed.Note: This decorator works by composing this command within a CommandGroup. The command cannot be used independently after being decorated, or be re-decorated with a different decorator, unless it is manually cleared from the list of grouped commands with
CommandGroupBase.clearGroupedCommand(Command)
. The decorated command can, however, be further decorated without issue.- Parameters:
seconds
- the timeout duration- Returns:
- the command with the timeout added
-
withInterrupt
default ParallelRaceGroup withInterrupt(BooleanSupplier condition)
Decorates this command with an interrupt condition. If the specified condition becomes true before the command finishes normally, the command will be interrupted and un-scheduled. Note that this only applies to the command returned by this method; the calling command is not itself changed.Note: This decorator works by composing this command within a CommandGroup. The command cannot be used independently after being decorated, or be re-decorated with a different decorator, unless it is manually cleared from the list of grouped commands with
CommandGroupBase.clearGroupedCommand(Command)
. The decorated command can, however, be further decorated without issue.- Parameters:
condition
- the interrupt condition- Returns:
- the command with the interrupt condition added
-
beforeStarting
default SequentialCommandGroup beforeStarting(Runnable toRun, Subsystem... requirements)
Decorates this command with a runnable to run before this command starts.Note: This decorator works by composing this command within a CommandGroup. The command cannot be used independently after being decorated, or be re-decorated with a different decorator, unless it is manually cleared from the list of grouped commands with
CommandGroupBase.clearGroupedCommand(Command)
. The decorated command can, however, be further decorated without issue.- Parameters:
toRun
- the Runnable to runrequirements
- the required subsystems- Returns:
- the decorated command
-
beforeStarting
default SequentialCommandGroup beforeStarting(Command before)
Decorates this command with another command to run before this command starts.Note: This decorator works by composing this command within a CommandGroup. The command cannot be used independently after being decorated, or be re-decorated with a different decorator, unless it is manually cleared from the list of grouped commands with
CommandGroupBase.clearGroupedCommand(Command)
. The decorated command can, however, be further decorated without issue.- Parameters:
before
- the command to run before this one- Returns:
- the decorated command
-
andThen
default SequentialCommandGroup andThen(Runnable toRun, Subsystem... requirements)
Decorates this command with a runnable to run after the command finishes.Note: This decorator works by composing this command within a CommandGroup. The command cannot be used independently after being decorated, or be re-decorated with a different decorator, unless it is manually cleared from the list of grouped commands with
CommandGroupBase.clearGroupedCommand(Command)
. The decorated command can, however, be further decorated without issue.- Parameters:
toRun
- the Runnable to runrequirements
- the required subsystems- Returns:
- the decorated command
-
andThen
default SequentialCommandGroup andThen(Command... next)
Decorates this command with a set of commands to run after it in sequence. Often more convenient/less-verbose than constructing a newSequentialCommandGroup
explicitly.Note: This decorator works by composing this command within a CommandGroup. The command cannot be used independently after being decorated, or be re-decorated with a different decorator, unless it is manually cleared from the list of grouped commands with
CommandGroupBase.clearGroupedCommand(Command)
. The decorated command can, however, be further decorated without issue.- Parameters:
next
- the commands to run next- Returns:
- the decorated command
-
deadlineWith
default ParallelDeadlineGroup deadlineWith(Command... parallel)
Decorates this command with a set of commands to run parallel to it, ending when the calling command ends and interrupting all the others. Often more convenient/less-verbose than constructing a newParallelDeadlineGroup
explicitly.Note: This decorator works by composing this command within a CommandGroup. The command cannot be used independently after being decorated, or be re-decorated with a different decorator, unless it is manually cleared from the list of grouped commands with
CommandGroupBase.clearGroupedCommand(Command)
. The decorated command can, however, be further decorated without issue.- Parameters:
parallel
- the commands to run in parallel- Returns:
- the decorated command
-
alongWith
default ParallelCommandGroup alongWith(Command... parallel)
Decorates this command with a set of commands to run parallel to it, ending when the last command ends. Often more convenient/less-verbose than constructing a newParallelCommandGroup
explicitly.Note: This decorator works by composing this command within a CommandGroup. The command cannot be used independently after being decorated, or be re-decorated with a different decorator, unless it is manually cleared from the list of grouped commands with
CommandGroupBase.clearGroupedCommand(Command)
. The decorated command can, however, be further decorated without issue.- Parameters:
parallel
- the commands to run in parallel- Returns:
- the decorated command
-
raceWith
default ParallelRaceGroup raceWith(Command... parallel)
Decorates this command with a set of commands to run parallel to it, ending when the first command ends. Often more convenient/less-verbose than constructing a newParallelRaceGroup
explicitly.Note: This decorator works by composing this command within a CommandGroup. The command cannot be used independently after being decorated, or be re-decorated with a different decorator, unless it is manually cleared from the list of grouped commands with
CommandGroupBase.clearGroupedCommand(Command)
. The decorated command can, however, be further decorated without issue.- Parameters:
parallel
- the commands to run in parallel- Returns:
- the decorated command
-
perpetually
default PerpetualCommand perpetually()
Decorates this command to run perpetually, ignoring its ordinary end conditions. The decorated command can still be interrupted or canceled.Note: This decorator works by composing this command within a CommandGroup. The command cannot be used independently after being decorated, or be re-decorated with a different decorator, unless it is manually cleared from the list of grouped commands with
CommandGroupBase.clearGroupedCommand(Command)
. The decorated command can, however, be further decorated without issue.- Returns:
- the decorated command
-
asProxy
default ProxyScheduleCommand asProxy()
Decorates this command to run "by proxy" by wrapping it in aProxyScheduleCommand
. This is useful for "forking off" from command groups when the user does not wish to extend the command's requirements to the entire command group.- Returns:
- the decorated command
-
schedule
default void schedule(boolean interruptible)
Schedules this command.- Parameters:
interruptible
- whether this command can be interrupted by another command that shares one of its requirements
-
schedule
default void schedule()
Schedules this command, defaulting to interruptible.
-
cancel
default void cancel()
Cancels this command. Will call the command's interrupted() method. Commands will be canceled even if they are not marked as interruptible.
-
isScheduled
default boolean isScheduled()
Whether or not the command is currently scheduled. Note that this does not detect whether the command is being run by a CommandGroup, only whether it is directly being run by the scheduler.- Returns:
- Whether the command is scheduled.
-
hasRequirement
default boolean hasRequirement(Subsystem requirement)
Whether the command requires a given subsystem.- Parameters:
requirement
- the subsystem to inquire about- Returns:
- whether the subsystem is required
-
runsWhenDisabled
default boolean runsWhenDisabled()
Whether the given command should run when the robot is disabled. Override to return true if the command should run when disabled.- Returns:
- whether the command should run when the robot is disabled
-
-