WPILibC++ 2023.4.3
|
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 ()=default | |
virtual | ~Command () |
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 =0 |
Specifies the set of subsystems used by 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 | WithInterrupt (std::function< bool()> condition) && |
Decorates this command with an interrupt condition. More... | |
CommandPtr | BeforeStarting (std::function< void()> toRun, std::initializer_list< Subsystem * > requirements) && |
Decorates this command with a runnable to run before this command starts. More... | |
CommandPtr | BeforeStarting (std::function< void()> toRun, std::span< Subsystem *const > requirements={}) && |
Decorates this command with a runnable to run before this command starts. More... | |
CommandPtr | AndThen (std::function< void()> toRun, std::initializer_list< Subsystem * > requirements) && |
Decorates this command with a runnable to run after the command finishes. More... | |
CommandPtr | AndThen (std::function< void()> toRun, std::span< Subsystem *const > requirements={}) && |
Decorates this command with a runnable to run after the command finishes. More... | |
PerpetualCommand | Perpetually () && |
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 | IgnoringDisable (bool doesRunWhenDisabled) && |
Decorates this command to run or stop when disabled. More... | |
CommandPtr | WithInterruptBehavior (Command::InterruptionBehavior interruptBehavior) && |
Decorates this command to run or stop when disabled. 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 | 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... | |
bool | IsGrouped () const |
Whether the command is currently grouped in a command group. More... | |
void | SetGrouped (bool grouped) |
Sets whether the command is currently grouped in a command group. 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 std::string | GetName () const |
Gets the name of this Command. More... | |
virtual void | SetName (std::string_view name) |
Sets the name of this Command. More... | |
virtual CommandPtr | ToPtr () &&=0 |
Transfers ownership of this command to a unique pointer. More... | |
Protected Member Functions | |
virtual std::unique_ptr< Command > | TransferOwnership () &&=0 |
Transfers ownership of this command to a unique pointer. More... | |
Protected Attributes | |
bool | m_isComposed = false |
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.
|
default |
|
virtual |
|
default |
|
default |
CommandPtr frc2::Command::AndThen | ( | std::function< void()> | toRun, |
std::initializer_list< Subsystem * > | 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::AndThen | ( | std::function< void()> | toRun, |
std::span< Subsystem *const > | 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, |
std::initializer_list< Subsystem * > | requirements | ||
) | && |
Decorates this command with a runnable to run before this command starts.
toRun | the Runnable to run |
requirements | the required subsystems |
CommandPtr frc2::Command::BeforeStarting | ( | std::function< void()> | toRun, |
std::span< Subsystem *const > | 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 |
Reimplemented in frc2::ParallelCommandGroup, frc2::ParallelDeadlineGroup, frc2::ParallelRaceGroup, frc2::SequentialCommandGroup, frc2::ConditionalCommand, frc2::FunctionalCommand, frc2::MecanumControllerCommand, frc2::NotifierCommand, frc2::PerpetualCommand, frc2::PIDCommand, frc2::ProfiledPIDCommand< Distance >, frc2::ProxyCommand, frc2::ProxyScheduleCommand, frc2::RamseteCommand, frc2::RepeatCommand, frc2::SelectCommand< Key >, frc2::SwerveControllerCommand< NumModules >, frc2::TrapezoidProfileCommand< Distance >, frc2::WaitCommand, and frc2::WrapperCommand.
|
virtual |
The main body of a command.
Called repeatedly while the command is scheduled.
Reimplemented in frc2::ParallelCommandGroup, frc2::ParallelDeadlineGroup, frc2::ParallelRaceGroup, frc2::SequentialCommandGroup, frc2::ConditionalCommand, frc2::FunctionalCommand, frc2::MecanumControllerCommand, frc2::PerpetualCommand, frc2::PIDCommand, frc2::ProfiledPIDCommand< Distance >, frc2::ProxyCommand, frc2::ProxyScheduleCommand, frc2::RamseteCommand, frc2::RepeatCommand, frc2::SelectCommand< Key >, frc2::SwerveControllerCommand< NumModules >, frc2::TrapezoidProfileCommand< Distance >, and frc2::WrapperCommand.
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.
Reimplemented in frc2::ParallelCommandGroup, frc2::ParallelDeadlineGroup, frc2::ParallelRaceGroup, frc2::RepeatCommand, frc2::SelectCommand< Key >, frc2::SequentialCommandGroup, and frc2::WrapperCommand.
|
virtual |
Gets the name of this Command.
Defaults to the simple class name if not overridden.
Reimplemented in frc2::CommandBase.
|
pure 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.
Implemented in frc2::CommandBase, and frc2::WrapperCommand.
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.
Reimplemented in frc2::ParallelCommandGroup, frc2::ParallelDeadlineGroup, frc2::ParallelRaceGroup, frc2::SequentialCommandGroup, frc2::ConditionalCommand, frc2::FunctionalCommand, frc2::MecanumControllerCommand, frc2::NotifierCommand, frc2::PerpetualCommand, frc2::PIDCommand, frc2::ProfiledPIDCommand< Distance >, frc2::ProxyCommand, frc2::ProxyScheduleCommand, frc2::RamseteCommand, frc2::RepeatCommand, frc2::ScheduleCommand, frc2::SelectCommand< Key >, frc2::SwerveControllerCommand< NumModules >, frc2::TrapezoidProfileCommand< Distance >, frc2::WaitCommand, and frc2::WrapperCommand.
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.
Reimplemented in frc2::ParallelCommandGroup, frc2::ParallelDeadlineGroup, frc2::ParallelRaceGroup, frc2::SequentialCommandGroup, frc2::ConditionalCommand, frc2::FunctionalCommand, frc2::MecanumControllerCommand, frc2::ProxyCommand, frc2::ProxyScheduleCommand, frc2::RamseteCommand, frc2::RepeatCommand, frc2::ScheduleCommand, frc2::SelectCommand< Key >, frc2::SwerveControllerCommand< NumModules >, frc2::TrapezoidProfileCommand< Distance >, frc2::WaitCommand, frc2::WaitUntilCommand, and frc2::WrapperCommand.
bool frc2::Command::IsGrouped | ( | ) | const |
Whether the command is currently grouped in a command group.
Used as extra insurance to prevent accidental independent use of grouped commands.
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.
PerpetualCommand frc2::Command::Perpetually | ( | ) | && |
Decorates this command to run perpetually, ignoring its ordinary end conditions. The decorated command can still be interrupted or canceled. @return the decorated command @deprecated PerpetualCommand violates the assumption that execute() doesn't
get called after isFinished() returns true – an assumption that should be valid. This was unsafe/undefined behavior from the start, and RepeatCommand provides an easy way to achieve similar end results with slightly different (and safe) semantics.
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.
Reimplemented in frc2::ConditionalCommand, frc2::ParallelCommandGroup, frc2::ParallelDeadlineGroup, frc2::ParallelRaceGroup, frc2::PrintCommand, frc2::RepeatCommand, frc2::ScheduleCommand, frc2::SelectCommand< Key >, frc2::SequentialCommandGroup, frc2::WaitCommand, frc2::WaitUntilCommand, and frc2::WrapperCommand.
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::SetGrouped | ( | bool | grouped | ) |
Sets whether the command is currently grouped in a command group.
Can be used to "reclaim" a command if a group is no longer going to use it. NOT ADVISED!
|
virtual |
Sets the name of this Command.
Nullop if not overridden.
name | The display name of the Command. |
Reimplemented in frc2::CommandBase.
|
pure virtual |
Transfers ownership of this command to a unique pointer.
Used for decorator methods.
Implemented in frc2::CommandHelper< CommandBase, ConditionalCommand >, frc2::CommandHelper< CommandBase, FunctionalCommand >, frc2::CommandHelper< FunctionalCommand, InstantCommand >, frc2::CommandHelper< CommandBase, MecanumControllerCommand >, frc2::CommandHelper< CommandBase, NotifierCommand >, frc2::CommandHelper< CommandBase, PIDCommand >, frc2::CommandHelper< CommandGroupBase, ParallelCommandGroup >, frc2::CommandHelper< CommandGroupBase, ParallelDeadlineGroup >, frc2::CommandHelper< CommandGroupBase, ParallelRaceGroup >, frc2::CommandHelper< CommandBase, PerpetualCommand >, frc2::CommandHelper< InstantCommand, PrintCommand >, frc2::CommandHelper< CommandBase, ProfiledPIDCommand< Distance > >, frc2::CommandHelper< CommandBase, ProxyCommand >, frc2::CommandHelper< CommandBase, ProxyScheduleCommand >, frc2::CommandHelper< CommandBase, RamseteCommand >, frc2::CommandHelper< CommandBase, RepeatCommand >, frc2::CommandHelper< FunctionalCommand, RunCommand >, frc2::CommandHelper< CommandBase, ScheduleCommand >, frc2::CommandHelper< CommandBase, SelectCommand< Key > >, frc2::CommandHelper< CommandGroupBase, SequentialCommandGroup >, frc2::CommandHelper< FunctionalCommand, StartEndCommand >, frc2::CommandHelper< CommandBase, SwerveControllerCommand< NumModules > >, frc2::CommandHelper< CommandBase, TrapezoidProfileCommand< Distance > >, frc2::CommandHelper< CommandBase, WaitCommand >, frc2::CommandHelper< CommandBase, WaitUntilCommand >, and frc2::CommandHelper< CommandBase, WrapperCommand >.
|
protectedpure virtual |
Transfers ownership of this command to a unique pointer.
Used for decorator methods.
Implemented in frc2::CommandHelper< CommandBase, ConditionalCommand >, frc2::CommandHelper< CommandBase, FunctionalCommand >, frc2::CommandHelper< FunctionalCommand, InstantCommand >, frc2::CommandHelper< CommandBase, MecanumControllerCommand >, frc2::CommandHelper< CommandBase, NotifierCommand >, frc2::CommandHelper< CommandBase, PIDCommand >, frc2::CommandHelper< CommandGroupBase, ParallelCommandGroup >, frc2::CommandHelper< CommandGroupBase, ParallelDeadlineGroup >, frc2::CommandHelper< CommandGroupBase, ParallelRaceGroup >, frc2::CommandHelper< CommandBase, PerpetualCommand >, frc2::CommandHelper< InstantCommand, PrintCommand >, frc2::CommandHelper< CommandBase, ProfiledPIDCommand< Distance > >, frc2::CommandHelper< CommandBase, ProxyCommand >, frc2::CommandHelper< CommandBase, ProxyScheduleCommand >, frc2::CommandHelper< CommandBase, RamseteCommand >, frc2::CommandHelper< CommandBase, RepeatCommand >, frc2::CommandHelper< FunctionalCommand, RunCommand >, frc2::CommandHelper< CommandBase, ScheduleCommand >, frc2::CommandHelper< CommandBase, SelectCommand< Key > >, frc2::CommandHelper< CommandGroupBase, SequentialCommandGroup >, frc2::CommandHelper< FunctionalCommand, StartEndCommand >, frc2::CommandHelper< CommandBase, SwerveControllerCommand< NumModules > >, frc2::CommandHelper< CommandBase, TrapezoidProfileCommand< Distance > >, frc2::CommandHelper< CommandBase, WaitCommand >, frc2::CommandHelper< CommandBase, WaitUntilCommand >, frc2::CommandHelper< CommandBase, WrapperCommand >, and frc2::SelectCommand< Key >.
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. Note that this only applies to the command returned by this method; the calling command is not itself changed.
condition | the interrupt condition |
CommandPtr frc2::Command::WithInterrupt | ( | 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. Note that this only applies to the command returned by this method; the calling command is not itself changed.
condition | the interrupt condition |
CommandPtr frc2::Command::WithInterruptBehavior | ( | Command::InterruptionBehavior | interruptBehavior | ) | && |
Decorates this command to run or stop when disabled.
interruptBehavior | true to run when disabled. |
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. Note that the timeout only applies to the command returned by this method; the calling command is not itself changed.
duration | the timeout duration |
|
friend |
|
protected |