WPILibC++ 2024.3.2
|
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. More... | |
virtual void | Execute () |
The main body of a command. More... | |
virtual void | End (bool interrupted) |
The action to take when the command ends. More... | |
virtual bool | IsFinished () |
Whether the command has finished. More... | |
virtual wpi::SmallSet< Subsystem *, 4 > | GetRequirements () const |
Specifies the set of subsystems used by this command. More... | |
void | AddRequirements (Requirements requirements) |
Adds the specified Subsystem requirements to the command. More... | |
void | AddRequirements (wpi::SmallSet< Subsystem *, 4 > requirements) |
Adds the specified Subsystem requirements to the command. More... | |
void | AddRequirements (Subsystem *requirement) |
Adds the specified Subsystem requirement to the command. More... | |
std::string | GetName () const |
Gets the name of this Command. More... | |
void | SetName (std::string_view name) |
Sets the name of this Command. More... | |
std::string | GetSubsystem () const |
Gets the subsystem name of this Command. More... | |
void | SetSubsystem (std::string_view subsystem) |
Sets the subsystem name of this Command. More... | |
CommandPtr | WithTimeout (units::second_t duration) && |
Decorates this command with a timeout. More... | |
CommandPtr | Until (std::function< bool()> condition) && |
Decorates this command with an interrupt condition. More... | |
CommandPtr | OnlyWhile (std::function< bool()> condition) && |
Decorates this command with a run condition. More... | |
CommandPtr | BeforeStarting (std::function< void()> toRun, Requirements requirements={}) && |
Decorates this command with a runnable to run before this command starts. More... | |
CommandPtr | AndThen (std::function< void()> toRun, Requirements requirements={}) && |
Decorates this command with a runnable to run after the command finishes. More... | |
CommandPtr | Repeatedly () && |
Decorates this command to run repeatedly, restarting it when it ends, until this command is interrupted. More... | |
CommandPtr | AsProxy () && |
Decorates this command to run "by proxy" by wrapping it in a ProxyCommand. More... | |
CommandPtr | Unless (std::function< bool()> condition) && |
Decorates this command to only run if this condition is not met. More... | |
CommandPtr | OnlyIf (std::function< bool()> condition) && |
Decorates this command to only run if this condition is met. More... | |
CommandPtr | IgnoringDisable (bool doesRunWhenDisabled) && |
Decorates this command to run or stop when disabled. More... | |
CommandPtr | WithInterruptBehavior (Command::InterruptionBehavior interruptBehavior) && |
Decorates this command to have a different interrupt behavior. More... | |
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. More... | |
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. More... | |
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. More... | |
CommandPtr | WithName (std::string_view name) && |
Decorates this Command with a name. More... | |
void | Schedule () |
Schedules this command. More... | |
void | Cancel () |
Cancels this command. More... | |
bool | IsScheduled () const |
Whether or not the command is currently scheduled. More... | |
bool | HasRequirement (Subsystem *requirement) const |
Whether the command requires a given subsystem. More... | |
bool | IsComposed () const |
Whether the command is currently grouped in a command group. More... | |
void | SetComposed (bool isComposed) |
Sets whether the command is currently composed in a command composition. More... | |
std::optional< std::string > | GetPreviousCompositionSite () const |
Get the stacktrace of where this command was composed, or an empty optional. More... | |
virtual bool | RunsWhenDisabled () const |
Whether the given command should run when the robot is disabled. More... | |
virtual InterruptionBehavior | GetInterruptionBehavior () const |
How the command behaves when another command with a shared requirement is scheduled. More... | |
virtual CommandPtr | ToPtr () &&=0 |
Transfers ownership of this command to a unique pointer. More... | |
void | InitSendable (wpi::SendableBuilder &builder) override |
Initializes this Sendable object. More... | |
Public Member Functions inherited from wpi::Sendable | |
virtual | ~Sendable ()=default |
virtual void | InitSendable (SendableBuilder &builder)=0 |
Initializes this Sendable object. More... | |
Public Member Functions inherited from wpi::SendableHelper< Command > | |
SendableHelper (const SendableHelper &rhs)=default | |
SendableHelper (SendableHelper &&rhs) | |
SendableHelper & | operator= (const SendableHelper &rhs)=default |
SendableHelper & | operator= (SendableHelper &&rhs) |
Protected Member Functions | |
Command () | |
virtual std::unique_ptr< Command > | TransferOwnership () &&=0 |
Transfers ownership of this command to a unique pointer. More... | |
Protected Member Functions inherited from wpi::SendableHelper< Command > | |
SendableHelper ()=default | |
~SendableHelper () | |
Protected Attributes | |
wpi::SmallSet< Subsystem *, 4 > | m_requirements |
Requirements set. More... | |
std::optional< std::string > | m_previousComposition |
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 |
CommandPtr frc2::Command::AndThen | ( | std::function< void()> | toRun, |
Requirements | requirements = {} |
||
) | && |
Decorates this command with a runnable to run after the command finishes.
toRun | the Runnable to run |
requirements | the required subsystems |
CommandPtr frc2::Command::AsProxy | ( | ) | && |
Decorates this command to run "by proxy" by wrapping it in a ProxyCommand.
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.
This overload transfers command ownership to the returned CommandPtr.
CommandPtr frc2::Command::BeforeStarting | ( | std::function< void()> | toRun, |
Requirements | requirements = {} |
||
) | && |
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.
|
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.
CommandPtr frc2::Command::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.
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. |
CommandPtr frc2::Command::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.
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 |
CommandPtr frc2::Command::HandleInterrupt | ( | std::function< void()> | handler | ) | && |
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 |
CommandPtr frc2::Command::IgnoringDisable | ( | bool | doesRunWhenDisabled | ) | && |
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.
CommandPtr frc2::Command::OnlyIf | ( | std::function< bool()> | condition | ) | && |
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 |
CommandPtr frc2::Command::OnlyWhile | ( | std::function< bool()> | condition | ) | && |
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 |
CommandPtr frc2::Command::Repeatedly | ( | ) | && |
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.
|
protectedpure virtual |
Transfers ownership of this command to a unique pointer.
Used for decorator methods.
CommandPtr frc2::Command::Unless | ( | std::function< bool()> | condition | ) | && |
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 |
CommandPtr frc2::Command::Until | ( | std::function< bool()> | 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.
condition | the interrupt condition |
CommandPtr frc2::Command::WithInterruptBehavior | ( | Command::InterruptionBehavior | interruptBehavior | ) | && |
Decorates this command to have a different interrupt behavior.
interruptBehavior | the desired interrupt behavior |
CommandPtr frc2::Command::WithName | ( | std::string_view | name | ) | && |
CommandPtr frc2::Command::WithTimeout | ( | units::second_t | duration | ) | && |
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 |
|
protected |
|
protected |
Requirements set.