WPILibC++  2020.3.2-60-g3011ebe
frc2::Command Class Referenceabstract

A state machine representing a complete action to be performed by the robot. More...

#include <Command.h>

Inheritance diagram for frc2::Command:
frc::ErrorBase frc2::CommandBase frc2::CommandHelper< CommandBase, ConditionalCommand > frc2::CommandHelper< CommandBase, FunctionalCommand > frc2::CommandHelper< CommandBase, InstantCommand > frc2::CommandHelper< CommandBase, MecanumControllerCommand > frc2::CommandHelper< CommandBase, NotifierCommand > frc2::CommandHelper< CommandBase, PerpetualCommand > frc2::CommandHelper< CommandBase, PIDCommand > frc2::CommandHelper< CommandBase, ProfiledPIDCommand< Distance > > frc2::CommandHelper< CommandBase, ProxyScheduleCommand > frc2::CommandHelper< CommandBase, RamseteCommand > frc2::CommandHelper< CommandBase, RunCommand > frc2::CommandHelper< CommandBase, ScheduleCommand > frc2::CommandHelper< CommandBase, SelectCommand< Key > > frc2::CommandHelper< CommandBase, StartEndCommand > frc2::CommandHelper< CommandBase, SwerveControllerCommand< NumModules > > frc2::CommandHelper< CommandBase, TrapezoidProfileCommand< Distance > > frc2::CommandHelper< CommandBase, WaitCommand > frc2::CommandHelper< CommandBase, WaitUntilCommand > frc2::CommandGroupBase

Public Member Functions

 Command (const Command &)
 
Commandoperator= (const Command &)
 
 Command (Command &&)=default
 
Commandoperator= (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...
 
ParallelRaceGroup WithTimeout (units::second_t duration) &&
 Decorates this command with a timeout. More...
 
ParallelRaceGroup WithInterrupt (std::function< bool()> condition) &&
 Decorates this command with an interrupt condition. More...
 
SequentialCommandGroup BeforeStarting (std::function< void()> toRun, std::initializer_list< Subsystem * > requirements) &&
 Decorates this command with a runnable to run before this command starts. More...
 
SequentialCommandGroup BeforeStarting (std::function< void()> toRun, wpi::ArrayRef< Subsystem * > requirements={}) &&
 Decorates this command with a runnable to run before this command starts. More...
 
SequentialCommandGroup AndThen (std::function< void()> toRun, std::initializer_list< Subsystem * > requirements) &&
 Decorates this command with a runnable to run after the command finishes. More...
 
SequentialCommandGroup AndThen (std::function< void()> toRun, wpi::ArrayRef< Subsystem * > requirements={}) &&
 Decorates this command with a runnable to run after the command finishes. More...
 
PerpetualCommand Perpetually () &&
 Decorates this command to run perpetually, ignoring its ordinary end conditions. More...
 
ProxyScheduleCommand AsProxy ()
 Decorates this command to run "by proxy" by wrapping it in a {}. More...
 
void Schedule (bool interruptible)
 Schedules this command. More...
 
void Schedule ()
 Schedules this command, defaulting to interruptible.
 
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 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 std::string GetName () const
 
- Public Member Functions inherited from frc::ErrorBase
 ErrorBase (const ErrorBase &)=default
 
ErrorBaseoperator= (const ErrorBase &)=default
 
 ErrorBase (ErrorBase &&)=default
 
ErrorBaseoperator= (ErrorBase &&)=default
 
virtual ErrorGetError ()
 Retrieve the current error. More...
 
virtual const ErrorGetError () const
 Retrieve the current error. More...
 
virtual void ClearError () const
 Clear the current error information associated with this sensor.
 
virtual void SetErrnoError (const wpi::Twine &contextMessage, wpi::StringRef filename, wpi::StringRef function, int lineNumber) const
 Set error information associated with a C library call that set an error to the "errno" global variable. More...
 
virtual void SetImaqError (int success, const wpi::Twine &contextMessage, wpi::StringRef filename, wpi::StringRef function, int lineNumber) const
 Set the current error information associated from the nivision Imaq API. More...
 
virtual void SetError (Error::Code code, const wpi::Twine &contextMessage, wpi::StringRef filename, wpi::StringRef function, int lineNumber) const
 Set the current error information associated with this sensor. More...
 
virtual void SetErrorRange (Error::Code code, int32_t minRange, int32_t maxRange, int32_t requestedValue, const wpi::Twine &contextMessage, wpi::StringRef filename, wpi::StringRef function, int lineNumber) const
 Set the current error information associated with this sensor. More...
 
virtual void SetWPIError (const wpi::Twine &errorMessage, Error::Code code, const wpi::Twine &contextMessage, wpi::StringRef filename, wpi::StringRef function, int lineNumber) const
 Set the current error information associated with this sensor. More...
 
virtual void CloneError (const ErrorBase &rhs) const
 
virtual bool StatusIsFatal () const
 Check if the current error code represents a fatal error. More...
 
void ClearGlobalErrors ()
 Clear global errors.
 

Protected Member Functions

virtual std::unique_ptr< CommandTransferOwnership () &&=0
 Transfers ownership of this command to a unique pointer. More...
 

Protected Attributes

bool m_isGrouped = false
 
- Protected Attributes inherited from frc::ErrorBase
Error m_error
 

Additional Inherited Members

- Static Public Member Functions inherited from frc::ErrorBase
static void SetGlobalError (Error::Code code, const wpi::Twine &contextMessage, wpi::StringRef filename, wpi::StringRef function, int lineNumber)
 
static void SetGlobalWPIError (const wpi::Twine &errorMessage, const wpi::Twine &contextMessage, wpi::StringRef filename, wpi::StringRef function, int lineNumber)
 
static Error GetGlobalError ()
 Retrieve the last global error.
 
static std::vector< ErrorGetGlobalErrors ()
 Retrieve all global errors.
 

Detailed Description

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!

See also
CommandScheduler
CommandHelper

Member Function Documentation

◆ AndThen() [1/2]

SequentialCommandGroup frc2::Command::AndThen ( std::function< void()>  toRun,
std::initializer_list< Subsystem * >  requirements 
) &&

Decorates this command with a runnable to run after the command finishes.

Parameters
toRunthe Runnable to run
requirementsthe required subsystems
Returns
the decorated command

◆ AndThen() [2/2]

SequentialCommandGroup frc2::Command::AndThen ( std::function< void()>  toRun,
wpi::ArrayRef< Subsystem * >  requirements = {} 
) &&

Decorates this command with a runnable to run after the command finishes.

Parameters
toRunthe Runnable to run
requirementsthe required subsystems
Returns
the decorated command

◆ AsProxy()

ProxyScheduleCommand frc2::Command::AsProxy ( )

Decorates this command to run "by proxy" by wrapping it in a {}.

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

◆ BeforeStarting() [1/2]

SequentialCommandGroup frc2::Command::BeforeStarting ( std::function< void()>  toRun,
std::initializer_list< Subsystem * >  requirements 
) &&

Decorates this command with a runnable to run before this command starts.

Parameters
toRunthe Runnable to run
requirementsthe required subsystems
Returns
the decorated command

◆ BeforeStarting() [2/2]

SequentialCommandGroup frc2::Command::BeforeStarting ( std::function< void()>  toRun,
wpi::ArrayRef< Subsystem * >  requirements = {} 
) &&

Decorates this command with a runnable to run before this command starts.

Parameters
toRunthe Runnable to run
requirementsthe required subsystems
Returns
the decorated command

◆ Cancel()

void frc2::Command::Cancel ( )

Cancels this command.

Will call the command's interrupted() method. Commands will be canceled even if they are not marked as interruptible.

◆ End()

◆ Execute()

◆ GetRequirements()

virtual wpi::SmallSet<Subsystem*, 4> frc2::Command::GetRequirements ( ) const
pure virtual

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

Implemented in frc2::CommandBase.

◆ HasRequirement()

bool frc2::Command::HasRequirement ( Subsystem requirement) const

Whether the command requires a given subsystem.

Named "hasRequirement" rather than "requires" to avoid confusion with {}this may be able to be changed in a few years. requirement the subsystem to inquire about whether the subsystem is required

◆ Initialize()

◆ IsFinished()

◆ IsGrouped()

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.

◆ IsScheduled()

bool frc2::Command::IsScheduled ( ) const

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.

◆ Perpetually()

PerpetualCommand frc2::Command::Perpetually ( ) &&

Decorates this command to run perpetually, ignoring its ordinary end conditions.

The decorated command can still be interrupted or canceled.

Returns
the decorated command

◆ RunsWhenDisabled()

virtual bool frc2::Command::RunsWhenDisabled ( ) const
inlinevirtual

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

Reimplemented in frc2::SelectCommand< Key >, frc2::ParallelDeadlineGroup, frc2::SequentialCommandGroup, frc2::ParallelCommandGroup, frc2::ConditionalCommand, frc2::ParallelRaceGroup, frc2::WaitUntilCommand, frc2::ScheduleCommand, frc2::WaitCommand, and frc2::PrintCommand.

◆ Schedule()

void frc2::Command::Schedule ( bool  interruptible)

Schedules this command.

Parameters
interruptiblewhether this command can be interrupted by another command that shares one of its requirements

◆ SetGrouped()

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!

◆ TransferOwnership()

virtual std::unique_ptr<Command> frc2::Command::TransferOwnership ( ) &&
protectedpure virtual

Transfers ownership of this command to a unique pointer.

Used for decorator methods.

Implemented in frc2::SelectCommand< Key >.

◆ WithInterrupt()

ParallelRaceGroup 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.

Parameters
conditionthe interrupt condition
Returns
the command with the interrupt condition added

◆ WithTimeout()

ParallelRaceGroup 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.

Parameters
durationthe timeout duration
Returns
the command with the timeout added

The documentation for this class was generated from the following file: