FTCLib Commands #
FTCLib has a commands system that is similar to Road Runner actions.
Here’s a generic FTCLib command for wrapping actions.
public class ActionCommand implements Command {
private final Action action;
private final Set<Subsystem> requirements;
private boolean finished = false;
public ActionCommand(Action action, Set<Subsystem> requirements) {
this.action = action;
this.requirements = requirements;
}
@Override
public Set<Subsystem> getRequirements() {
return requirements;
}
@Override
public void execute() {
TelemetryPacket packet = new TelemetryPacket();
action.preview(packet.fieldOverlay());
finished = !action.run(packet);
FtcDashboard.getInstance().sendTelemetryPacket(packet);
}
@Override
public boolean isFinished() {
return finished;
}
}
This pretty much works with some caveats.
- Actions have no concept of requirements, so they need to be given for each command.
- Actions do not know when they’re interrupted, while commands have a chance to
do some final cleanup. Of course, a custom command wrapping one
particular action (e.g., following a trajectory) may specifically override
end()to perform some work (e.g., stopping drive motors). - Commands don’t have a mechanism analogous to
preview(). This means the quickstart trajectory preview will only work for the currently executing command (of course you can bundle several actions together into one composite action and wrap that).