Class CommandGroup
- All Implemented Interfaces:
Sendable
,AutoCloseable
public class CommandGroup extends Command
CommandGroup
is a list of commands which are executed in sequence.
Commands in a CommandGroup
are added using the addSequential(...)
method and are called sequentially.
CommandGroups
are themselves commands
and can be given to
other CommandGroups
.
CommandGroups
will carry all of the requirements of their subcommands
. Additional requirements can be specified by calling requires(...)
normally in the constructor.
CommandGroups can also execute commands in parallel, simply by adding them using addParallel(...)
.
- See Also:
Command
,Subsystem
,IllegalUseOfCommandException
-
Constructor Summary
Constructors Constructor Description CommandGroup()
Creates a newCommandGroup
.CommandGroup(String name)
Creates a newCommandGroup
with the given name. -
Method Summary
Modifier and Type Method Description void
addParallel(Command command)
Adds a new childCommand
to the group.void
addParallel(Command command, double timeout)
Adds a new childCommand
to the group with the given timeout.void
addSequential(Command command)
Adds a newCommand
to the group.void
addSequential(Command command, double timeout)
Adds a newCommand
to the group with a given timeout.protected void
end()
Called when the command ended peacefully.protected void
execute()
The execute method is called repeatedly until this Command either finishes or is canceled.protected void
initialize()
The initialize method is called the first time this Command is run after being started.protected void
interrupted()
Called when the command ends because somebody calledcancel()
or another command shared the same requirements as this one, and booted it out.protected boolean
isFinished()
Returns true if all theCommands
in this group have been started and have finished.boolean
isInterruptible()
Returns whether or not this group is interruptible.Methods inherited from class edu.wpi.first.wpilibj.command.Command
cancel, clearRequirements, close, doesRequire, getGroup, getName, getSubsystem, initSendable, isCanceled, isCompleted, isRunning, isTimedOut, requires, setInterruptible, setName, setRunWhenDisabled, setSubsystem, setTimeout, start, timeSinceInitialized, toString, willRunWhenDisabled
-
Constructor Details
-
CommandGroup
public CommandGroup()Creates a newCommandGroup
. The name of this command will be set to its class name. -
CommandGroup
Creates a newCommandGroup
with the given name.- Parameters:
name
- the name for this command group- Throws:
IllegalArgumentException
- if name is null
-
-
Method Details
-
addSequential
Adds a newCommand
to the group. TheCommand
will be started after all the previously addedCommands
.Note that any requirements the given
Command
has will be added to the group. For this reason, aCommand's
requirements can not be changed after being added to a group.It is recommended that this method be called in the constructor.
- Parameters:
command
- TheCommand
to be added- Throws:
IllegalUseOfCommandException
- if the group has been started before or been given to another groupIllegalArgumentException
- if command is null
-
addSequential
Adds a newCommand
to the group with a given timeout. TheCommand
will be started after all the previously added commands.Once the
Command
is started, it will be run until it finishes or the time expires, whichever is sooner. Note that the givenCommand
will have no knowledge that it is on a timer.Note that any requirements the given
Command
has will be added to the group. For this reason, aCommand's
requirements can not be changed after being added to a group.It is recommended that this method be called in the constructor.
- Parameters:
command
- TheCommand
to be addedtimeout
- The timeout (in seconds)- Throws:
IllegalUseOfCommandException
- if the group has been started before or been given to another group or if theCommand
has been started before or been given to another groupIllegalArgumentException
- if command is null or timeout is negative
-
addParallel
Adds a new childCommand
to the group. TheCommand
will be started after all the previously addedCommands
.Instead of waiting for the child to finish, a
CommandGroup
will have it run at the same time as the subsequentCommands
. The child will run until either it finishes, a new child with conflicting requirements is started, or the main sequence runs aCommand
with conflicting requirements. In the latter two cases, the child will be canceled even if it says it can't be interrupted.Note that any requirements the given
Command
has will be added to the group. For this reason, aCommand's
requirements can not be changed after being added to a group.It is recommended that this method be called in the constructor.
- Parameters:
command
- The command to be added- Throws:
IllegalUseOfCommandException
- if the group has been started before or been given to another command groupIllegalArgumentException
- if command is null
-
addParallel
Adds a new childCommand
to the group with the given timeout. TheCommand
will be started after all the previously addedCommands
.Once the
Command
is started, it will run until it finishes, is interrupted, or the time expires, whichever is sooner. Note that the givenCommand
will have no knowledge that it is on a timer.Instead of waiting for the child to finish, a
CommandGroup
will have it run at the same time as the subsequentCommands
. The child will run until either it finishes, the timeout expires, a new child with conflicting requirements is started, or the main sequence runs aCommand
with conflicting requirements. In the latter two cases, the child will be canceled even if it says it can't be interrupted.Note that any requirements the given
Command
has will be added to the group. For this reason, aCommand's
requirements can not be changed after being added to a group.It is recommended that this method be called in the constructor.
- Parameters:
command
- The command to be addedtimeout
- The timeout (in seconds)- Throws:
IllegalUseOfCommandException
- if the group has been started before or been given to another command groupIllegalArgumentException
- if command is null
-
isFinished
Returns true if all theCommands
in this group have been started and have finished.Teams may override this method, although they should probably reference super.isFinished() if they do.
- Specified by:
isFinished
in classCommand
- Returns:
- whether this
CommandGroup
is finished - See Also:
isTimedOut()
-
initialize
Description copied from class:Command
The initialize method is called the first time this Command is run after being started.- Overrides:
initialize
in classCommand
-
execute
Description copied from class:Command
The execute method is called repeatedly until this Command either finishes or is canceled. -
end
Description copied from class:Command
Called when the command ended peacefully. This is where you may want to wrap up loose ends, like shutting off a motor that was being used in the command. -
interrupted
Description copied from class:Command
Called when the command ends because somebody calledcancel()
or another command shared the same requirements as this one, and booted it out.This is where you may want to wrap up loose ends, like shutting off a motor that was being used in the command.
Generally, it is useful to simply call the
end()
method within this method, as done here.- Overrides:
interrupted
in classCommand
-
isInterruptible
Returns whether or not this group is interruptible. A command group will be uninterruptible ifsetInterruptible(false)
was called or if it is currently running an uninterruptible command or child.- Overrides:
isInterruptible
in classCommand
- Returns:
- whether or not this
CommandGroup
is interruptible.
-