Skip to content

Add commands v3 documentation pages - #3339

Open
SamCarlberg wants to merge 12 commits into
wpilibsuite:mainfrom
SamCarlberg:commandsv3
Open

Add commands v3 documentation pages#3339
SamCarlberg wants to merge 12 commits into
wpilibsuite:mainfrom
SamCarlberg:commandsv3

Conversation

@SamCarlberg

@SamCarlberg SamCarlberg commented Aug 3, 2026

Copy link
Copy Markdown
Member

Note that some docs reference not-yet-committed WPILib changes (wpilibsuite/allwpilib#9207)

@sciencewhiz
sciencewhiz requested a review from jasondaming August 4, 2026 15:11

@sciencewhiz sciencewhiz left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's some initial comments. Also update new for 2027 to link to the documentation.

Comment thread source/docs/software/commandbased/commands-v3/index.rst Outdated
Comment thread source/docs/software/commandbased/commands-v3/index.rst
Comment thread source/docs/software/commandbased/commands-v3/index.rst
Comment thread source/docs/software/commandbased/commands-v3/creating-commands.rst Outdated

.. tab-set-code::

```java

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To improve maintainability, lets make these and all other "complete" code snippets into snippets in allwpilib and reference via RLIs.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup. I plan on moving them when the code snippets are approved here. It's annoying to reference them across repos

Comment thread source/docs/software/commandbased/commands-v3/creating-commands.rst Outdated
Comment thread source/docs/software/commandbased/commands-v3/how-it-works.rst
Comment thread source/docs/software/commandbased/commands-v3/lambda-functions.rst
Comment thread source/docs/software/commandbased/commands-v3/migration-guide.rst Outdated
Comment thread source/docs/software/commandbased/commands-v3/migration-guide.rst Outdated
Removed a lot of unnecessary tab-set-code and replaced others with manual tab-sets with descriptive tab labels
Comment thread source/docs/software/commandbased/commands-v3/how-it-works.rst Outdated
SamCarlberg and others added 3 commits August 6, 2026 07:56
@PeterJohnson

Copy link
Copy Markdown
Member

@codex review

@sciencewhiz sciencewhiz left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few more comments, haven't been able to get through everything yet

This should update the 2027 overview to link to the documentation instead of the confernce/design doc.

The examples page should be updated with the commands v3 examples

@@ -0,0 +1,83 @@
# State Machines with Commands

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this article could benefit from a more complex example that demonstrates why State machines are beneficial for complex commands. The existing code example seems like something that could easily be done without a state machine

@@ -0,0 +1,83 @@
# State Machines with Commands

The `StateMachine <https://github.wpilib.org/allwpilib/docs/beta/java/org/wpilib/command3/StateMachine.html>`__ class provides a way to define complex behavior as a series of states and transitions. Each state in a state machine runs a single ``Command``, and transitions define when the state machine should move from one state to another.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


Mechanisms should be declared as ``public final`` fields in the robot class and initialized in the field declaration or in the constructor. The former makes the code a little more concise, while the latter allows for flexibility if different mechanism implementations exist.

.. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/main/wpilibjExamples/src/main/java/org/wpilib/examples/rebuiltcmdv3/Robot.java

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use the :lines: and :lineno-match: feature to remove boilerplate like the license and and package. For things in the WPILib repository, we usually start on line 7 for that reason. https://docs.wpilib.org/en/stable/docs/contributing/frc-docs/style-guide.html#rli-remote-literal-include

2. ``IntakeWrist``, for controlling the deployment of the intake
3. ``Intake``, which combines both the rollers and the wrist

.. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/main/wpilibjExamples/src/main/java/org/wpilib/examples/rebuiltcmdv3/mechanisms/Intake.java

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three long code blocks right after each other run together. Add a header for each one, and consider putting them in the same order as the list above


.. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/main/wpilibjExamples/src/main/java/org/wpilib/examples/rebuiltcmdv3/opmodes/auto/SweepAuto.java

## Mechanism-level Commands

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to put this right after mechanisms?

```


## Multi-Mechanism Commands

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

todo?


### Greedy Loops (Compile-time)

If you write a ``while`` loop in a command that is missing a ``coroutine.yield()`` call, the WPILib compiler plugin will issue an error. This is because a loop that never yields will starve the rest of the robot program, preventing other commands from running and sensor data from being updated.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the issues that cause a compile time error, include the error message, since that's what people would be searching for

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants