WPILibC++ 2025.2.1
|
A state machine representing a complete action to be performed by the robot. More...
#include <frc2/command/Command.h>
Public Types | |
enum class | InterruptionBehavior { kCancelSelf , kCancelIncoming } |
An enum describing the command's behavior when another command with a shared requirement is scheduled. More... | |
Public Member Functions | |
~Command () override | |
Command (const Command &)=default | |
Command & | operator= (const Command &rhs) |
Command (Command &&)=default | |
Command & | operator= (Command &&)=default |
virtual void | Initialize () |
The initial subroutine of a command. | |
virtual void | Execute () |
The main body of a command. | |
virtual void | End (bool interrupted) |
The action to take when the command ends. | |
virtual bool | IsFinished () |
Whether the command has finished. | |
virtual wpi::SmallSet< Subsystem *, 4 > | GetRequirements () const |
Specifies the set of subsystems used by this command. | |
void | AddRequirements (Requirements requirements) |
Adds the specified Subsystem requirements to the command. | |
void | AddRequirements (wpi::SmallSet< Subsystem *, 4 > requirements) |
Adds the specified Subsystem requirements to the command. | |
void | AddRequirements (Subsystem *requirement) |
Adds the specified Subsystem requirement to the command. | |
std::string | GetName () const |
Gets the name of this Command. | |
void | SetName (std::string_view name) |
Sets the name of this Command. | |
std::string | GetSubsystem () const |
Gets the subsystem name of this Command. | |
void | SetSubsystem (std::string_view subsystem) |
Sets the subsystem name of this Command. | |
CommandPtr | WithTimeout (units::second_t duration) && |
Decorates this command with a timeout. | |
CommandPtr | Until (std::function< bool()> condition) && |
Decorates this command with an interrupt condition. | |
CommandPtr | OnlyWhile (std::function< bool()> condition) && |
Decorates this command with a run condition. | |
CommandPtr | BeforeStarting (std::function< void()> toRun, Requirements requirements={}) && |
Decorates this command with a runnable to run before this command starts. | |
CommandPtr | BeforeStarting (CommandPtr &&before) && |
Decorates this command with another command to run before this command starts. | |
CommandPtr | AndThen (std::function< void()> toRun, Requirements requirements={}) && |
Decorates this command with a runnable to run after the command finishes. | |
CommandPtr | AndThen (CommandPtr &&next) && |
Decorates this command with a set of commands to run after it in sequence. | |
CommandPtr | Repeatedly () && |
Decorates this command to run repeatedly, restarting it when it ends, until this command is interrupted. | |
CommandPtr | AsProxy () && |
Decorates this command to run "by proxy" by wrapping it in a ProxyCommand. | |
CommandPtr | Unless (std::function< bool()> condition) && |
Decorates this command to only run if this condition is not met. | |
CommandPtr | OnlyIf (std::function< bool()> condition) && |
Decorates this command to only run if this condition is met. | |
CommandPtr | WithDeadline (CommandPtr &&deadline) && |
Creates a new command that runs this command and the deadline in parallel, finishing (and interrupting this command) when the deadline finishes. | |
CommandPtr | DeadlineFor (CommandPtr &¶llel) && |
Decorates this command with a set of commands to run parallel to it, ending when the calling command ends and interrupting all the others. | |
CommandPtr | AlongWith (CommandPtr &¶llel) && |
Decorates this command with a set of commands to run parallel to it, ending when the last command ends. | |
CommandPtr | RaceWith (CommandPtr &¶llel) && |
Decorates this command with a set of commands to run parallel to it, ending when the first command ends. | |
CommandPtr | IgnoringDisable (bool doesRunWhenDisabled) && |
Decorates this command to run or stop when disabled. | |
CommandPtr | WithInterruptBehavior (Command::InterruptionBehavior interruptBehavior) && |
Decorates this command to have a different interrupt behavior. | |
CommandPtr | FinallyDo (std::function< void(bool)> end) && |
Decorates this command with a lambda to call on interrupt or end, following the command's inherent Command::End(bool) method. | |
CommandPtr | FinallyDo (std::function< void()> end) && |
Decorates this command with a lambda to call on interrupt or end, following the command's inherent Command::End(bool) method. | |
CommandPtr | HandleInterrupt (std::function< void()> handler) && |
Decorates this command with a lambda to call on interrupt, following the command's inherent Command::End(bool) method. | |
CommandPtr | WithName (std::string_view name) && |
Decorates this Command with a name. | |
void | Schedule () |
Schedules this command. | |
void | Cancel () |
Cancels this command. | |
bool | IsScheduled () const |
Whether or not the command is currently scheduled. | |
bool | HasRequirement (Subsystem *requirement) const |
Whether the command requires a given subsystem. | |
bool | IsComposed () const |
Whether the command is currently grouped in a command group. | |
void | SetComposed (bool isComposed) |
Sets whether the command is currently composed in a command composition. | |
std::optional< std::string > | GetPreviousCompositionSite () const |
Get the stacktrace of where this command was composed, or an empty optional. | |
virtual bool | RunsWhenDisabled () const |
Whether the given command should run when the robot is disabled. | |
virtual InterruptionBehavior | GetInterruptionBehavior () const |
How the command behaves when another command with a shared requirement is scheduled. | |
virtual CommandPtr | ToPtr () &&=0 |
Transfers ownership of this command to a unique pointer. | |
void | InitSendable (wpi::SendableBuilder &builder) override |
Initializes this Sendable object. | |
Public Member Functions inherited from wpi::Sendable | |
virtual constexpr | ~Sendable ()=default |
Public Member Functions inherited from wpi::SendableHelper< Command > | |
constexpr | SendableHelper (const SendableHelper &rhs)=default |
constexpr | SendableHelper (SendableHelper &&rhs) |
constexpr SendableHelper & | operator= (const SendableHelper &rhs)=default |
constexpr SendableHelper & | operator= (SendableHelper &&rhs) |
Protected Member Functions | |
Command () | |
Protected Member Functions inherited from wpi::SendableHelper< Command > | |
constexpr | SendableHelper ()=default |
constexpr | ~SendableHelper () |
Friends | |
class | CommandPtr |
A state machine representing a complete action to be performed by the robot.
Commands are run by the CommandScheduler, 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.
Note: ALWAYS create a subclass by extending CommandHelper<Base, Subclass>, or decorators will not function!
This class is provided by the NewCommands VendorDep
|
strong |
An enum describing the command's behavior when another command with a shared requirement is scheduled.
|
override |
|
default |
|
default |
|
protected |
void frc2::Command::AddRequirements | ( | Requirements | requirements | ) |
Adds the specified Subsystem requirements to the command.
The scheduler will prevent two commands that require the same subsystem from being scheduled simultaneously.
Note that the scheduler determines the requirements of a command when it is scheduled, so this method should normally be called from the command's constructor.
While this overload can be used with AddRequirements({&subsystem1,
,
&subsystem2})AddRequirements({&subsystem})
selects the
overload, which will function identically but may cause warnings about redundant braces.
AddRequirements(Subsystem*)
requirements | the Subsystem requirements to add, which can be implicitly constructed from an initializer list or a span |
void frc2::Command::AddRequirements | ( | Subsystem * | requirement | ) |
Adds the specified Subsystem requirement to the command.
The scheduler will prevent two commands that require the same subsystem from being scheduled simultaneously.
Note that the scheduler determines the requirements of a command when it is scheduled, so this method should normally be called from the command's constructor.
requirement | the Subsystem requirement to add |
void frc2::Command::AddRequirements | ( | wpi::SmallSet< Subsystem *, 4 > | requirements | ) |
Adds the specified Subsystem requirements to the command.
The scheduler will prevent two commands that require the same subsystem from being scheduled simultaneously.
Note that the scheduler determines the requirements of a command when it is scheduled, so this method should normally be called from the command's constructor.
requirements | the Subsystem requirements to add |
|
nodiscard |
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 new ParallelCommandGroup
explicitly.
parallel | the commands to run in parallel |
|
nodiscard |
Decorates this command with a set of commands to run after it in sequence.
Often more convenient/less-verbose than constructing a SequentialCommandGroup explicitly.
next | the commands to run next |
|
nodiscard |
Decorates this command with a runnable to run after the command finishes.
toRun | the Runnable to run |
requirements | the required subsystems |
|
nodiscard |
Decorates this command to run "by proxy" by wrapping it in a ProxyCommand.
Use this for "forking off" from command compositions when the user does not wish to extend the command's requirements to the entire command composition. ProxyCommand has unique implications and semantics, see the WPILib docs for a full explanation.
This overload transfers command ownership to the returned CommandPtr.
|
nodiscard |
Decorates this command with another command to run before this command starts.
before | the command to run before this one |
|
nodiscard |
Decorates this command with a runnable to run before this command starts.
toRun | the Runnable to run |
requirements | the required subsystems |
void frc2::Command::Cancel | ( | ) |
Cancels this command.
Will call End(true). Commands will be canceled regardless of interruption behavior.
|
nodiscard |
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 new ParallelDeadlineGroup
explicitly.
parallel | the commands to run in parallel. Note the parallel commands will be interupted when the deadline command ends |
|
virtual |
The action to take when the command ends.
Called when either the command finishes normally, or when it interrupted/canceled.
interrupted | whether the command was interrupted/canceled |
|
virtual |
The main body of a command.
Called repeatedly while the command is scheduled.
|
nodiscard |
Decorates this command with a lambda to call on interrupt or end, following the command's inherent Command::End(bool) method.
The provided lambda will run identically in both interrupt and end cases.
end | a lambda to run when the command ends, whether or not it was interrupted. |
|
nodiscard |
Decorates this command with a lambda to call on interrupt or end, following the command's inherent Command::End(bool) method.
end | a lambda accepting a boolean parameter specifying whether the command was interrupted. |
|
inlinevirtual |
How the command behaves when another command with a shared requirement is scheduled.
std::string frc2::Command::GetName | ( | ) | const |
Gets the name of this Command.
std::optional< std::string > frc2::Command::GetPreviousCompositionSite | ( | ) | const |
Get the stacktrace of where this command was composed, or an empty optional.
Intended for internal use.
|
virtual |
Specifies the set of subsystems used by this command.
Two commands cannot use the same subsystem at the same time. If another command is scheduled that shares a requirement, GetInterruptionBehavior() will be checked and followed. 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.
std::string frc2::Command::GetSubsystem | ( | ) | const |
|
nodiscard |
Decorates this command with a lambda to call on interrupt, following the command's inherent Command::End(bool) method.
handler | a lambda to run when the command is interrupted |
bool frc2::Command::HasRequirement | ( | Subsystem * | requirement | ) | const |
Whether the command requires a given subsystem.
Named "HasRequirement" rather than "requires" to avoid confusion with Command::Requires(Subsystem) – this may be able to be changed in a few years.
requirement | the subsystem to inquire about |
|
nodiscard |
Decorates this command to run or stop when disabled.
doesRunWhenDisabled | true to run when disabled. |
|
virtual |
The initial subroutine of a command.
Called once when the command is initially scheduled.
|
overridevirtual |
bool frc2::Command::IsComposed | ( | ) | const |
Whether the command is currently grouped in a command group.
Used as extra insurance to prevent accidental independent use of grouped commands.
|
inlinevirtual |
Whether the command has finished.
Once a command finishes, the scheduler will call its end() method and un-schedule it.
bool frc2::Command::IsScheduled | ( | ) | const |
Whether or not the command is currently scheduled.
Note that this does not detect whether the command is in a composition, only whether it is directly being run by the scheduler.
|
nodiscard |
Decorates this command to only run if this condition is met.
If the command is already running and the condition changes to false, the command will not stop running. The requirements of this command will be kept for the new conditional command.
condition | the condition that will allow the command to run |
|
nodiscard |
Decorates this command with a run condition.
If the specified condition becomes false before the command finishes normally, the command will be interrupted and un-scheduled.
condition | the run condition |
|
nodiscard |
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 new ParallelRaceGroup
explicitly.
parallel | the commands to run in parallel |
|
nodiscard |
Decorates this command to run repeatedly, restarting it when it ends, until this command is interrupted.
The decorated command can still be canceled.
|
inlinevirtual |
Whether the given command should run when the robot is disabled.
Override to return true if the command should run when disabled.
void frc2::Command::Schedule | ( | ) |
Schedules this command.
void frc2::Command::SetComposed | ( | bool | isComposed | ) |
Sets whether the command is currently composed in a command composition.
Can be used to "reclaim" a command if a composition is no longer going to use it. NOT ADVISED!
void frc2::Command::SetName | ( | std::string_view | name | ) |
Sets the name of this Command.
name | name |
void frc2::Command::SetSubsystem | ( | std::string_view | subsystem | ) |
Sets the subsystem name of this Command.
subsystem | subsystem name |
|
pure virtual |
Transfers ownership of this command to a unique pointer.
Used for decorator methods.
|
nodiscard |
Decorates this command to only run if this condition is not met.
If the command is already running and the condition changes to true, the command will not stop running. The requirements of this command will be kept for the new conditional command.
condition | the condition that will prevent the command from running |
|
nodiscard |
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.
condition | the interrupt condition |
CommandPtr frc2::Command::WithDeadline | ( | CommandPtr && | deadline | ) | && |
Creates a new command that runs this command and the deadline in parallel, finishing (and interrupting this command) when the deadline finishes.
deadline | the deadline of the command group |
|
nodiscard |
Decorates this command to have a different interrupt behavior.
interruptBehavior | the desired interrupt behavior |
|
nodiscard |
|
nodiscard |
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.
duration | the timeout duration |
|
friend |