From 74e95ae0e8486e8f3fede1e1fbe3fdef230f158b Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Sat, 17 Aug 2024 11:43:52 -0700 Subject: [PATCH] Fix link syntax that was broken in #2690 (#2702) --- .../frc-docs/build-instructions.rst | 2 +- .../frc-docs/contribution-guidelines.rst | 2 +- .../docs/contributing/frc-docs/style-guide.rst | 8 ++++---- .../control-system-hardware.rst | 8 ++++---- .../sensors/analog-potentiometers-hardware.rst | 2 +- .../docs/hardware/sensors/gyros-hardware.rst | 2 +- .../controllers/feedforward.rst | 8 ++++---- .../advanced-controls/controls-glossary.rst | 8 ++++---- .../geometry/transformations.rst | 4 ++-- .../introduction-to-feedforward.rst | 2 +- .../trajectories/constraints.rst | 2 +- .../advanced-controls/trajectories/ramsete.rst | 2 +- .../trajectories/trajectory-generation.rst | 2 +- .../advanced-controls/video-walkthrough.rst | 2 +- .../advanced-gradlerio/robot-code-ci.rst | 4 ++-- .../software/basic-programming/cpp-units.rst | 2 +- .../basic-programming/git-getting-started.rst | 18 +++++++++--------- .../basic-programming/reading-stacktraces.rst | 2 +- .../software/can-devices/pneumatic-hub.rst | 2 +- .../can-devices/pneumatics-control-module.rst | 2 +- .../can-devices/power-distribution-module.rst | 2 +- .../binding-commands-to-triggers.rst | 2 +- .../commandbased/command-compositions.rst | 18 +++++++++--------- .../commandbased/command-scheduler.rst | 2 +- source/docs/software/commandbased/commands.rst | 2 +- .../dashboards/glass/field2d-widget.rst | 2 +- .../dashboards/glass/mech2d-widget.rst | 4 ++-- .../docs/software/dashboards/glass/plots.rst | 2 +- .../custom-widgets/creating-a-new-widget.rst | 4 ++-- .../creating-custom-data-types.rst | 2 +- .../custom-widgets/creating-plugins.rst | 4 ++-- .../custom-widgets/custom-themes.rst | 2 +- .../custom-widgets/widget-types.rst | 2 +- .../getting-started/shuffleboard-faq.rst | 2 +- .../driver-station-log-viewer.rst | 2 +- source/docs/software/frc-glossary.rst | 8 ++++---- .../hardware-apis/misc/addressable-leds.rst | 2 +- .../hardware-apis/sensors/counters.rst | 2 +- .../sensors/encoders-software.rst | 2 +- .../hardware-apis/sensors/gyros-software.rst | 4 ++-- .../sensors/ultrasonics-software.rst | 2 +- .../differential-drive-odometry.rst | 2 +- .../mecanum-drive-odometry.rst | 2 +- .../labview/resources/labview-resources.rst | 4 ++-- ...and-global-variables-in-labview-for-frc.rst | 2 +- .../networktables/networktables-intro.rst | 6 +++--- .../networktables/publish-and-subscribe.rst | 6 +++--- .../creating-following-trajectory.rst | 4 ++-- source/docs/software/python/pyproject_toml.rst | 2 +- .../roborio-info/roborio-brownouts.rst | 2 +- .../using-the-cameraserver-on-the-roborio.rst | 4 ++-- ...stalling-the-image-to-your-microsd-card.rst | 3 +-- .../wpilibpi/walkthrough-video.rst | 2 +- .../vscode-overview/3rd-party-libraries.rst | 8 ++++---- .../software/vscode-overview/vscode-basics.rst | 2 +- .../robotbuilder-custom-components.rst | 2 +- source/docs/xrp-robot/hardware-and-imaging.rst | 2 +- source/docs/yearly-overview/known-issues.rst | 2 +- .../docs/zero-to-robot/step-2/python-setup.rst | 10 +++++----- .../zero-to-robot/step-3/radio-programming.rst | 8 ++++---- ...test-drivetrain-program-cpp-java-python.rst | 2 +- 61 files changed, 115 insertions(+), 116 deletions(-) diff --git a/source/docs/contributing/frc-docs/build-instructions.rst b/source/docs/contributing/frc-docs/build-instructions.rst index 6750911bbe..af9a92dfc5 100644 --- a/source/docs/contributing/frc-docs/build-instructions.rst +++ b/source/docs/contributing/frc-docs/build-instructions.rst @@ -11,7 +11,7 @@ Ensure that [Git](https://git-scm.com/) is installed and that the frc-docs repos Text Editors / IDE ^^^^^^^^^^^^^^^^^^ -For development, we recommend that you use VS Code along with the `reStructuredText extension `_. However, any text editor will work. +For development, we recommend that you use VS Code along with the [reStructuredText extension](https://marketplace.visualstudio.com/items?itemName=lextudio.restructuredtext). However, any text editor will work. By default, the reStructuredText extension enables linting with all doc8 features enabled. As frc-docs does not follow the line length lint, add the following to your VS Code ``settings.json`` to disable line length linting. diff --git a/source/docs/contributing/frc-docs/contribution-guidelines.rst b/source/docs/contributing/frc-docs/contribution-guidelines.rst index f8d5c57388..94f3375796 100644 --- a/source/docs/contributing/frc-docs/contribution-guidelines.rst +++ b/source/docs/contributing/frc-docs/contribution-guidelines.rst @@ -5,7 +5,7 @@ Contribution Guidelines Welcome to the contribution guidelines for the frc-docs project. If you are unfamiliar to writing in the reStructuredText format, please read up on it [here](https://sphinx-tutorial.readthedocs.io/cheatsheet/). -.. important:: *FIRST*\ |reg| retains all rights to documentation and images provided. Credit for articles/updates will be in the `GitHub commit history. `_ +.. important:: *FIRST*\ |reg| retains all rights to documentation and images provided. Credit for articles/updates will be in the [GitHub commit history.](https://github.com/wpilibsuite/frc-docs/graphs/commit-activity) Mission Statement ----------------- diff --git a/source/docs/contributing/frc-docs/style-guide.rst b/source/docs/contributing/frc-docs/style-guide.rst index 1516ea3f78..bd5c58d9ff 100644 --- a/source/docs/contributing/frc-docs/style-guide.rst +++ b/source/docs/contributing/frc-docs/style-guide.rst @@ -14,7 +14,7 @@ For documents that will have an identical software/hardware name, append "Hardwa Suffix filenames with the ``.rst`` extension. -.. note:: If you are having issues editing files with the ``.rst`` extension, the recommended text editor is VS Code with the `reStructuredText extension `_. +.. note:: If you are having issues editing files with the ``.rst`` extension, the recommended text editor is VS Code with the [reStructuredText extension](https://marketplace.visualstudio.com/items?itemName=lextudio.restructuredtext). Text ---- @@ -32,9 +32,9 @@ Use the following case for these terms: - Linux (not linux) - Java (not java) -Use the ASCII character set for English text. For special characters (e.g. Greek symbols) use the `standard character entity sets `_. +Use the ASCII character set for English text. For special characters (e.g. Greek symbols) use the [standard character entity sets](https://docutils.sourceforge.io/docs/ref/rst/definitions.html#character-entity-sets). -Use ``.. math::`` for standalone equations and ``:math:`` for inline equations. A useful LaTeX equation cheat sheet can be found `here `_. +Use ``.. math::`` for standalone equations and ``:math:`` for inline equations. A useful LaTeX equation cheat sheet can be found [here](https://www.reed.edu/academic_support/pdfs/qskills/latexcheatsheet.pdf). Use literals for filenames, function, and variable names. @@ -98,7 +98,7 @@ All code blocks should have a language specified. 1. Exception: Content where formatting must be preserved and has no language. Instead use ``text``. -Follow the `WPILib style guide `_ for C++ and Java example code. For example, use two spaces for indentation in C++ and Java. +Follow the [WPILib style guide](https://github.com/wpilibsuite/styleguide/) for C++ and Java example code. For example, use two spaces for indentation in C++ and Java. RLI (Remote Literal Include) ---------------------------- diff --git a/source/docs/controls-overviews/control-system-hardware.rst b/source/docs/controls-overviews/control-system-hardware.rst index 83e7961a89..877d6c88b0 100644 --- a/source/docs/controls-overviews/control-system-hardware.rst +++ b/source/docs/controls-overviews/control-system-hardware.rst @@ -45,7 +45,7 @@ CTRE Power Distribution Panel :alt: CTRE Power Distribution Panel :width: 500 -The :ref:[CTRE Power Distribution Panel](docs/software/can-devices/power-distribution-module:Power Distribution Module) (PDP) is designed to distribute power from a 12VDC battery to various robot components through auto-resetting circuit breakers and a small number of special function fused connections. The PDP provides 8 output pairs rated for 40A continuous current and 8 pairs rated for 30A continuous current. The PDP provides dedicated 12V connectors for the roboRIO, as well as connectors for the Voltage Regulator Module and Pneumatics Control Module. It also includes a CAN interface for logging current, temperature, and battery voltage. For more detailed information, see the [PDP User Manual](https://store.ctr-electronics.com/content/user-manual/PDP%20User%27s%20Guide.pdf). +The :ref:`CTRE Power Distribution Panel ` (PDP) is designed to distribute power from a 12VDC battery to various robot components through auto-resetting circuit breakers and a small number of special function fused connections. The PDP provides 8 output pairs rated for 40A continuous current and 8 pairs rated for 30A continuous current. The PDP provides dedicated 12V connectors for the roboRIO, as well as connectors for the Voltage Regulator Module and Pneumatics Control Module. It also includes a CAN interface for logging current, temperature, and battery voltage. For more detailed information, see the [PDP User Manual](https://store.ctr-electronics.com/content/user-manual/PDP%20User%27s%20Guide.pdf). REV Power Distribution Hub -------------------------- @@ -144,7 +144,7 @@ CTRE Pneumatics Control Module :alt: CTRE Pneumatics Control Module :width: 500 -The :ref:[CTRE Pneumatics Control Module](docs/software/can-devices/pneumatics-control-module:Pneumatics Control Module) (PCM) contains all of the inputs and outputs required to operate 12V or 24V pneumatic solenoids and the on board compressor. The PCM contains an input for the pressure sensor and will control the compressor automatically when the robot is enabled and a solenoid has been created in the code. For more information see the [PCM User Manual](https://store.ctr-electronics.com/content/user-manual/PCM%20User%27s%20Guide.pdf). +The :ref:`CTRE Pneumatics Control Module ` (PCM) contains all of the inputs and outputs required to operate 12V or 24V pneumatic solenoids and the on board compressor. The PCM contains an input for the pressure sensor and will control the compressor automatically when the robot is enabled and a solenoid has been created in the code. For more information see the [PCM User Manual](https://store.ctr-electronics.com/content/user-manual/PCM%20User%27s%20Guide.pdf). REV Pneumatic Hub ----------------- @@ -160,7 +160,7 @@ Digital and analog pressure sensor ports are built into the device, increasing t Motor Controllers ----------------- -There are a variety of different :ref:[motor controllers](docs/software/hardware-apis/index:Hardware APIs) which work with the FRC Control System and are approved for use. These devices are used to provide variable voltage control of the brushed and brushless DC motors used in FRC. They are listed here in order of [usage](https://www.firstinspires.org/robotics/frc/blog/2021-beta-testing-usage-report). +There are a variety of different :ref:`motor controllers ` which work with the FRC Control System and are approved for use. These devices are used to provide variable voltage control of the brushed and brushless DC motors used in FRC. They are listed here in order of [usage](https://www.firstinspires.org/robotics/frc/blog/2021-beta-testing-usage-report). .. note:: 3rd Party CAN control is not supported from WPILib. See this section on :ref:`docs/software/can-devices/third-party-devices:Third-Party CAN Devices` for more information. @@ -171,7 +171,7 @@ Talon SRX :alt: Talon SRX :width: 500 -The [Talon SRX Motor Controller](https://store.ctr-electronics.com/talon-srx/) is a "smart motor controller" from Cross The Road Electronics/VEX Robotics. The Talon SRX can be controlled over the CAN bus or :term:[PWM` interface. When using the CAN bus control, this device can take inputs from limit switches and potentiometers, encoders, or similar sensors in order to perform advanced control. For more information see the [Talon SRX User's Guide](https://store.ctr-electronics.com/content/user-manual/Talon%20SRX%20User's%20Guide.pdf). +The [Talon SRX Motor Controller](https://store.ctr-electronics.com/talon-srx/) is a "smart motor controller" from Cross The Road Electronics/VEX Robotics. The Talon SRX can be controlled over the CAN bus or :term:`PWM` interface. When using the CAN bus control, this device can take inputs from limit switches and potentiometers, encoders, or similar sensors in order to perform advanced control. For more information see the [Talon SRX User's Guide](https://store.ctr-electronics.com/content/user-manual/Talon%20SRX%20User's%20Guide.pdf). Victor SPX ^^^^^^^^^^ diff --git a/source/docs/hardware/sensors/analog-potentiometers-hardware.rst b/source/docs/hardware/sensors/analog-potentiometers-hardware.rst index a6ab6db4f5..cf763e058d 100644 --- a/source/docs/hardware/sensors/analog-potentiometers-hardware.rst +++ b/source/docs/hardware/sensors/analog-potentiometers-hardware.rst @@ -7,7 +7,7 @@ Analog Potentiometers - Hardware .. warning:: Potentiometers generally have a mechanically-limited travel range. Users should be careful that their mechanisms do not turn their potentiometers past their maximum travel, as this will damage or destroy the potentiometer. -Apart from :doc:[quadrature encoders](encoders-hardware), another common way of measuring rotation on FRC\ |reg| robots is with analog potentiometers. A potentiometer is simply a variable resistor - as the shaft of the potentiometer turns, the resistance changes (usually linearly). Placing this resistor in a [voltage divider](https://en.wikipedia.org/wiki/Voltage_divider) allows the user to easily measure the resistance by measuring the voltage across the potentiometer, which can then be used to calculate the rotational position of the shaft. +Apart from :doc:`quadrature encoders `, another common way of measuring rotation on FRC\ |reg| robots is with analog potentiometers. A potentiometer is simply a variable resistor - as the shaft of the potentiometer turns, the resistance changes (usually linearly). Placing this resistor in a [voltage divider](https://en.wikipedia.org/wiki/Voltage_divider) allows the user to easily measure the resistance by measuring the voltage across the potentiometer, which can then be used to calculate the rotational position of the shaft. Wiring an analog potentiometer ------------------------------ diff --git a/source/docs/hardware/sensors/gyros-hardware.rst b/source/docs/hardware/sensors/gyros-hardware.rst index e3f7820574..a0eeef71e8 100644 --- a/source/docs/hardware/sensors/gyros-hardware.rst +++ b/source/docs/hardware/sensors/gyros-hardware.rst @@ -25,7 +25,7 @@ Single-axis Gyros :alt: The Analog Devices 1-axis Gyro plugged into the SPI port of the roboRIO. :width: 400 -As per their name, single-axis gyros measure rotation rate around a single axis. This axis is generally specified on the physical device, and mounting the device in the proper orientation so that the desired axis is measured is highly important. Some single-axis gyros can output an analog voltage corresponding to the measured rate of rotation, and so connect to the roboRIO's :doc:[analog input](analog-inputs-hardware>` ports. Other single-axis gyros, such as the `ADXRS450 ` on the roboRIO instead. +As per their name, single-axis gyros measure rotation rate around a single axis. This axis is generally specified on the physical device, and mounting the device in the proper orientation so that the desired axis is measured is highly important. Some single-axis gyros can output an analog voltage corresponding to the measured rate of rotation, and so connect to the roboRIO's :doc:`analog input ` ports. Other single-axis gyros, such as the [ADXRS450](https://wiki.analog.com/first) pictured above, use the :ref:`SPI port ` on the roboRIO instead. The [Analog Devices ADXRS450 FRC Gyro Board](https://www.analog.com/en/landing-pages/001/first.html) that has been in FIRST Choice in recent years is a commonly used single axis gyro. diff --git a/source/docs/software/advanced-controls/controllers/feedforward.rst b/source/docs/software/advanced-controls/controllers/feedforward.rst index c9a2f90116..a6f93d8df6 100644 --- a/source/docs/software/advanced-controls/controllers/feedforward.rst +++ b/source/docs/software/advanced-controls/controllers/feedforward.rst @@ -14,13 +14,13 @@ The WPILib Feedforward Classes WPILib provides a number of classes to help users implement accurate feedforward control for their mechanisms. In many ways, an accurate feedforward is more important than feedback to effective control of a mechanism. Since most FRC\ |reg| mechanisms closely obey well-understood system equations, starting with an accurate feedforward is both easy and hugely beneficial to accurate and robust mechanism control. -The WPILib feedforward classes closely match the available mechanism characterization tools available in the :ref:[SysId toolsuite](docs/software/advanced-controls/system-identification/introduction:Introduction to System Identification>`. The system identification toolsuite can be used to quickly and effectively determine the correct gains for each type of feedforward. If you are unable to empirically characterize your mechanism (due to space and/or time constraints), reasonable estimates of ``kG``, ``kV``, and ``kA`` can be obtained by fairly simple computation, and are also available from `ReCalc `. The system identification toolsuite can be used to quickly and effectively determine the correct gains for each type of feedforward. If you are unable to empirically characterize your mechanism (due to space and/or time constraints), reasonable estimates of ``kG``, ``kV``, and ``kA`` can be obtained by fairly simple computation, and are also available from [ReCalc](https://www.reca.lc/). ``kS`` is nearly impossible to model, and must be measured empirically. WPILib currently provides the following three helper classes for feedforward control: -* [SimpleMotorFeedforward`_ (`Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/controller/SimpleMotorFeedforward.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_simple_motor_feedforward.html), :external:py:class:`Python `) -* [ArmFeedforward`_ (`Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/controller/ArmFeedforward.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_arm_feedforward.html), :external:py:class:`Python `) -* [ElevatorFeedforward`_ (`Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/controller/ElevatorFeedforward.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_elevator_feedforward.html), :external:py:class:`Python `) +* `SimpleMotorFeedforward`_ (Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/controller/SimpleMotorFeedforward.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_simple_motor_feedforward.html), :external:py:class:`Python `) +* `ArmFeedforward`_ (Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/controller/ArmFeedforward.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_arm_feedforward.html), :external:py:class:`Python `) +* `ElevatorFeedforward`_ (Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/controller/ElevatorFeedforward.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_elevator_feedforward.html), :external:py:class:`Python `) SimpleMotorFeedforward ---------------------- diff --git a/source/docs/software/advanced-controls/controls-glossary.rst b/source/docs/software/advanced-controls/controls-glossary.rst index c9504e8565..78df6fb6c0 100644 --- a/source/docs/software/advanced-controls/controls-glossary.rst +++ b/source/docs/software/advanced-controls/controls-glossary.rst @@ -25,7 +25,7 @@ Controls Glossary Used in position or negative feedback with a :term:`plant` to bring about a desired :term:`system state ` by driving the difference between a :term:`reference` signal and the :term:`output` to zero. convolution - A mathematical operation that calculates a weighted moving average of one function, with the weights assigned by a second function. A common way to "filter" sensor input is to apply a *convolution* to it, using a carefully-chosen filtering function. See `convolution `__ on Wikipedia for more info. + A mathematical operation that calculates a weighted moving average of one function, with the weights assigned by a second function. A common way to "filter" sensor input is to apply a *convolution* to it, using a carefully-chosen filtering function. See [convolution](https://en.wikipedia.org/wiki/Convolution) on Wikipedia for more info. counter-electromotive force A :term:`voltage` generated in a spinning motor. The voltage is a result of the fact that has a coil of wire rotating near a magnet. See [Counter-electromotive_force](https://en.wikipedia.org/wiki/Counter-electromotive_force) on Wikipedia for more info. @@ -69,7 +69,7 @@ Controls Glossary Inputs are often represented by the variable :math:`\mathbf{u}`, a column vector with one entry per :term:`input` to the :term:`system`. least-squares regression - A curve-fitting technique which picks a curve to minimize the *square* of the error between the fitted curve and the actual measured data. See `ordinary least-squares regression `__ on Wikipedia for more info. + A curve-fitting technique which picks a curve to minimize the *square* of the error between the fitted curve and the actual measured data. See [ordinary least-squares regression](https://en.wikipedia.org/wiki/Linear_regression) on Wikipedia for more info. LQR Linear-Quadratic Regulator - A feedback control scheme which seeks to operate a system in a "most optimal" or "lowest cost" manner, in the sense of minimizing the square of some "cost function" that represents a combination of system error and control effort. This requires an accurate mathematical model of the system being controlled, and function describing the "cost" of any given system state. See [LQR](https://en.wikipedia.org/wiki/Linear%E2%80%93quadratic_regulator) on Wikipedia for more info. @@ -98,7 +98,7 @@ Controls Glossary A graph of a function's value and its :term:`derivative` as they change in time, given some initial starting conditions. They are useful for analyzing system behavior (stable/unstable operating points, limit cycles, etc.) given a certain set of parameters or starting conditions. See [phase portrait](https://en.wikipedia.org/wiki/Phase_portrait) on Wikipedia for more info. PID - Proportional-Integral-Derivative - A feedback controller which calculates a :term:`control signal` from a weighted sum of the :term:`error`, the rate of change of the error, and an accumulated sum of previous errors. See `PID controller `__ on Wikipedia for more info. + Proportional-Integral-Derivative - A feedback controller which calculates a :term:`control signal` from a weighted sum of the :term:`error`, the rate of change of the error, and an accumulated sum of previous errors. See [PID controller](https://en.wikipedia.org/wiki/PID_controller) on Wikipedia for more info. plant The :term:`system` or collection of actuators being controlled. @@ -126,7 +126,7 @@ Controls Glossary The time a :term:`system` takes to settle at the :term:`reference` after a :term:`step input` is applied. signum function - A non-continuous function that expresses the "sign" of its input. It is equal to -1 for all negative input numbers, 0 for an input of 0, and 1 for all positive input numbers. See `signum function `__ on Wikipedia for more info. + A non-continuous function that expresses the "sign" of its input. It is equal to -1 for all negative input numbers, 0 for an input of 0, and 1 for all positive input numbers. See [signum function](https://en.wikipedia.org/wiki/Sign_function) on Wikipedia for more info. state A characteristic of a :term:`system` (e.g., velocity) that can be used to determine the :term:`system `\'s future behavior. In state-space notation, the state of a system is written as a column vector describing its position in state-space. diff --git a/source/docs/software/advanced-controls/geometry/transformations.rst b/source/docs/software/advanced-controls/geometry/transformations.rst index 406b9b87f8..2f015952b2 100644 --- a/source/docs/software/advanced-controls/geometry/transformations.rst +++ b/source/docs/software/advanced-controls/geometry/transformations.rst @@ -26,11 +26,11 @@ Transformations for ``Rotation2d`` are just arithmetic operations on the angle m Transform2d and Twist2d ----------------------- -WPILib provides 2 classes, ``Transform2d`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/geometry/Transform2d.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_transform2d.html), :external:py:class:[Python](wpimath.geometry.Transform2d>`), which represents a transformation to a pose, and ``Twist2d`` (`Java `) which represents a movement along an arc. ``Transform2d`` and ``Twist2d`` all have x, y and :math:`\theta` components. +WPILib provides 2 classes, ``Transform2d`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/geometry/Transform2d.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_transform2d.html), :external:py:class:[Python](wpimath.geometry.Transform2d>`), which represents a transformation to a pose, and ``Twist2d`` ([Java] (https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/geometry/Twist2d.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/structfrc_1_1_twist2d.html), :external:py:class:`Python `) which represents a movement along an arc. ``Transform2d`` and ``Twist2d`` all have x, y and :math:`\theta` components. ``Transform2d`` represents a **relative** transformation. It has an translation and a rotation component. Transforming a ``Pose2d`` by a ``Transform2d`` rotates the translation component of the transform by the rotation of the pose, and then adds the rotated translation component and the rotation component to the pose. In other words, ``Pose2d.plus(Transform2d)`` returns :math:`\begin{bmatrix} x_p \\ y_p \\ \theta_p \end{bmatrix}+\begin{bmatrix} cos\theta_p & -sin\theta_p & 0 \\ sin\theta_p & cos\theta_p & 0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix}x_t \\ y_t \\ \theta_t \end{bmatrix}` -``Twist2d`` represents a change in distance along an arc. Usually, this class is used to represent the movement of a drivetrain, where the x component is the forward distance driven, the y component is the distance driven to the side (left positive), and the :math:`\theta` component is the change in heading. The underlying math behind finding the pose exponential (new pose after moving the pose forward along the curvature of the twist) can be found `here `_ in chapter 10. +``Twist2d`` represents a change in distance along an arc. Usually, this class is used to represent the movement of a drivetrain, where the x component is the forward distance driven, the y component is the distance driven to the side (left positive), and the :math:`\theta` component is the change in heading. The underlying math behind finding the pose exponential (new pose after moving the pose forward along the curvature of the twist) can be found [here](https://file.tavsys.net/control/controls-engineering-in-frc.pdf) in chapter 10. .. note:: For nonholonomic drivetrains, the y component of a ``Twist2d`` should always be 0. diff --git a/source/docs/software/advanced-controls/introduction/introduction-to-feedforward.rst b/source/docs/software/advanced-controls/introduction/introduction-to-feedforward.rst index dcb6a23659..19c0459786 100644 --- a/source/docs/software/advanced-controls/introduction/introduction-to-feedforward.rst +++ b/source/docs/software/advanced-controls/introduction/introduction-to-feedforward.rst @@ -55,7 +55,7 @@ where :math:`V` is the applied voltage, :math:`\theta` is the angular displaceme Using the Feedforward --------------------- -In order to use the feedforward, we need to plug in values for each unknown in the above voltage-balance equation *other than the voltage*. As mentioned :ref:[earlier](docs/software/advanced-controls/introduction/picking-control-strategy:Obtaining Models for Your Mechanisms>`, the values of the gains :math:`K_g`, :math:`K_v`, :math:`K_a` can be obtained through theoretical modeling with `ReCalc ` will yield the aforementioned gains in addition to :math:`K_s`. That leaves us needing values for velocity, acceleration, and (in the case of the arm feedforward) position. +In order to use the feedforward, we need to plug in values for each unknown in the above voltage-balance equation *other than the voltage*. As mentioned :ref:`earlier `, the values of the gains :math:`K_g`, :math:`K_v`, :math:`K_a` can be obtained through theoretical modeling with [ReCalc] (https://www.reca.lc/). Explicit measurement with :doc:`SysId ` will yield the aforementioned gains in addition to :math:`K_s`. That leaves us needing values for velocity, acceleration, and (in the case of the arm feedforward) position. Typically, these come from our setpoints - remember that with feedforward we are making a "guess" as to the output we need based on where we want the system to be. diff --git a/source/docs/software/advanced-controls/trajectories/constraints.rst b/source/docs/software/advanced-controls/trajectories/constraints.rst index 0d803b0f2e..21ee983dec 100644 --- a/source/docs/software/advanced-controls/trajectories/constraints.rst +++ b/source/docs/software/advanced-controls/trajectories/constraints.rst @@ -80,4 +80,4 @@ Users can create their own constraint by implementing the ``TrajectoryConstraint The ``MaxVelocity`` method should return the maximum allowed velocity for the given pose, curvature, and original velocity of the trajectory without any constraints. The ``MinMaxAcceleration`` method should return the minimum and maximum allowed acceleration for the given pose, curvature, and constrained velocity. -See the source code (`Java `_, `C++ `_) for the WPILib-provided constraints for more examples on how to write your own custom trajectory constraints. +See the source code ([Java](https://github.com/wpilibsuite/allwpilib/tree/main/wpimath/src/main/java/edu/wpi/first/math/trajectory/constraint), [C++] (https://github.com/wpilibsuite/allwpilib/tree/main/wpimath/src/main/native/cpp/trajectory/constraint)) for the WPILib-provided constraints for more examples on how to write your own custom trajectory constraints. diff --git a/source/docs/software/advanced-controls/trajectories/ramsete.rst b/source/docs/software/advanced-controls/trajectories/ramsete.rst index 1cbf2eeee3..b3a681b8a5 100644 --- a/source/docs/software/advanced-controls/trajectories/ramsete.rst +++ b/source/docs/software/advanced-controls/trajectories/ramsete.rst @@ -98,7 +98,7 @@ The returned adjusted speeds can be converted to usable speeds using the kinemat left = wheelSpeeds.left right = wheelSpeeds.right -Because these new left and right velocities are still speeds and not voltages, two PID Controllers, one for each side may be used to track these velocities. Either the WPILib PIDController (`C++ `_, `Java `_, :external:py:class:`Python `) can be used, or the Velocity PID feature on smart motor controllers such as the TalonSRX and the SPARK MAX can be used. +Because these new left and right velocities are still speeds and not voltages, two PID Controllers, one for each side may be used to track these velocities. Either the WPILib PIDController ([C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_p_i_d_controller.html), [Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/controller/PIDController.html), :external:py:class:`Python `) can be used, or the Velocity PID feature on smart motor controllers such as the TalonSRX and the SPARK MAX can be used. Ramsete in the Command-Based Framework -------------------------------------- diff --git a/source/docs/software/advanced-controls/trajectories/trajectory-generation.rst b/source/docs/software/advanced-controls/trajectories/trajectory-generation.rst index 8ada578956..f2c5c434df 100644 --- a/source/docs/software/advanced-controls/trajectories/trajectory-generation.rst +++ b/source/docs/software/advanced-controls/trajectories/trajectory-generation.rst @@ -65,7 +65,7 @@ Here is an example of generating a trajectory using clamped cubic splines for th :language: python :lines: 5-20 -.. note:: The Java code utilizes the `Units `_ utility, for easy unit conversions. +.. note:: The Java code utilizes the [Units](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/util/Units.html) utility, for easy unit conversions. .. note:: Generating a typical trajectory takes about 10 ms to 25 ms. This isn't long, but it's still highly recommended to generate all trajectories on startup (``robotInit``). diff --git a/source/docs/software/advanced-controls/video-walkthrough.rst b/source/docs/software/advanced-controls/video-walkthrough.rst index 781edbc1f0..6a4b6f54e9 100644 --- a/source/docs/software/advanced-controls/video-walkthrough.rst +++ b/source/docs/software/advanced-controls/video-walkthrough.rst @@ -9,4 +9,4 @@ At the "RSN Spring Conference, Presented by WPI" in 2020, Tyler Veness from the
-The link to the presentation is available `here `_. +The link to the presentation is available [here](https://github.com/calcmogul/auton-driving-presentation). diff --git a/source/docs/software/advanced-gradlerio/robot-code-ci.rst b/source/docs/software/advanced-gradlerio/robot-code-ci.rst index fb3b881bac..68989b1ab7 100644 --- a/source/docs/software/advanced-gradlerio/robot-code-ci.rst +++ b/source/docs/software/advanced-gradlerio/robot-code-ci.rst @@ -3,7 +3,7 @@ Setting up CI for Robot Code using GitHub Actions An important aspect of working in a team environment is being able to test code that is pushed to a central repository such as GitHub. For example, a project manager or lead developer might want to run a set of unit tests before merging a pull request or might want to ensure that all code on the main branch of a repository is in working order. -`GitHub Actions `_ is a service that allows for teams and individuals to build and run unit tests on code on various branches and on pull requests. These types of services are more commonly known as "Continuous Integration" services. This tutorial will show you how to setup GitHub Actions on robot code projects. +[GitHub Actions](https://github.com/features/actions) is a service that allows for teams and individuals to build and run unit tests on code on various branches and on pull requests. These types of services are more commonly known as "Continuous Integration" services. This tutorial will show you how to setup GitHub Actions on robot code projects. .. note:: This tutorial assumes that your team's robot code is being hosted on GitHub. For an introduction to Git and GitHub, please see this :doc:`introduction guide
`. @@ -98,7 +98,7 @@ This block of code dictates when the Action will run. Currently, the action will Each Action workflow is made of a one or more jobs that run either sequentially (one after another) or in parallel (at the same time). In our workflow, there is only one "build" job. -We specify that we want the job to run on an Ubuntu virtual machine and in a virtualized `Docker container `_ that contains the JDK, C++ compiler and roboRIO toolchains. +We specify that we want the job to run on an Ubuntu virtual machine and in a virtualized [Docker container ](https://www.docker.com/resources/what-container) that contains the JDK, C++ compiler and roboRIO toolchains. .. code-block:: yaml diff --git a/source/docs/software/basic-programming/cpp-units.rst b/source/docs/software/basic-programming/cpp-units.rst index 447f592122..53b8d2d6fc 100644 --- a/source/docs/software/basic-programming/cpp-units.rst +++ b/source/docs/software/basic-programming/cpp-units.rst @@ -185,4 +185,4 @@ Some WPILib classes represent objects that could naturally work with multiple ch // Max acceleration of 20 radians per second squared frc::TrapezoidProfile::Constraints{10_rad_per_s, 20__rad_per_s / 1_s}; -For more detailed documentation, please visit the official `GitHub page `_ for the units library. +For more detailed documentation, please visit the official [GitHub page](https://github.com/nholthaus/units) for the units library. diff --git a/source/docs/software/basic-programming/git-getting-started.rst b/source/docs/software/basic-programming/git-getting-started.rst index 9ed445aa4d..b7fc585872 100644 --- a/source/docs/software/basic-programming/git-getting-started.rst +++ b/source/docs/software/basic-programming/git-getting-started.rst @@ -5,7 +5,7 @@ Git Version Control Introduction .. important:: A more in-depth guide on Git is available on the [Git website](https://git-scm.com/book/en/v2). -`Git `_ is a Distributed Version Control System (VCS) created by Linus Torvalds, also known for creating and maintaining the Linux kernel. Version Control is a system for tracking changes of code for developers. The advantages of Git Version Control are: +[Git](https://git-scm.com/about) is a Distributed Version Control System (VCS) created by Linus Torvalds, also known for creating and maintaining the Linux kernel. Version Control is a system for tracking changes of code for developers. The advantages of Git Version Control are: - Separation of testing environments into *branches* - Ability to navigate to a particular *commit* without removing history @@ -19,9 +19,9 @@ Prerequisites You have to download and install Git from the following links: -- `Windows `_ -- `macOS `_ -- `Linux `_ +- [Windows](https://git-scm.com/download/win) +- [macOS](https://git-scm.com/download/mac) +- [Linux](https://git-scm.com/download/linux) .. note:: You may need to add Git to your [path](https://www.google.com/search?q=adding+git+to+path) @@ -53,9 +53,9 @@ Git repositories usually consist of: Creating the repository ^^^^^^^^^^^^^^^^^^^^^^^ -You can store the repository locally, or through a remote -- a remote being the cloud, or possibly another storage medium or server that hosts your repository. `GitHub `_ is a popular free hosting service. Numerous developers use it, and that's what this tutorial will use. +You can store the repository locally, or through a remote -- a remote being the cloud, or possibly another storage medium or server that hosts your repository. [GitHub](https://github.com/) is a popular free hosting service. Numerous developers use it, and that's what this tutorial will use. -.. note:: There are various providers that can host repositories. `Gitlab `_ and `Bitbucket `_ are a few alternatives to Github. +.. note:: There are various providers that can host repositories. [Gitlab](https://about.gitlab.com) and [Bitbucket](https://bitbucket.org/) are a few alternatives to Github. Creating a GitHub Account ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -152,7 +152,7 @@ In the previous example, we created a file called README.md. Open that file in y 1 file changed, 2 insertions(+), 0 deletions(-) > git push -.. note:: Writing good commit messages is a key part of a maintainable project. A guide on writing commit messages can be found `here `_. +.. note:: Writing good commit messages is a key part of a maintainable project. A guide on writing commit messages can be found [here](https://cbea.ms/git-commit/). Git Pull ^^^^^^^^ @@ -270,7 +270,7 @@ Gitignore .. important:: It is extremely important that teams **do not** modify the ``.gitignore`` file that is included with their robot project. This can lead to offline deployment not working. -A ``.gitignore`` file is commonly used as a list of files to not automatically commit with ``git add``. Any files or directory listed in this file will **not** be committed. They will also not show up with `git status `_. +A ``.gitignore`` file is commonly used as a list of files to not automatically commit with ``git add``. Any files or directory listed in this file will **not** be committed. They will also not show up with [git status](https://git-scm.com/docs/git-status). Additional Information can be found [here](https://www.atlassian.com/git/tutorials/saving-changes/gitignore). @@ -295,4 +295,4 @@ Additional Information A much more in-depth tutorial can be found at the official [git](https://git-scm.com/docs/gittutorial) website. -A guide for correcting common mistakes can be found at the git `flight rules `_ repository. +A guide for correcting common mistakes can be found at the git [flight rules](https://github.com/k88hudson/git-flight-rules/blob/master/README.md) repository. diff --git a/source/docs/software/basic-programming/reading-stacktraces.rst b/source/docs/software/basic-programming/reading-stacktraces.rst index 6693711b71..868607eeee 100644 --- a/source/docs/software/basic-programming/reading-stacktraces.rst +++ b/source/docs/software/basic-programming/reading-stacktraces.rst @@ -142,7 +142,7 @@ Sometimes, just looking at code isn't enough to spot the issue. The :ref:`single Search for More Information ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`Google `_ is a phenomenal resource for understanding the root cause of errors. Searches involving the programming language and the name of the exception will often yield good results on more explanations for what the error means, how it comes about, and potential fixes. +[Google](https://www.google.com/) is a phenomenal resource for understanding the root cause of errors. Searches involving the programming language and the name of the exception will often yield good results on more explanations for what the error means, how it comes about, and potential fixes. Seeking Outside Help ^^^^^^^^^^^^^^^^^^^^ diff --git a/source/docs/software/can-devices/pneumatic-hub.rst b/source/docs/software/can-devices/pneumatic-hub.rst index 90f20b6432..f300b8d1f9 100644 --- a/source/docs/software/can-devices/pneumatic-hub.rst +++ b/source/docs/software/can-devices/pneumatic-hub.rst @@ -7,7 +7,7 @@ Pneumatic Hub The Pneumatic Hub (:term:`PH`) is a :term:`CAN`-based device that provides complete control over the compressor and up to 16 solenoids per module. The PH is integrated into WPILib through a series of classes that make it simple to use. -The closed loop control of the Compressor and Pressure switch is handled by the :code:[Compressor` class (`Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/Compressor.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_compressor.html), :external:py:class:[Python](wpilib.Compressor>`), and the Solenoids are handled by the :code:`Solenoid` (`Java `) and :code:`DoubleSolenoid` (`Java `) classes. +The closed loop control of the Compressor and Pressure switch is handled by the :code:`Compressor` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/Compressor.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_compressor.html), :external:py:class:[Python](wpilib.Compressor>`), and the Solenoids are handled by the :code:`Solenoid` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/Solenoid.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_solenoid.html), :external:py:class:[Python](wpilib.Solenoid>`) and :code:`DoubleSolenoid` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/DoubleSolenoid.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_double_solenoid.html), :external:py:class:`Python `) classes. An additional PH module can be used where the module's corresponding solenoids are differentiated by the module number in the constructors of the Solenoid and Compressor classes. diff --git a/source/docs/software/can-devices/pneumatics-control-module.rst b/source/docs/software/can-devices/pneumatics-control-module.rst index a58afa9620..e9057ebf00 100644 --- a/source/docs/software/can-devices/pneumatics-control-module.rst +++ b/source/docs/software/can-devices/pneumatics-control-module.rst @@ -7,7 +7,7 @@ Pneumatics Control Module The Pneumatics Control Module (:term:`PCM`) is a :term:`CAN`-based device that provides complete control over the compressor and up to 8 solenoids per module. The PCM is integrated into WPILib through a series of classes that make it simple to use. -The closed loop control of the Compressor and Pressure switch is handled by the :code:[Compressor` class (`Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/Compressor.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_compressor.html), :external:py:class:[Python](wpilib.Compressor>`), and the Solenoids are handled by the :code:`Solenoid` (`Java `) and :code:`DoubleSolenoid` (`Java `) classes. +The closed loop control of the Compressor and Pressure switch is handled by the :code:`Compressor` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/Compressor.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_compressor.html), :external:py:class:[Python](wpilib.Compressor>`), and the Solenoids are handled by the :code:`Solenoid` ([Java])https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/Solenoid.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_solenoid.html), :external:py:class:[Python](wpilib.Solenoid>`) and :code:`DoubleSolenoid` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/DoubleSolenoid.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_double_solenoid.html), :external:py:class:`Python `) classes. An additional PCM module can be used where the module's corresponding solenoids are differentiated by the module number in the constructors of the Solenoid and Compressor classes. diff --git a/source/docs/software/can-devices/power-distribution-module.rst b/source/docs/software/can-devices/power-distribution-module.rst index 45f5b493c9..8239ebc818 100644 --- a/source/docs/software/can-devices/power-distribution-module.rst +++ b/source/docs/software/can-devices/power-distribution-module.rst @@ -6,7 +6,7 @@ The CTRE Power Distribution Panel (:term:`PDP`) and Rev Power Distribution Hub ( Creating a Power Distribution Object ------------------------------------ -To use the either Power Distribution module, create an instance of the :code:[PowerDistribution` class (`Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/PowerDistribution.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_power_distribution.html), :external:py:class:`Python `). With no arguments, the Power Distribution object will be detected, and must use CAN ID of 0 for CTRE or 1 for REV. If the CAN ID is non-default, additional constructors are available to specify the CAN ID and type. +To use the either Power Distribution module, create an instance of the :code:`PowerDistribution` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/PowerDistribution.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_power_distribution.html), :external:py:class:`Python `). With no arguments, the Power Distribution object will be detected, and must use CAN ID of 0 for CTRE or 1 for REV. If the CAN ID is non-default, additional constructors are available to specify the CAN ID and type. .. tab-set-code:: diff --git a/source/docs/software/commandbased/binding-commands-to-triggers.rst b/source/docs/software/commandbased/binding-commands-to-triggers.rst index cac4a238ed..b7f9b3f9f0 100644 --- a/source/docs/software/commandbased/binding-commands-to-triggers.rst +++ b/source/docs/software/commandbased/binding-commands-to-triggers.rst @@ -32,7 +32,7 @@ The command-based HID classes contain factory methods returning a ``Trigger`` fo JoystickButton ^^^^^^^^^^^^^^ -Alternatively, the :ref:[regular HID classes](docs/software/basic-programming/joystick:Joysticks>` can be used and passed to create an instance of ``JoystickButton`` (`Java ` can be used and passed to create an instance of ``JoystickButton`` [Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/button/JoystickButton.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_joystick_button.html)), a constructor-only subclass of ``Trigger``: .. tab-set-code:: diff --git a/source/docs/software/commandbased/command-compositions.rst b/source/docs/software/commandbased/command-compositions.rst index 8d8106f725..778ba4c967 100644 --- a/source/docs/software/commandbased/command-compositions.rst +++ b/source/docs/software/commandbased/command-compositions.rst @@ -38,7 +38,7 @@ The command-based library includes various composition types. All of them can be Repeating ^^^^^^^^^ -The ``repeatedly()`` decorator ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Command.html#repeatedly()), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_command_ptr.html#acc156a5299699110729918c3aa2b2694), :external:py:meth:[Python](commands2.Command.repeatedly>`), backed by the ``RepeatCommand`` class (`Java `) restarts the command each time it ends, so that it runs until interrupted. +The ``repeatedly()`` decorator ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Command.html#repeatedly()), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_command_ptr.html#acc156a5299699110729918c3aa2b2694), :external:py:meth:[Python](commands2.Command.repeatedly>`), backed by the ``RepeatCommand`` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/RepeatCommand.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_repeat_command.html), :external:py:class:`Python `) restarts the command each time it ends, so that it runs until interrupted. .. tab-set-code:: @@ -60,9 +60,9 @@ The ``repeatedly()`` decorator ([Java](https://github.wpilib.org/allwpilib/docs/ Sequence ^^^^^^^^ -The ``Sequence`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#sequence(edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#ac588bdc52a86a4683b89c28dcadea458), :external:py:func:[Python](commands2.cmd.sequence>`), backed by the ``SequentialCommandGroup`` class (`Java `), runs a list of commands in sequence: the first command will be executed, then the second, then the third, and so on until the list finishes. The sequential group finishes after the last command in the sequence finishes. It is therefore usually important to ensure that each command in the sequence does actually finish (if a given command does not finish, the next command will never start!). +The ``Sequence`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#sequence(edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#ac588bdc52a86a4683b89c28dcadea458), :external:py:func:[Python](commands2.cmd.sequence>`), backed by the ``SequentialCommandGroup`` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/SequentialCommandGroup.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_sequential_command_group.html), :external:py:class:`Python `), runs a list of commands in sequence: the first command will be executed, then the second, then the third, and so on until the list finishes. The sequential group finishes after the last command in the sequence finishes. It is therefore usually important to ensure that each command in the sequence does actually finish (if a given command does not finish, the next command will never start!). -The ``andThen()`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Command.html#andThen(edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_command_ptr.html#a4ea952f52baf9fb157bb42801be602c0), :external:py:meth:[Python](commands2.Command.andThen>`) and ``beforeStarting()`` (`Java `) decorators can be used to construct a sequence composition with infix syntax. +The ``andThen()`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Command.html#andThen(edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_command_ptr.html#a4ea952f52baf9fb157bb42801be602c0), :external:py:meth:[Python](commands2.Command.andThen>`) and ``beforeStarting()`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Command.html#beforeStarting(edu.wpi.first.wpilibj2.command.Command)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_command_ptr.html#a61e9a735d7b48dafd4b7499af8ff0c23), :external:py:meth:`Python `) decorators can be used to construct a sequence composition with infix syntax. .. tab-set-code:: @@ -89,9 +89,9 @@ Parallel There are three types of parallel compositions, differing based on when the composition finishes: -- The ``Parallel`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#parallel(edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#ac98ed0faaf370bde01be52bd631dc4e8), :external:py:func:[Python](commands2.cmd.parallel>`), backed by the ``ParallelCommandGroup`` class (`Java `), constructs a parallel composition that finishes when all members finish. The ``alongWith`` decorator (`Java `) does the same in infix notation. -- The ``Race`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#race(edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#a5253e241cf1e19eddfb79e2311068ac5), :external:py:func:[Python](commands2.cmd.race>`), backed by the ``ParallelRaceGroup`` class (`Java `), constructs a parallel composition that finishes as soon as any member finishes; all other members are interrupted at that point. The ``raceWith`` decorator (`Java `) does the same in infix notation. -- The ``Deadline`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#deadline(edu.wpi.first.wpilibj2.command.Command,edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#a91073d40910a70f1e2d02c7ce320196a), :external:py:func:[Python](commands2.cmd.deadline>`), ``ParallelDeadlineGroup`` (`Java `) finishes when a specific command (the "deadline") ends; all other members still running at that point are interrupted. The ``deadlineWith`` decorator (`Java `) does the same in infix notation; the comand the decorator was called on is the deadline. +- The ``Parallel`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#parallel(edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#ac98ed0faaf370bde01be52bd631dc4e8), :external:py:func:[Python](commands2.cmd.parallel>`), backed by the ``ParallelCommandGroup`` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/ParallelCommandGroup.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_parallel_command_group.html), :external:py:class:[Python](commands2.ParallelCommandGroup>`), constructs a parallel composition that finishes when all members finish. The ``alongWith`` decorator ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Command.html#alongWith(edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_command_ptr.html#a6b9700cd25277a3ac558d63301985f40), :external:py:meth:`Python `) does the same in infix notation. +- The ``Race`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#race(edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#a5253e241cf1e19eddfb79e2311068ac5), :external:py:func:[Python](commands2.cmd.race>`), backed by the ``ParallelRaceGroup`` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/ParallelRaceGroup.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_parallel_race_group.html), :external:py:class:[Python](commands2.ParallelRaceGroup>`), constructs a parallel composition that finishes as soon as any member finishes; all other members are interrupted at that point. The ``raceWith`` decorator ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Command.html#raceWith(edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_command_ptr.html#a4d6c1761cef10bb79a727e43e89643d0), :external:py:meth:`Python `) does the same in infix notation. +- The ``Deadline`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#deadline(edu.wpi.first.wpilibj2.command.Command,edu.wpi.first.wpilibj2.command.Command...)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#a91073d40910a70f1e2d02c7ce320196a), :external:py:func:[Python](commands2.cmd.deadline>`), ``ParallelDeadlineGroup`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/ParallelDeadlineGroup.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_parallel_deadline_group.html), :external:py:class:[Python](commands2.ParallelDeadlineGroup>`) finishes when a specific command (the "deadline") ends; all other members still running at that point are interrupted. The ``deadlineWith`` decorator (`Java `) does the same in infix notation; the comand the decorator was called on is the deadline. .. tab-set-code:: @@ -181,7 +181,7 @@ Selecting Compositions Sometimes it's desired to run a command out of a few options based on sensor feedback or other data known only at runtime. This can be useful for determining an auto routine, or running a different command based on whether a game piece is present or not, and so on. -The ``Select`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#select(java.util.Map,java.util.function.Supplier)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#ae9a028777063223108f78c7a0c4e8746), :external:py:func:[Python](commands2.cmd.select>`), backed by the ``SelectCommand`` class (`Java `), executes one command from a map, based on a selector function called when scheduled. +The ``Select`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#select(java.util.Map,java.util.function.Supplier)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#ae9a028777063223108f78c7a0c4e8746), :external:py:func:[Python](commands2.cmd.select>`), backed by the ``SelectCommand`` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/SelectCommand.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_select_command.html), :external:py:class:`Python `), executes one command from a map, based on a selector function called when scheduled. .. tab-set:: @@ -203,7 +203,7 @@ The ``Select`` factory ([Java](https://github.wpilib.org/allwpilib/docs/developm :linenos: :lineno-start: 26 -The ``Either`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#either(edu.wpi.first.wpilibj2.command.Command,edu.wpi.first.wpilibj2.command.Command,java.util.function.BooleanSupplier)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#a389d1d0055c3be03a852bfc88aaa2ee5), :external:py:func:[Python](commands2.cmd.either>`), backed by the ``ConditionalCommand`` class (`Java `), is a specialization accepting two commands and a boolean selector function. +The ``Either`` factory ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Commands.html#either(edu.wpi.first.wpilibj2.command.Command,edu.wpi.first.wpilibj2.command.Command,java.util.function.BooleanSupplier)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/namespacefrc2_1_1cmd.html#a389d1d0055c3be03a852bfc88aaa2ee5), :external:py:func:[Python](commands2.cmd.either>`), backed by the ``ConditionalCommand`` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/ConditionalCommand.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_conditional_command.html), :external:py:class:`Python `), is a specialization accepting two commands and a boolean selector function. .. tab-set-code:: @@ -248,7 +248,7 @@ Scheduling Other Commands By default, composition members are run through the command composition, and are never themselves seen by the scheduler. Accordingly, their requirements are added to the composition's requirements. While this is usually fine, sometimes it is undesirable for the entire command composition to gain the requirements of a single command. A good solution is to "fork off" from the command composition and schedule that command separately. However, this requires synchronization between the composition and the individually-scheduled command. -``ProxyCommand`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/ProxyCommand.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_proxy_command.html), :external:py:class:[Python](commands2.ProxyCommand>`), also creatable using the ``.asProxy()`` decorator (`Java `), schedules a command "by proxy": the command is scheduled when the proxy is scheduled, and the proxy finishes when the command finishes. In the case of "forking off" from a command composition, this allows the composition to track the command's progress without it being in the composition. +``ProxyCommand`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/ProxyCommand.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_proxy_command.html), :external:py:class:[Python](commands2.ProxyCommand>`), also creatable using the ``.asProxy()`` decorator ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Command.html#asProxy()), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_command_ptr.html#aa45784053431393e3277e5bc5ae7f751), :external:py:meth:`Python `), schedules a command "by proxy": the command is scheduled when the proxy is scheduled, and the proxy finishes when the command finishes. In the case of "forking off" from a command composition, this allows the composition to track the command's progress without it being in the composition. Command compositions inherit the union of their compoments' requirements and requirements are immutable. Therefore, a ``SequentialCommandGroup`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/SequentialCommandGroup.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_sequential_command_group.html), :external:py:class:`Python `) that intakes a game piece, indexes it, aims a shooter, and shoots it would reserve all three subsystems (the intake, indexer, and shooter), precluding any of those subsystems from performing other operations in their "downtime". If this is not desired, the subsystems that should only be reserved for the composition while they are actively being used by it should have their commands proxied. diff --git a/source/docs/software/commandbased/command-scheduler.rst b/source/docs/software/commandbased/command-scheduler.rst index 6a2949dfde..e628e9a4ed 100644 --- a/source/docs/software/commandbased/command-scheduler.rst +++ b/source/docs/software/commandbased/command-scheduler.rst @@ -22,7 +22,7 @@ To schedule a command, users call the ``schedule()`` method ([Java](https://gith This method walks through the following steps: #. Verifies that the command isn't in a composition. -#. :term:`No-op` if scheduler is disabled, command is already scheduled, or robot is disabled and command doesn't . +#. :term:`No-op` if scheduler is disabled, command is already scheduled, or robot is disabled and command doesn't :ref:`docs/software/commandbased/commands:runsWhenDisabled`. #. If requirements are in use: * If all conflicting commands are interruptible, cancel them. diff --git a/source/docs/software/commandbased/commands.rst b/source/docs/software/commandbased/commands.rst index 80d6483185..c4984ac35e 100644 --- a/source/docs/software/commandbased/commands.rst +++ b/source/docs/software/commandbased/commands.rst @@ -88,7 +88,7 @@ The ``getInterruptionBehavior()`` method ([Java](https://github.wpilib.org/allwp .. note:: This was previously controlled by the ``interruptible`` parameter passed when scheduling a command, and is now a property of the command object. -This property can be set either by overriding the ``getInterruptionBehavior`` method in the relevant command class, or by using the [withInterruptBehavior()` decorator (`Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Command.html#withInterruptBehavior(edu.wpi.first.wpilibj2.command.Command.InterruptionBehavior)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_command.html#a6583f966509478a29e7764a72c4bf177), :external:py:meth:`Python `) +This property can be set either by overriding the ``getInterruptionBehavior`` method in the relevant command class, or by using the `withInterruptBehavior()` decorator ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/Command.html#withInterruptBehavior(edu.wpi.first.wpilibj2.command.Command.InterruptionBehavior)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_command.html#a6583f966509478a29e7764a72c4bf177), :external:py:meth:`Python `) .. tab-set-code:: diff --git a/source/docs/software/dashboards/glass/field2d-widget.rst b/source/docs/software/dashboards/glass/field2d-widget.rst index 6a05886b2e..82981d4983 100644 --- a/source/docs/software/dashboards/glass/field2d-widget.rst +++ b/source/docs/software/dashboards/glass/field2d-widget.rst @@ -115,7 +115,7 @@ Now, uncheck the :guilabel:`Arrows` checkbox. This will cause our trajectory to Viewing Pose Data with AdvantageScope ------------------------------------- -:ref:[AdvantageScope](docs/software/dashboards/advantagescope:AdvantageScope) is an alternative option for viewing pose data from a ``Field2d`` object, including data recorded to a log file using :ref:`WPILib data logs `. Both 2D and 3D visualizations are supported. See the documentation for the [odometry](https://github.com/Mechanical-Advantage/AdvantageScope/blob/main/docs/tabs/ODOMETRY.md) and [3D field](https://github.com/Mechanical-Advantage/AdvantageScope/blob/main/docs/tabs/3D-FIELD.md) tabs for more details. +:ref:`AdvantageScope ` is an alternative option for viewing pose data from a ``Field2d`` object, including data recorded to a log file using :ref:`WPILib data logs `. Both 2D and 3D visualizations are supported. See the documentation for the [odometry](https://github.com/Mechanical-Advantage/AdvantageScope/blob/main/docs/tabs/ODOMETRY.md) and [3D field](https://github.com/Mechanical-Advantage/AdvantageScope/blob/main/docs/tabs/3D-FIELD.md) tabs for more details. .. image:: images/advantagescope-field2d.png :alt: Screenshot of an AdvantageScope window displaying a robot and trajectory on a 3D field. diff --git a/source/docs/software/dashboards/glass/mech2d-widget.rst b/source/docs/software/dashboards/glass/mech2d-widget.rst index b9b6a238f2..c4adbdc9e6 100644 --- a/source/docs/software/dashboards/glass/mech2d-widget.rst +++ b/source/docs/software/dashboards/glass/mech2d-widget.rst @@ -114,7 +114,7 @@ Once the widget appears as shown below, you can resize and place it on the Glass Viewing the Mechanism2d in AdvantageScope ----------------------------------------- -:ref:[AdvantageScope](docs/software/dashboards/advantagescope:AdvantageScope) is an alternative option for viewing a ``Mechanism2d`` object, including data recorded to a log file using :ref:`WPILib data logs `. Both 2D and 3D visualizations are supported. See the documentation for the [mechanism](https://github.com/Mechanical-Advantage/AdvantageScope/blob/main/docs/tabs/MECHANISM.md) and [3D field](https://github.com/Mechanical-Advantage/AdvantageScope/blob/main/docs/tabs/3D-FIELD.md) tabs for more details. +:ref:`AdvantageScope ` is an alternative option for viewing a ``Mechanism2d`` object, including data recorded to a log file using :ref:`WPILib data logs `. Both 2D and 3D visualizations are supported. See the documentation for the [mechanism](https://github.com/Mechanical-Advantage/AdvantageScope/blob/main/docs/tabs/MECHANISM.md) and [3D field](https://github.com/Mechanical-Advantage/AdvantageScope/blob/main/docs/tabs/3D-FIELD.md) tabs for more details. .. image:: images/advantagescope-mechanism.png :alt: Screenshot of an AdvantageScope window displaying a robot and mechanism in 3D. @@ -123,4 +123,4 @@ Viewing the Mechanism2d in AdvantageScope Next Steps ---------- -As mentioned above, the Mechanism2d visualization can be combined with :doc:[Physics Simulation](/docs/software/wpilib-tools/robot-simulation/physics-sim) to help you program mechanisms before your robot is built. The ArmSimulation ([Java](https://github.com/wpilibsuite/allwpilib/blob/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/armsimulation/Robot.java) / [C++](https://github.com/wpilibsuite/allwpilib/blob/main/wpilibcExamples/src/main/cpp/examples/ArmSimulation/cpp/Robot.cpp) / [Python](https://github.com/robotpy/examples/blob/2024.0.0b4/ArmSimulation/robot.py)) and ElevatorSimulation ([Java](https://github.com/wpilibsuite/allwpilib/blob/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/elevatorsimulation/Robot.java) / [C++](https://github.com/wpilibsuite/allwpilib/blob/main/wpilibcExamples/src/main/cpp/examples/ElevatorSimulation/cpp/Robot.cpp) / [Python](https://github.com/robotpy/examples/blob/2024.0.0b4/ElevatorSimulation/robot.py)) examples combine physics simulation and Mechanism2d visualization so that you can practice programming a single jointed arm and elevator without a robot. +As mentioned above, the Mechanism2d visualization can be combined with :doc:`Physics Simulation ` to help you program mechanisms before your robot is built. The ArmSimulation ([Java](https://github.com/wpilibsuite/allwpilib/blob/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/armsimulation/Robot.java) / [C++](https://github.com/wpilibsuite/allwpilib/blob/main/wpilibcExamples/src/main/cpp/examples/ArmSimulation/cpp/Robot.cpp) / [Python](https://github.com/robotpy/examples/blob/2024.0.0b4/ArmSimulation/robot.py)) and ElevatorSimulation ([Java](https://github.com/wpilibsuite/allwpilib/blob/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/elevatorsimulation/Robot.java) / [C++](https://github.com/wpilibsuite/allwpilib/blob/main/wpilibcExamples/src/main/cpp/examples/ElevatorSimulation/cpp/Robot.cpp) / [Python](https://github.com/robotpy/examples/blob/2024.0.0b4/ElevatorSimulation/robot.py)) examples combine physics simulation and Mechanism2d visualization so that you can practice programming a single jointed arm and elevator without a robot. diff --git a/source/docs/software/dashboards/glass/plots.rst b/source/docs/software/dashboards/glass/plots.rst index 4b40f68d41..cb0bb3ad7f 100644 --- a/source/docs/software/dashboards/glass/plots.rst +++ b/source/docs/software/dashboards/glass/plots.rst @@ -28,7 +28,7 @@ Then, you can lock certain axes so that their range always remains constant, reg Plotting with AdvantageScope ---------------------------- -:ref:[AdvantageScope](docs/software/dashboards/advantagescope:AdvantageScope) is an alternative option for creating plots, including from data recorded to a log file using :ref:[WPILib data logs](docs/software/telemetry/datalog:On-Robot Telemetry Recording Into Data Logs). See the documentation for the [line graph](https://github.com/Mechanical-Advantage/AdvantageScope/blob/main/docs/tabs/LINE-GRAPH.md) tab for more details. +:ref:`AdvantageScope ` is an alternative option for creating plots, including from data recorded to a log file using :ref:`WPILib data logs `. See the documentation for the [line graph](https://github.com/Mechanical-Advantage/AdvantageScope/blob/main/docs/tabs/LINE-GRAPH.md) tab for more details. .. image:: images/advantagescope-plot.png :alt: Screenshot of an AdvantageScope window displaying a line graph with several numeric and discrete fields. diff --git a/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-a-new-widget.rst b/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-a-new-widget.rst index e38a06af4c..0d71a7dbf5 100644 --- a/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-a-new-widget.rst +++ b/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-a-new-widget.rst @@ -6,7 +6,7 @@ The basic ``Widget`` interface inherits from the ``Component`` and ``Sourced`` i A good widget allows the end-user to customize the widget to suit their needs. An example could be to allow the user to control the range of the number slider, that is, its maximum and minimum or the orientation of the slider itself. The view of the widget or how it looks is defined using FXML. ``FXML`` is an XML based language that is useful for defining the static layout of the widget (Panes, Labels and Controls). -More about FXML can be found `here `_. +More about FXML can be found [here](https://openjfx.io/javadoc/11/javafx.fxml/javafx/fxml/doc-files/introduction_to_fxml.html). Defining a Widget's FXML ------------------------ @@ -31,7 +31,7 @@ There are many different types of Pane, they are as noted: - Anchor Panes allow child elements to be placed in the top, bottom, left side, right side, or center of the pane. -Layout panes are also extremely useful for placing child nodes in one horizontal row using a `HBox `_ or one vertical column using a `VBox `_. +Layout panes are also extremely useful for placing child nodes in one horizontal row using a [HBox](https://openjfx.io/javadoc/11/javafx.graphics/javafx/scene/layout/HBox.html) or one vertical column using a [VBox](https://openjfx.io/javadoc/11/javafx.graphics/javafx/scene/layout/VBox.html). The basic syntax for defining a Pane using FXML would be as the following: diff --git a/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-custom-data-types.rst b/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-custom-data-types.rst index 82ebcdbda9..d802fcbde7 100644 --- a/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-custom-data-types.rst +++ b/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-custom-data-types.rst @@ -4,7 +4,7 @@ Widgets allow us to control and visualize different types of data. This data cou Creating The Data Class ----------------------- -In this example, we will create a custom data type for a 2D Point and its x and y coordinates. In order to create a custom data type class, it must extend the abstract class `ComplexData `_. +In this example, we will create a custom data type for a 2D Point and its x and y coordinates. In order to create a custom data type class, it must extend the abstract class [ComplexData](https://github.com/wpilibsuite/shuffleboard/blob/main/api/src/main/java/edu/wpi/first/shuffleboard/api/data/ComplexData.java). Your custom data class must also implement the ``asMap()`` method that returns the represented data as a simple map as noted below with the ``@Override`` annotation: .. code-block:: java diff --git a/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-plugins.rst b/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-plugins.rst index 982d9e60e1..5165b0c23c 100644 --- a/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-plugins.rst +++ b/source/docs/software/dashboards/shuffleboard/custom-widgets/creating-plugins.rst @@ -15,7 +15,7 @@ Plugins provide the ability to create custom widgets, layouts, data sources/type Create a Custom Plugin ---------------------- -In order to define a plugin, the plugin class must be a subclass of `edu.wpi.first.shuffleboard.api.Plugin `_ or one of its subclasses. An example of a plugin class would be as following. +In order to define a plugin, the plugin class must be a subclass of [edu.wpi.first.shuffleboard.api.Plugin](https://github.com/wpilibsuite/shuffleboard/blob/main/api/src/main/java/edu/wpi/first/shuffleboard/api/plugin/Plugin.java) or one of its subclasses. An example of a plugin class would be as following. .. tab-set-code:: @@ -29,7 +29,7 @@ In order to define a plugin, the plugin class must be a subclass of `edu.wpi.fir } -Additional explanations on how these attributes are used, including version numbers can be found `here `_. +Additional explanations on how these attributes are used, including version numbers can be found [here](https://semver.org/). Note the ``@Description`` annotation is needed to tell the plugin loader the properties of the custom plugin class. Plugin classes are permitted to have a default constructor but it cannot take any arguments. diff --git a/source/docs/software/dashboards/shuffleboard/custom-widgets/custom-themes.rst b/source/docs/software/dashboards/shuffleboard/custom-widgets/custom-themes.rst index 8140c24631..4aabd113b6 100644 --- a/source/docs/software/dashboards/shuffleboard/custom-widgets/custom-themes.rst +++ b/source/docs/software/dashboards/shuffleboard/custom-widgets/custom-themes.rst @@ -1,7 +1,7 @@ Custom Themes ============= -Since shuffleboard is a JavaFX application, it has support for custom themes via Cascading Stylesheets (**CSS** for short). These are commonly used on webpages for making HTML look nice, but JavaFX also has support, albeit for a different language subset (see `here `_ for documentation on how to use it). +Since shuffleboard is a JavaFX application, it has support for custom themes via Cascading Stylesheets (**CSS** for short). These are commonly used on webpages for making HTML look nice, but JavaFX also has support, albeit for a different language subset (see [here](https://openjfx.io/javadoc/11/javafx.graphics/javafx/scene/doc-files/cssref.html) for documentation on how to use it). Shuffleboard comes with three themes by default: Material Light, Material Dark, and Midnight. These are color variations on the same material design stylesheet. In addition, they inherit from a ``base.css`` stylesheet that defines styles for the custom components ,defined in shuffleboard or libraries that it uses; the base material design stylesheet only applies to the UI components built into JavaFX. diff --git a/source/docs/software/dashboards/shuffleboard/custom-widgets/widget-types.rst b/source/docs/software/dashboards/shuffleboard/custom-widgets/widget-types.rst index 289d48ca5e..d4f1a5c727 100644 --- a/source/docs/software/dashboards/shuffleboard/custom-widgets/widget-types.rst +++ b/source/docs/software/dashboards/shuffleboard/custom-widgets/widget-types.rst @@ -44,7 +44,7 @@ There are also two annotations to help define widgets: AbstractWidget -------------- -This class implements ``getProperties()``, ``getSources()``, ``addSource()``, and ``titleProperty()``. It also defines a method ``exportProperties(Property...)`` method so subclasses can easy add custom widget properties, or properties for the JavaFX components in the widget. Most of the `widgets in the base plugin `_ use this. +This class implements ``getProperties()``, ``getSources()``, ``addSource()``, and ``titleProperty()``. It also defines a method ``exportProperties(Property...)`` method so subclasses can easy add custom widget properties, or properties for the JavaFX components in the widget. Most of the [widgets in the base plugin](https://github.com/wpilibsuite/shuffleboard/tree/main/plugins/base/src/main/java/edu/wpi/first/shuffleboard/plugin/base/widget) use this. SingleTypeWidget ---------------- diff --git a/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-faq.rst b/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-faq.rst index fdae6d701e..5afd53ce8c 100644 --- a/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-faq.rst +++ b/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-faq.rst @@ -14,7 +14,7 @@ There is no active maintainer of Shuffleboard, but we are accepting pull request How can I add my own widgets or other extensions to Shuffleboard? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -:doc:[Custom Widgets](/docs/software/dashboards/shuffleboard/custom-widgets/index) has a large amount of documentation on extending the program with custom plugins. Sample plugin projects that can be used for additional custom widgets and themes can be found on the [Shuffleboard GitHub page](https://github.com/wpilibsuite/shuffleboard/tree/main/example-plugins). +:doc:`Custom Widgets ` has a large amount of documentation on extending the program with custom plugins. Sample plugin projects that can be used for additional custom widgets and themes can be found on the [Shuffleboard GitHub page](https://github.com/wpilibsuite/shuffleboard/tree/main/example-plugins). How can I build Shuffleboard from the source code? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/source/docs/software/driverstation/driver-station-log-viewer.rst b/source/docs/software/driverstation/driver-station-log-viewer.rst index 2c825cf5b2..0c7047bd63 100644 --- a/source/docs/software/driverstation/driver-station-log-viewer.rst +++ b/source/docs/software/driverstation/driver-station-log-viewer.rst @@ -8,7 +8,7 @@ In an effort to provide information to aid in debugging, the FRC\ |reg| Driver S .. image:: images/driver-station-log-viewer/open_ds_log_viewer_from_driver_station.png :alt: Showing how to open the Log Viewer screen using the right console icon. -.. note:: Several alternative tools exist that provide similar functionality to the FRC Driver Station Log Viewer. :ref:[AdvantageScope](docs/software/dashboards/advantagescope:AdvantageScope) is an option included in WPILib, and [DSLOG Reader](https://github.com/orangelight/DSLOG-Reader) is a third-party option. Note that WPILib offers no support for third-party projects. +.. note:: Several alternative tools exist that provide similar functionality to the FRC Driver Station Log Viewer. :ref:`AdvantageScope ` is an option included in WPILib, and [DSLOG Reader](https://github.com/orangelight/DSLOG-Reader) is a third-party option. Note that WPILib offers no support for third-party projects. Event Logs ---------- diff --git a/source/docs/software/frc-glossary.rst b/source/docs/software/frc-glossary.rst index 045bfe69d0..b437a896a5 100644 --- a/source/docs/software/frc-glossary.rst +++ b/source/docs/software/frc-glossary.rst @@ -162,10 +162,10 @@ FRC Glossary Light-Emitting Diode - a semiconductor device that emits light when current flows through it. Used on multiple robot parts to convey the status of the device. mass - the amount of matter in a physical object. Objects with more mass will resist changes in motion more than objects with less mass. See `mass `_ on Wikipedia for more info. + the amount of matter in a physical object. Objects with more mass will resist changes in motion more than objects with less mass. See [mass](https://en.wikipedia.org/wiki/Mass) on Wikipedia for more info. moment of inertia - The property of an object that describes both how much mass it has, and how that mass is distributed relative to a certain axis of rotation. Objects with higher moments of inertia resist changes in rotational motion more than objects with lower moments of inertia. Increasing the moment of inertia is accomplished by adding more mass, or moving the mass further away from the axis of rotation. See `moment of inertia `_ on Wikipedia for more info. + The property of an object that describes both how much mass it has, and how that mass is distributed relative to a certain axis of rotation. Objects with higher moments of inertia resist changes in rotational motion more than objects with lower moments of inertia. Increasing the moment of inertia is accomplished by adding more mass, or moving the mass further away from the axis of rotation. See [moment of inertia](https://en.wikipedia.org/wiki/Moment_of_inertia) on Wikipedia for more info. mutable An object that can be modified after it is created. @@ -177,7 +177,7 @@ FRC Glossary A publish-subscribe messaging system to communicate data between programs. no-op - No-op is a computer instruction which means no operation. When the computer processor encounters a no-op instruction, it simply moves to the next sequential instruction. Read more about no-op on `Wikipedia `_ . + No-op is a computer instruction which means no operation. When the computer processor encounters a no-op instruction, it simply moves to the next sequential instruction. Read more about no-op on [Wikipedia](https://en.wikipedia.org/wiki/NOP_%28code%29) . odometry Using sensors on the robot to create an estimate of the pose of the robot on the field. @@ -225,7 +225,7 @@ FRC Glossary Resource Acquisition Is Initialization - a language behavior (in C++, but not in Java) where holding a resource is tied to object lifetime. retro-reflection - The property of reflecting incoming light back at the same angle it came in at, rather than an incident angle (like a mirror), absorbing it, or scattering it. Most FRC vision processing targets are retro-reflective. See `retroreflector `_ on Wikipedia for more information. + The property of reflecting incoming light back at the same angle it came in at, rather than an incident angle (like a mirror), absorbing it, or scattering it. Most FRC vision processing targets are retro-reflective. See [retroreflector](https://en.wikipedia.org/wiki/Retroreflector) on Wikipedia for more information. recursive composition A type of :term:`composition` in which the composite object may contain components of the same type as itself. For example, a command group may contain one or more command groups. See [recursive composition](https://en.wikipedia.org/wiki/Object_composition#Recursive_composition) on Wikipedia for more info. See also :term:`recursive composition`. diff --git a/source/docs/software/hardware-apis/misc/addressable-leds.rst b/source/docs/software/hardware-apis/misc/addressable-leds.rst index 0a945040a7..b8b41f568f 100644 --- a/source/docs/software/hardware-apis/misc/addressable-leds.rst +++ b/source/docs/software/hardware-apis/misc/addressable-leds.rst @@ -82,7 +82,7 @@ RGB stands for Red, Green, and Blue. This is a fairly common color model as it's Using HSV Values ^^^^^^^^^^^^^^^^ -HSV stands for Hue, Saturation, and Value. Hue describes the color or tint, saturation being the amount of gray, and value being the brightness. In WPILib, Hue is an integer from 0 - 180. Saturation and Value are integers from 0 - 255. If you look at a color picker like `Google's `_, Hue will be 0 - 360 and Saturation and Value are from 0% to 100%. This is the same way that OpenCV handles HSV colors. Make sure the HSV values entered to WPILib are correct, or the color produced might not be the same as was expected. +HSV stands for Hue, Saturation, and Value. Hue describes the color or tint, saturation being the amount of gray, and value being the brightness. In WPILib, Hue is an integer from 0 - 180. Saturation and Value are integers from 0 - 255. If you look at a color picker like [Google's](https://www.google.com/search?q=color+picker), Hue will be 0 - 360 and Saturation and Value are from 0% to 100%. This is the same way that OpenCV handles HSV colors. Make sure the HSV values entered to WPILib are correct, or the color produced might not be the same as was expected. .. image:: images/hsv-models.png :alt: HSV models picture diff --git a/source/docs/software/hardware-apis/sensors/counters.rst b/source/docs/software/hardware-apis/sensors/counters.rst index 3c31d62deb..30ae3f35a4 100644 --- a/source/docs/software/hardware-apis/sensors/counters.rst +++ b/source/docs/software/hardware-apis/sensors/counters.rst @@ -4,7 +4,7 @@ Counters .. image:: images/counters/counters.png :alt: IO Diagram showing the up/down pulses the counter is counting. -The :code:[Counter` class (`Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/Counter.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_counter.html)) is a versatile class that allows the counting of pulse edges on a digital input. :code:`Counter` is used as a component in several more-complicated WPILib classes (such as :ref:`Encoder ` and :ref:`Ultrasonic `), but is also quite useful on its own. +The :code:`Counter` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/Counter.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_counter.html)) is a versatile class that allows the counting of pulse edges on a digital input. :code:`Counter` is used as a component in several more-complicated WPILib classes (such as :ref:`Encoder ` and :ref:`Ultrasonic `), but is also quite useful on its own. .. note:: There are a total of 8 counter units in the roboRIO FPGA, meaning no more than 8 :code:`Counter` objects may be instantiated at any one time, including those contained as resources in other WPILib objects. For detailed information on when a :code:`Counter` may be used by another object, refer to the official API documentation. diff --git a/source/docs/software/hardware-apis/sensors/encoders-software.rst b/source/docs/software/hardware-apis/sensors/encoders-software.rst index 763488f35c..3387513b84 100644 --- a/source/docs/software/hardware-apis/sensors/encoders-software.rst +++ b/source/docs/software/hardware-apis/sensors/encoders-software.rst @@ -28,7 +28,7 @@ Examples of quadrature encoders: - [AMT103-V](https://www.cuidevices.com/product/motion/rotary-encoders/incremental/modular/amt10-v-kit/amt103-v) available through FIRST Choice - [CIMcoder](https://www.andymark.com/products/cimcoder-encoder-cim-motor-high-resolution) -- `CTRE Mag Encoder `_ +- [CTRE Mag Encoder](https://store.ctr-electronics.com/srx-mag-encoder/) - [Grayhill 63r](https://www.mouser.com/datasheet/2/626/grhls00779_1-2289364.pdf) - [REV Through Bore Encoder](https://www.revrobotics.com/rev-11-1271/) - [US Digital E4T](https://www.andymark.com/products/e4t-oem-miniature-optical-encoder-kit) diff --git a/source/docs/software/hardware-apis/sensors/gyros-software.rst b/source/docs/software/hardware-apis/sensors/gyros-software.rst index 746b0d9e96..b73706bb0e 100644 --- a/source/docs/software/hardware-apis/sensors/gyros-software.rst +++ b/source/docs/software/hardware-apis/sensors/gyros-software.rst @@ -64,7 +64,7 @@ The ADIS16470 uses the :code:`ADIS16470_IMU` class ([Java](https://github.wpilib ADXRS450_Gyro ------------- -The :code:[ADXRS450_Gyro` class (`Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/ADXRS450_Gyro.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_a_d_x_r_s450___gyro.html), :external:py:class:`Python `) provides support for the Analog Devices ADXRS450 gyro available in the kit of parts, which connects over the SPI bus. +The :code:`ADXRS450_Gyro` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/ADXRS450_Gyro.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_a_d_x_r_s450___gyro.html), :external:py:class:`Python `) provides support for the Analog Devices ADXRS450 gyro available in the kit of parts, which connects over the SPI bus. .. note:: ADXRS450 Gyro accumulation is handled through special circuitry in the FPGA; accordingly only a single instance of :code:`ADXRS450_Gyro` may be used. @@ -88,7 +88,7 @@ The :code:[ADXRS450_Gyro` class (`Java](https://github.wpilib.org/allwpilib/docs AnalogGyro ---------- -The :code:[AnalogGyro` class (`Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/AnalogGyro.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_analog_gyro.html), :external:py:class:`Python `) provides support for any single-axis gyro with an analog output. +The :code:`AnalogGyro` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/AnalogGyro.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_analog_gyro.html), :external:py:class:`Python `) provides support for any single-axis gyro with an analog output. .. note:: Gyro accumulation is handled through special circuitry in the FPGA; accordingly, :code:`AnalogGyro`\`s may only be used on analog ports 0 and 1. diff --git a/source/docs/software/hardware-apis/sensors/ultrasonics-software.rst b/source/docs/software/hardware-apis/sensors/ultrasonics-software.rst index c3dc2116a2..595993e1b4 100644 --- a/source/docs/software/hardware-apis/sensors/ultrasonics-software.rst +++ b/source/docs/software/hardware-apis/sensors/ultrasonics-software.rst @@ -13,7 +13,7 @@ There are two primary types of ultrasonics supported natively by WPILib: Ping-response ultrasonics ------------------------- -The :code:[Ultrasonic` class (`Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/Ultrasonic.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_ultrasonic.html)) provides support for ping-response ultrasonics. As ping-response ultrasonics (per the name) require separate pins for both sending the ping and measuring the response, users must specify DIO pin numbers for both output and input when constructing an :code:`Ultrasonic` instance: +The :code:`Ultrasonic` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj/Ultrasonic.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_ultrasonic.html)) provides support for ping-response ultrasonics. As ping-response ultrasonics (per the name) require separate pins for both sending the ping and measuring the response, users must specify DIO pin numbers for both output and input when constructing an :code:`Ultrasonic` instance: .. tab-set:: diff --git a/source/docs/software/kinematics-and-odometry/differential-drive-odometry.rst b/source/docs/software/kinematics-and-odometry/differential-drive-odometry.rst index e99b0191fe..c214592782 100644 --- a/source/docs/software/kinematics-and-odometry/differential-drive-odometry.rst +++ b/source/docs/software/kinematics-and-odometry/differential-drive-odometry.rst @@ -103,6 +103,6 @@ The robot pose can be reset via the ``resetPosition`` method. This method accept .. important:: If at any time, you decide to reset your gyroscope or encoders, the ``resetPosition`` method MUST be called with the new gyro angle and wheel distances. -.. note:: A full example of a differential drive robot with odometry is available here: `C++ `_ / `Java `_ / `Python `_ +.. note:: A full example of a differential drive robot with odometry is available here: [C++](https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/DifferentialDriveBot) / [Java](https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/differentialdrivebot) / [Python](https://github.com/robotpy/examples/tree/main/DifferentialDriveBot) In addition, the ``GetPose`` (C++) / ``getPoseMeters`` (Java / Python) methods can be used to retrieve the current robot pose without an update. diff --git a/source/docs/software/kinematics-and-odometry/mecanum-drive-odometry.rst b/source/docs/software/kinematics-and-odometry/mecanum-drive-odometry.rst index 73baa1a68f..03a2097bc7 100644 --- a/source/docs/software/kinematics-and-odometry/mecanum-drive-odometry.rst +++ b/source/docs/software/kinematics-and-odometry/mecanum-drive-odometry.rst @@ -168,6 +168,6 @@ The robot pose can be reset via the ``resetPosition`` method. This method accept .. important:: If at any time, you decide to reset your gyroscope or encoders, the ``resetPosition`` method MUST be called with the new gyro angle and wheel positions. -.. note:: A full example of a mecanum drive robot with odometry is available here: `C++ `_ / `Java `_ / `Python `_ +.. note:: A full example of a mecanum drive robot with odometry is available here: [C++](https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/MecanumBot) / [Java](https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/mecanumbot) / [Python](https://github.com/robotpy/examples/tree/main/MecanumBot) In addition, the ``GetPose`` (C++) / ``getPoseMeters`` (Java / Python) methods can be used to retrieve the current robot pose without an update. diff --git a/source/docs/software/labview/resources/labview-resources.rst b/source/docs/software/labview/resources/labview-resources.rst index e5c8bd868f..b603a52c2f 100644 --- a/source/docs/software/labview/resources/labview-resources.rst +++ b/source/docs/software/labview/resources/labview-resources.rst @@ -8,14 +8,14 @@ LabVIEW Resources LabVIEW Basics -------------- -NI provides `tutorials on the basics of LabVIEW `_. These tutorials can help you get acquainted with the LabVIEW environment and the basics of the graphical, dataflow programming model used in LabVIEW. +NI provides [tutorials on the basics of LabVIEW](https://www.ni.com/getting-started/labview-basics/). These tutorials can help you get acquainted with the LabVIEW environment and the basics of the graphical, dataflow programming model used in LabVIEW. .. todo:: Add academic videos when link fixed www.ni.com/academic/students/learn-labview/ NI FRC Tutorials ---------------- -NI also hosts many `FRC specific tutorials and presentations ranging from basic to advanced `_. For an in-depth single resource check out the FRC Basic and Advanced Training Classes linked near the bottom of the page. +NI also hosts many [FRC specific tutorials and presentations ranging from basic to advanced](https://forums.ni.com/t5/FIRST-Robotics-Competition/Archived-2015-FRC-LabVIEW-Additional-Resources/ta-p/3528790?profile.language=en). For an in-depth single resource check out the FRC Basic and Advanced Training Classes linked near the bottom of the page. Installed Tutorials and Examples -------------------------------- diff --git a/source/docs/software/labview/resources/local-and-global-variables-in-labview-for-frc.rst b/source/docs/software/labview/resources/local-and-global-variables-in-labview-for-frc.rst index 1849375880..2f30d132ac 100644 --- a/source/docs/software/labview/resources/local-and-global-variables-in-labview-for-frc.rst +++ b/source/docs/software/labview/resources/local-and-global-variables-in-labview-for-frc.rst @@ -24,7 +24,7 @@ Global variables are created slightly differently. Add one to the block diagram .. image:: images/local-and-global-variables-in-labview-for-frc/3.png -.. note:: Be very careful to avoid race conditions when using local and global variables! Essentially, make sure that you are not accidentally writing to the same variable in multiple locations without a way to know to which location it was last written. For a more thorough explanation, see `this help document `_ +.. note:: Be very careful to avoid race conditions when using local and global variables! Essentially, make sure that you are not accidentally writing to the same variable in multiple locations without a way to know to which location it was last written. For a more thorough explanation, see [this help document](https://zone.ni.com/reference/en-XX/help/371361L-01/lvconcepts/using_local_and_global/) How They are Used in the Default LabVIEW for FRC Robot Project -------------------------------------------------------------- diff --git a/source/docs/software/networktables/networktables-intro.rst b/source/docs/software/networktables/networktables-intro.rst index 4e85bd831a..3e3740488b 100644 --- a/source/docs/software/networktables/networktables-intro.rst +++ b/source/docs/software/networktables/networktables-intro.rst @@ -1,7 +1,7 @@ What is NetworkTables ===================== -:term:`NetworkTables` is an implementation of a `publish-subscribe messaging system `_. Values are published to named "topics" either on the robot, driver station, or potentially an attached coprocessor, and the values are automatically distributed to all subscribers to the topic. For example, a driver station laptop might receive camera images over the network, perform some vision processing algorithm, and come up with some values to sent back to the robot. The values might be an X, Y, and Distance. By writing these results to NetworkTables topics called "X", "Y", and "Distance" they can be read by the robot shortly after being written. Then the robot can act upon them. Similarly, the robot program can write sensor values to topics and those can be read and plotted in real time on a dashboard application. +:term:`NetworkTables` is an implementation of a [publish-subscribe messaging system](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern). Values are published to named "topics" either on the robot, driver station, or potentially an attached coprocessor, and the values are automatically distributed to all subscribers to the topic. For example, a driver station laptop might receive camera images over the network, perform some vision processing algorithm, and come up with some values to sent back to the robot. The values might be an X, Y, and Distance. By writing these results to NetworkTables topics called "X", "Y", and "Distance" they can be read by the robot shortly after being written. Then the robot can act upon them. Similarly, the robot program can write sensor values to topics and those can be read and plotted in real time on a dashboard application. NetworkTables can be used by programs on the robot in Java, C++, or LabVIEW, and is built into each version of WPILib. @@ -26,7 +26,7 @@ Topics have properties. Properties are initially set by the first publisher, but Publishers specify the topic's data type; while there can be multiple publishers to a single topic, they must all be publishing the same data type. This is enforced by the NetworkTables server (the first publisher "wins"). Typically single-topic subscribers also specify what data type they're expecting to receive on a topic and thus won't receive value updates of other types. -The `Network Tables Protocol Specification `_ contains detailed documentation on the current wire protocol. +The [Network Tables Protocol Specification](https://github.com/wpilibsuite/allwpilib/blob/main/ntcore/doc/networktables4.adoc) contains detailed documentation on the current wire protocol. Retained and Persistent Topics ------------------------------ @@ -58,7 +58,7 @@ Because of this, two timestamps are visible through the API: a server timestamp NetworkTables Organization -------------------------- -Data is organized in NetworkTables in a hierarchy much like a filesystem's folders and files. There can be multiple subtables (folders) and topics (files) that may be nested in whatever way fits the data organization desired. At the top level (``NetworkTableInstance``: [Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/networktables/NetworkTableInstance.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classnt_1_1_network_table_instance.html), :external:py:class:[Python](ntcore.NetworkTableInstance>`), topic names are handled similar to absolute paths in a filesystem: subtables are represented as a long topic name with slashes ("/") separating the nested subtable and value names. A ``NetworkTable`` (`Java `) object represents a single subtable (folder), so topic names are relative to the NetworkTable's base path: e.g. for a root table called "SmartDashboard" with a topic named "xValue", the same topic can be accessed via ``NetworkTableInstance`` as a topic named "/SmartDashboard/xValue". However, unlike a filesystem, subtables don't really exist in the same way folders do, as there is no way to represent an empty subtable on the network--a subtable "appears" only as long as there are topics published within it. +Data is organized in NetworkTables in a hierarchy much like a filesystem's folders and files. There can be multiple subtables (folders) and topics (files) that may be nested in whatever way fits the data organization desired. At the top level (``NetworkTableInstance``: [Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/networktables/NetworkTableInstance.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classnt_1_1_network_table_instance.html), :external:py:class:[Python](ntcore.NetworkTableInstance>`), topic names are handled similar to absolute paths in a filesystem: subtables are represented as a long topic name with slashes ("/") separating the nested subtable and value names. A ``NetworkTable`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/networktables/NetworkTable.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classnt_1_1_network_table.html), :external:py:class:`Python `) object represents a single subtable (folder), so topic names are relative to the NetworkTable's base path: e.g. for a root table called "SmartDashboard" with a topic named "xValue", the same topic can be accessed via ``NetworkTableInstance`` as a topic named "/SmartDashboard/xValue". However, unlike a filesystem, subtables don't really exist in the same way folders do, as there is no way to represent an empty subtable on the network--a subtable "appears" only as long as there are topics published within it. :ref:`docs/software/wpilib-tools/outlineviewer/index:outlineviewer` is a utility for exploring the values stored in NetworkTables, and can show either a flat view (topics with absolute paths) or a nested view (subtables and topics). diff --git a/source/docs/software/networktables/publish-and-subscribe.rst b/source/docs/software/networktables/publish-and-subscribe.rst index 88fe62d050..5650005532 100644 --- a/source/docs/software/networktables/publish-and-subscribe.rst +++ b/source/docs/software/networktables/publish-and-subscribe.rst @@ -236,7 +236,7 @@ Publishing values is done via a ``set()`` operation. By default, this operation Subscribing to a Topic ---------------------- -A :term:[subscriber` receives value updates made to a topic. Similar to publishers, NetworkTable subscribers are represented as type-specific Subscriber classes (e.g. ``BooleanSubscriber``: `Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/networktables/BooleanSubscriber.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classnt_1_1_boolean_subscriber.html), :external:py:class:`Python `) that must be stored somewhere to continue subscribing. +A :term:`subscriber` receives value updates made to a topic. Similar to publishers, NetworkTable subscribers are represented as type-specific Subscriber classes (e.g. ``BooleanSubscriber``: [Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/networktables/BooleanSubscriber.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classnt_1_1_boolean_subscriber.html), :external:py:class:`Python `) that must be stored somewhere to continue subscribing. Subscribers have a range of different ways to read received values. It's possible to just read the most recent value using ``get()``, read the most recent value, along with its timestamp, using ``getAtomic()``, or get an array of all value changes since the last call using ``readQueue()`` or ``readQueueValues()``. @@ -470,7 +470,7 @@ Subscribers have a range of different ways to read received values. It's possibl Using Entry to Both Subscribe and Publish ----------------------------------------- -An :term:[entry` is a combined publisher and subscriber. The subscriber is always active, but the publisher is not created until a publish operation is performed (e.g. a value is "set", aka published, on the entry). This may be more convenient than maintaining a separate publisher and subscriber. Similar to publishers and subscribers, NetworkTable entries are represented as type-specific Entry classes (e.g. ``BooleanEntry``: `Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/networktables/BooleanEntry.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classnt_1_1_boolean_entry.html), :external:py:class:`Python `) that must be retained to continue subscribing (and publishing). +An :term:`entry` is a combined publisher and subscriber. The subscriber is always active, but the publisher is not created until a publish operation is performed (e.g. a value is "set", aka published, on the entry). This may be more convenient than maintaining a separate publisher and subscriber. Similar to publishers and subscribers, NetworkTable entries are represented as type-specific Entry classes (e.g. ``BooleanEntry``: [Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/networktables/BooleanEntry.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classnt_1_1_boolean_entry.html), :external:py:class:`Python `) that must be retained to continue subscribing (and publishing). .. tab-set:: @@ -730,7 +730,7 @@ An :term:[entry` is a combined publisher and subscriber. The subscriber is alway Using GenericEntry, GenericPublisher, and GenericSubscriber ----------------------------------------------------------- -For the most robust code, using the type-specific Publisher, Subscriber, and Entry classes is recommended, but in some cases it may be easier to write code that uses type-specific get and set function calls instead of having the NetworkTables type be exposed via the class (object) type. The ``GenericPublisher`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/networktables/GenericPublisher.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classnt_1_1_generic_publisher.html), :external:py:class:[Python](ntcore.GenericPublisher>`), ``GenericSubscriber`` (`Java `), and ``GenericEntry`` (`Java `) classes enable this approach. +For the most robust code, using the type-specific Publisher, Subscriber, and Entry classes is recommended, but in some cases it may be easier to write code that uses type-specific get and set function calls instead of having the NetworkTables type be exposed via the class (object) type. The ``GenericPublisher`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/networktables/GenericPublisher.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classnt_1_1_generic_publisher.html), :external:py:class:[Python](ntcore.GenericPublisher>`), ``GenericSubscriber`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/networktables/GenericSubscriber.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classnt_1_1_generic_subscriber.html), :external:py:class:[Python](ntcore.GenericSubscriber>`), and ``GenericEntry`` ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/networktables/GenericEntry.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classnt_1_1_generic_entry.html), :external:py:class:`Python `) classes enable this approach. .. tab-set:: diff --git a/source/docs/software/pathplanning/trajectory-tutorial/creating-following-trajectory.rst b/source/docs/software/pathplanning/trajectory-tutorial/creating-following-trajectory.rst index 42fc96bf84..516d73e07e 100644 --- a/source/docs/software/pathplanning/trajectory-tutorial/creating-following-trajectory.rst +++ b/source/docs/software/pathplanning/trajectory-tutorial/creating-following-trajectory.rst @@ -3,7 +3,7 @@ Step 4: Creating and Following a Trajectory With our drive subsystem written, it is now time to generate a trajectory and write an autonomous command to follow it. -As per the :ref:[standard command-based project structure](docs/software/commandbased/structuring-command-based-project:Structuring a Command-Based Robot Project), we will do this in the ``getAutonomousCommand`` method of the ``RobotContainer`` class. The full method from the RamseteCommand Example Project ([Java](https://github.com/wpilibsuite/allwpilib/tree/v2024.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/ramsetecommand), [C++](https://github.com/wpilibsuite/allwpilib/tree/v2024.3.2/wpilibcExamples/src/main/cpp/examples/RamseteCommand)) can be seen below. The rest of the article will break down the different parts of the method in more detail. +As per the :ref:`standard command-based project structure `, we will do this in the ``getAutonomousCommand`` method of the ``RobotContainer`` class. The full method from the RamseteCommand Example Project ([Java](https://github.com/wpilibsuite/allwpilib/tree/v2024.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/ramsetecommand), [C++](https://github.com/wpilibsuite/allwpilib/tree/v2024.3.2/wpilibcExamples/src/main/cpp/examples/RamseteCommand)) can be seen below. The rest of the article will break down the different parts of the method in more detail. .. tab-set:: @@ -143,7 +143,7 @@ We will first reset our robot's pose to the starting pose of the trajectory. Thi :lineno-start: 84 -It is very important that the initial robot pose match the first pose in the trajectory. For the purposes of our example, the robot will be reliably starting at a position of ``(0,0)`` with a heading of ``0``. In actual use, however, it is probably not desirable to base your coordinate system on the robot position, and so the starting position for both the robot and the trajectory should be set to some other value. If you wish to use a trajectory that has been defined in robot-centric coordinates in such a situation, you can transform it to be relative to the robot's current pose using the ``transformBy`` method (`Java `_, `C++ `_). For more information about transforming trajectories, see :ref:`docs/software/advanced-controls/trajectories/transforming-trajectories:Transforming Trajectories`. +It is very important that the initial robot pose match the first pose in the trajectory. For the purposes of our example, the robot will be reliably starting at a position of ``(0,0)`` with a heading of ``0``. In actual use, however, it is probably not desirable to base your coordinate system on the robot position, and so the starting position for both the robot and the trajectory should be set to some other value. If you wish to use a trajectory that has been defined in robot-centric coordinates in such a situation, you can transform it to be relative to the robot's current pose using the ``transformBy`` method ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/math/trajectory/Trajectory.html#transformBy(edu.wpi.first.math.geometry.Transform2d)), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc_1_1_trajectory.html#a8edfbd82347bbf32ddfb092679336cd8)). For more information about transforming trajectories, see :ref:`docs/software/advanced-controls/trajectories/transforming-trajectories:Transforming Trajectories`. Now that we have a trajectory, we can create a command that, when executed, will follow that trajectory. To do this, we use the ``RamseteCommand`` class ([Java](https://github.wpilib.org/allwpilib/docs/development/java/edu/wpi/first/wpilibj2/command/RamseteCommand.html), [C++](https://github.wpilib.org/allwpilib/docs/development/cpp/classfrc2_1_1_ramsete_command.html)) diff --git a/source/docs/software/python/pyproject_toml.rst b/source/docs/software/python/pyproject_toml.rst index 6ca07b2e80..88fe3e5075 100644 --- a/source/docs/software/python/pyproject_toml.rst +++ b/source/docs/software/python/pyproject_toml.rst @@ -59,4 +59,4 @@ Each of the following will instruct the deploy process to install packages to th The packages that can be installed are stored on the [WPILib Artifactory server](https://wpilib.jfrog.io/ui/native/wpilib-python-release-2024/). -If you find that you need a package that isn't available on artifactory, consult the `roborio-wheels `_ repository. +If you find that you need a package that isn't available on artifactory, consult the [roborio-wheels](https://github.com/robotpy/roborio-wheels) repository. diff --git a/source/docs/software/roborio-info/roborio-brownouts.rst b/source/docs/software/roborio-info/roborio-brownouts.rst index 02a926f06c..a2086ed672 100644 --- a/source/docs/software/roborio-info/roborio-brownouts.rst +++ b/source/docs/software/roborio-info/roborio-brownouts.rst @@ -58,7 +58,7 @@ Avoiding Brownout - Proactive Current Draw Planning The key to avoiding a brownout condition is to proactively plan for the current draw of your robot. The best way to do this is to create some form of power budget. This can be a complex document that attempts to quantify both estimated current draw and time in an effort to most completely understand power usage and therefore battery state at the end of a match, or it can be a simple inventory of current usage. To do this: -1. Establish the max "sustained" current draw (with sustained being loosely defined here as not momentary). This is probably the most difficult part of creating the power budget. The exact current draw a battery can sustain while maintaining a voltage of 7+ volts is dependent on a variety of factors such as battery health (see :ref:[this](docs/hardware/hardware-basics/robot-battery:Robot Battery Basics) article for measuring battery health) and state of charge. As shown in the [NP18-12 data sheet](https://www.farnell.com/datasheets/575631.pdf), the terminal voltage chart gets very steep as state of charge decreases, especially as current draw increases. This datasheet shows that at 3CA continuous load (54A) a brand new battery can be continuously run for over 6 minutes while maintaining a terminal voltage of over 7V. As shown in the image above (used with permission from [Team 234s Drive System Testing document](https://www.chiefdelphi.com/t/paper-new-control-functions-drive-system-testing/139165)), even with a fresh battery, drawing 240A for more than a second or two is likely to cause an issue. This gives us some bounds on setting our sustained current draw. For the purposes of this exercise, we'll set our limit at 180A. +1. Establish the max "sustained" current draw (with sustained being loosely defined here as not momentary). This is probably the most difficult part of creating the power budget. The exact current draw a battery can sustain while maintaining a voltage of 7+ volts is dependent on a variety of factors such as battery health (see :ref:`this ` article for measuring battery health) and state of charge. As shown in the [NP18-12 data sheet](https://www.farnell.com/datasheets/575631.pdf), the terminal voltage chart gets very steep as state of charge decreases, especially as current draw increases. This datasheet shows that at 3CA continuous load (54A) a brand new battery can be continuously run for over 6 minutes while maintaining a terminal voltage of over 7V. As shown in the image above (used with permission from [Team 234s Drive System Testing document](https://www.chiefdelphi.com/t/paper-new-control-functions-drive-system-testing/139165)), even with a fresh battery, drawing 240A for more than a second or two is likely to cause an issue. This gives us some bounds on setting our sustained current draw. For the purposes of this exercise, we'll set our limit at 180A. 2. List out the different functions of your robot such as drivetrain, manipulator, main game mechanism, etc. 3. Start assigning your available current to these functions. You will likely find that you run out pretty quickly. Many teams gear their drivetrain to have enough :term:`torque` to slip their wheels at 40-50A of current draw per motor. If we have 4 motors on the drivetrain, that eats up most, or even exceeds, our power budget! This means that we may need to put together a few scenarios and understand what functions can (and need to be) be used at the same time. In many cases, this will mean that you really need to limit the current draw of the other functions if/while your robot is maxing out the drivetrain (such as trying to push something). Benchmarking the "driving" current requirements of a drivetrain for some of these alternative scenarios is a little more complex, as it depends on many factors such as number of motors, robot weight, gearing, and efficiency. Current numbers for other functions can be done by calculating the power required to complete the function and estimating efficiency (if the mechanism has not been designed) or by determining the :term:`torque` load on the motor and using the torque-current curve to determine the current draw of the motors. diff --git a/source/docs/software/vision-processing/roborio/using-the-cameraserver-on-the-roborio.rst b/source/docs/software/vision-processing/roborio/using-the-cameraserver-on-the-roborio.rst index ad9ca54929..7eb06b7418 100644 --- a/source/docs/software/vision-processing/roborio/using-the-cameraserver-on-the-roborio.rst +++ b/source/docs/software/vision-processing/roborio/using-the-cameraserver-on-the-roborio.rst @@ -59,8 +59,8 @@ In the following example a thread created in robotInit() gets the Camera Server For more information on the GIL and its effects, you may wish to read the following resources: - * `Python Wiki: Global Interpreter Lock `_ - * `Efficiently Exploiting Multiple Cores with Python `_ + * [Python Wiki: Global Interpreter Lock](https://wiki.python.org/moin/GlobalInterpreterLock) + * [Efficiently Exploiting Multiple Cores with Python](http://python-notes.curiousefficiency.org/en/latest/python3/multicore_python.html) This introduces a number of rules that your image processing code must follow to efficiently and safely run on the RoboRIO: diff --git a/source/docs/software/vision-processing/wpilibpi/installing-the-image-to-your-microsd-card.rst b/source/docs/software/vision-processing/wpilibpi/installing-the-image-to-your-microsd-card.rst index e5745c3d1a..dffc09cd65 100644 --- a/source/docs/software/vision-processing/wpilibpi/installing-the-image-to-your-microsd-card.rst +++ b/source/docs/software/vision-processing/wpilibpi/installing-the-image-to-your-microsd-card.rst @@ -6,8 +6,7 @@ Installing the image to your MicroSD card Getting the FRC Raspberry PI image ---------------------------------- -The image is stored on the GitHub release page for the WPILibPi `repository -`__. +The image is stored on the GitHub release page for the WPILibPi [repository](https://github.com/wpilibsuite/WPILibPi/releases). In addition to the instructions on this page, see the documentation on the GitHub web page (below). diff --git a/source/docs/software/vision-processing/wpilibpi/walkthrough-video.rst b/source/docs/software/vision-processing/wpilibpi/walkthrough-video.rst index 3412410ded..4e12bdd22a 100644 --- a/source/docs/software/vision-processing/wpilibpi/walkthrough-video.rst +++ b/source/docs/software/vision-processing/wpilibpi/walkthrough-video.rst @@ -12,4 +12,4 @@ At the "RSN Spring Conference, Presented by WPI" in 2020, Peter Johnson from the
-The link to the presentation is available `here `_. +The link to the presentation is available [here](https://docs.google.com/presentation/d/1yViG-k5PS4jWVrxY3o7eD8h5YXnK9Deqm6RsUXfCnRA/edit?usp=sharing). diff --git a/source/docs/software/vscode-overview/3rd-party-libraries.rst b/source/docs/software/vscode-overview/3rd-party-libraries.rst index 9edd2b53f8..45d7e02f9f 100644 --- a/source/docs/software/vscode-overview/3rd-party-libraries.rst +++ b/source/docs/software/vscode-overview/3rd-party-libraries.rst @@ -248,7 +248,7 @@ Click these links to visit the vendor site to see whether they offer online inst Community Libraries ^^^^^^^^^^^^^^^^^^^ -`PhotonVision `_ - Library for PhotonVision CV software +[PhotonVision](https://docs.photonvision.org/en/latest/docs/programming/photonlib/adding-vendordep.html) - Library for PhotonVision CV software .. tab-set:: @@ -263,7 +263,7 @@ Community Libraries * PyPI package: ``photonlibpy`` * In ``pyproject.toml``: ``requires = ["photonlibpy"]`` -`PathPlanner `_ - Library for PathPlanner +[PathPlanner](https://pathplanner.dev/home.html) - Library for PathPlanner .. tab-set:: @@ -278,7 +278,7 @@ Community Libraries * PyPI package: ``pathplannerlib`` * In ``pyproject.toml``: ``requires = ["pathplannerlib"]`` -`ChoreoLib `_ - Library for reading and following trajectories generated by `Choreo `_ +[ChoreoLib](https://sleipnirgroup.github.io/Choreo/choreolib/installation/) - Library for reading and following trajectories generated by [Choreo](https://sleipnirgroup.github.io/Choreo/) .. tab-set:: @@ -292,7 +292,7 @@ Community Libraries Not available -`YAGSL `_ - Library for Swerve Drives of any configuration +[YAGSL](https://yagsl.gitbook.io/yagsl) - Library for Swerve Drives of any configuration .. tab-set:: diff --git a/source/docs/software/vscode-overview/vscode-basics.rst b/source/docs/software/vscode-overview/vscode-basics.rst index 5a063a73c1..5c655efd99 100644 --- a/source/docs/software/vscode-overview/vscode-basics.rst +++ b/source/docs/software/vscode-overview/vscode-basics.rst @@ -36,7 +36,7 @@ The WPILib extension provides the FRC\ |reg| specific functionality related to c - By typing "WPILib" into the Command Palette - By clicking on the WPILib icon in the top right of most windows. This will open the Command Palette with "WPILib" pre-entered -.. note:: It is **not** recommended to install the `Visual Studio IntelliCode `_ plugin with the FRC installation of VS Code as it is known to break IntelliSense in odd ways. +.. note:: It is **not** recommended to install the [Visual Studio IntelliCode](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode) plugin with the FRC installation of VS Code as it is known to break IntelliSense in odd ways. For more information about specific WPILib extension commands, see the other articles in this chapter. diff --git a/source/docs/software/wpilib-tools/robotbuilder/advanced/robotbuilder-custom-components.rst b/source/docs/software/wpilib-tools/robotbuilder/advanced/robotbuilder-custom-components.rst index 3f42e3432f..2de2b0138e 100644 --- a/source/docs/software/wpilib-tools/robotbuilder/advanced/robotbuilder-custom-components.rst +++ b/source/docs/software/wpilib-tools/robotbuilder/advanced/robotbuilder-custom-components.rst @@ -162,4 +162,4 @@ icon.png The icon that shows up in the palette and the help page. This should be a 64x64 ``.png`` file. -It should use the color scheme and general style of the section it's in to avoid visual clutter, but this is entirely optional. Photoshop ``.psd`` files of the icons and backgrounds are in `src/main/icons/icons `_ and png files of the icons and backgrounds are in `src/main/resources/icons `_. +It should use the color scheme and general style of the section it's in to avoid visual clutter, but this is entirely optional. Photoshop ``.psd`` files of the icons and backgrounds are in [src/main/icons/icons](https://github.com/wpilibsuite/RobotBuilder/tree/main/src/main/icons/icons) and png files of the icons and backgrounds are in [src/main/resources/icons](https://github.com/wpilibsuite/RobotBuilder/tree/main/src/main/resources/icons). diff --git a/source/docs/xrp-robot/hardware-and-imaging.rst b/source/docs/xrp-robot/hardware-and-imaging.rst index a566192a07..beb8398861 100644 --- a/source/docs/xrp-robot/hardware-and-imaging.rst +++ b/source/docs/xrp-robot/hardware-and-imaging.rst @@ -12,7 +12,7 @@ Assembly .. note:: - See the assembly instructions on the `XRP User Guide `_. + See the assembly instructions on the [XRP User Guide](https://xrpusersguide.readthedocs.io/en/latest/course/building.html). You should follow the instructions up to and including the point where the XRP arm is mounted to the servo. diff --git a/source/docs/yearly-overview/known-issues.rst b/source/docs/yearly-overview/known-issues.rst index df34d452fd..64815abfc7 100644 --- a/source/docs/yearly-overview/known-issues.rst +++ b/source/docs/yearly-overview/known-issues.rst @@ -26,7 +26,7 @@ Driver Station randomly disabled Driver Station 24.0.1 from Game Tools 2024 Patch 1 contains an update to the safety controls that may resolve the issue in certain circumstances. If the issue is still seen with this version installed, please continue with the troubleshooting steps below. -The Driver Station software has new tools for control packet delays that could cause this. The control system team requests that teams that experience this issue post screenshots of the :doc:[Driver Station Timing window](/docs/software/driverstation/driver-station-timing-viewer) to https://github.com/wpilibsuite/allwpilib/issues/6174 +The Driver Station software has new tools for control packet delays that could cause this. The control system team requests that teams that experience this issue post screenshots of the :doc:`Driver Station Timing window
` to https://github.com/wpilibsuite/allwpilib/issues/6174 Some teams have seen this happen only when the robot is operated wirelessly, but not when operated via USB or ethernet tether. Some potential mitigations: diff --git a/source/docs/zero-to-robot/step-2/python-setup.rst b/source/docs/zero-to-robot/step-2/python-setup.rst index f41cd425bc..d78361344a 100644 --- a/source/docs/zero-to-robot/step-2/python-setup.rst +++ b/source/docs/zero-to-robot/step-2/python-setup.rst @@ -15,8 +15,8 @@ Supported Operating Systems and Architectures: On Windows and macOS, we recommend using the official Python installers distributed by python.org. -* `Python for Windows `_ -* `Python for macOS `_ +* [Python for Windows](https://www.python.org/downloads/windows/) +* [Python for macOS](https://www.python.org/downloads/mac-osx/) Install RobotPy --------------- @@ -30,7 +30,7 @@ Once you have installed Python, you can use pip to install RobotPy on your devel .. note:: If you previously installed a pre-2024 or 2024 beta version of RobotPy, you should first uninstall RobotPy via ``py -m pip uninstall robotpy`` before upgrading. - .. warning:: On Windows, the `Visual Studio 2019 redistributable `_ package is required to be installed. + .. warning:: On Windows, the [Visual Studio 2019 redistributable](https:// support.microsoft.com/en-us/help/2977003/ the-latest-supported-visual-c-downloads) package is required to be installed. Run the following command from cmd or Powershell to install the core RobotPy packages: @@ -44,7 +44,7 @@ Once you have installed Python, you can use pip to install RobotPy on your devel py -3 -m pip install --upgrade robotpy - If you don't have administrative rights on your computer, either use `virtualenv/virtualenvwrapper-win `_, or or you can install to the user site-packages directory: + If you don't have administrative rights on your computer, either use [virtualenv/virtualenvwrapper-win](https://docs.python-guide.org/en/latest/dev/virtualenvs/), or or you can install to the user site-packages directory: .. code-block:: sh @@ -84,7 +84,7 @@ Once you have installed Python, you can use pip to install RobotPy on your devel python3 -m pip --version - If you need to upgrade your version of pip, it is highly recommended to use a `virtual environment `_. + If you need to upgrade your version of pip, it is highly recommended to use a [virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/). If you have a compatible version of pip, you can simply run: diff --git a/source/docs/zero-to-robot/step-3/radio-programming.rst b/source/docs/zero-to-robot/step-3/radio-programming.rst index 6df96e7952..2d51363bcd 100644 --- a/source/docs/zero-to-robot/step-3/radio-programming.rst +++ b/source/docs/zero-to-robot/step-3/radio-programming.rst @@ -12,9 +12,9 @@ The FRC Radio Configuration Utility requires administrator privileges to configu Download the latest FRC Radio Configuration Utility Installer from the following links: -`FRC Radio Configuration 24.0.1 `_ +[FRC Radio Configuration 24.0.1](https://firstfrc.blob.core.windows.net/frc2024/Radio/FRC_Radio_Configuration_24_0_1.zip) -`FRC Radio Configuration 24.0.1 Israel Version `_ +[FRC Radio Configuration 24.0.1 Israel Version](https://firstfrc.blob.core.windows.net/frc2024/Radio/FRC_Radio_Configuration_24_0_1_IL.zip) .. note:: The _IL version is for Israel teams and contains a version of the OM5PAC firmware with restricted channels for use in Israel. @@ -135,7 +135,7 @@ If you need to load the FRC firmware (or reset the radio), you can do so using t .. warning:: If you see an error about NPF name, try disabling all adapters other than the one being used to program the radio. If only one adapter is found, the tool should attempt to use that one. See the steps in :ref:`Disabling Network Adapters ` for more info. - Teams may also see this error with Operating Systems configured for languages other than US English. If you experience issues loading firmware or programming on a foreign language OS, try using an English OS, such as on the KOP provided PC or setting the Locale setting to "en_us" as described on `this page `_. + Teams may also see this error with Operating Systems configured for languages other than US English. If you experience issues loading firmware or programming on a foreign language OS, try using an English OS, such as on the KOP provided PC or setting the Locale setting to "en_us" as described on [this page](https://www.java.com/en/download/help/locale.html). Select Radio and Operating Mode ------------------------------- @@ -210,7 +210,7 @@ Troubleshooting - Make sure your firewall is turned off. - Plug directly from your computer into the wireless bridge and make sure no other devices are connected to your computer via ethernet. - Ensure the ethernet is plugged into the port closest to the power jack on the wireless bridge. -- If using an Operating System configured for languages other than US English, try using an English OS, such as on the KOP provided PC or setting the Locale setting to "en_us" as described on `this page `_. +- If using an Operating System configured for languages other than US English, try using an English OS, such as on the KOP provided PC or setting the Locale setting to "en_us" as described on [this page](https://www.java.com/en/download/help/locale.html). - Due to Unicode incompatibles, non-US Teams may face a configuration failure because of incorrect network interface reading. In that case, change the network adapter name to another name in English and retry. - Some users have reported success after installing [npcap 1.60](https://npcap.com/). If this doesn't resolve the issue, it's recommended to uninstall npcap and the radio tool and then reinstall the radio tool in order to get back to a known configuration. - If all else fails, try a different computer. diff --git a/source/docs/zero-to-robot/step-4/creating-test-drivetrain-program-cpp-java-python.rst b/source/docs/zero-to-robot/step-4/creating-test-drivetrain-program-cpp-java-python.rst index cc4ec0eda6..a35debce31 100644 --- a/source/docs/zero-to-robot/step-4/creating-test-drivetrain-program-cpp-java-python.rst +++ b/source/docs/zero-to-robot/step-4/creating-test-drivetrain-program-cpp-java-python.rst @@ -6,7 +6,7 @@ Once everything is installed, we're ready to create a robot program. WPILib com * :ref:`create_java_cpp_project` * :ref:`create_python_project` -.. important:: This guide includes code examples that involve vendor hardware for the convenience of the user. In this document, :term:`PWM` refers to the motor controller included in the KOP. The CTRE tab references the Talon FX motor controller (Falcon 500 motor), but usage is similar for TalonSRX and VictorSPX. The REV tab references the CAN SPARK MAX controlling a brushless motor, but it's similar for brushed motor. There is an assumption that the user has already installed the required :doc:[vendordeps](/docs/software/vscode-overview/3rd-party-libraries) and configured the device(s) (update firmware, assign CAN IDs, etc) according to the manufacturer documentation ([CTRE](https://docs.ctr-electronics.com/) [REV](https://docs.revrobotics.com/sparkmax/gs-sm)). +.. important:: This guide includes code examples that involve vendor hardware for the convenience of the user. In this document, :term:`PWM` refers to the motor controller included in the KOP. The CTRE tab references the Talon FX motor controller (Falcon 500 motor), but usage is similar for TalonSRX and VictorSPX. The REV tab references the CAN SPARK MAX controlling a brushless motor, but it's similar for brushed motor. There is an assumption that the user has already installed the required :doc:`vendordeps ` and configured the device(s) (update firmware, assign CAN IDs, etc) according to the manufacturer documentation ([CTRE](https://docs.ctr-electronics.com/) [REV](https://docs.revrobotics.com/sparkmax/gs-sm)). .. _create_java_cpp_project: