Skip to content

Commit 0c4ee3f

Browse files
authored
Rename "robot characterization" to "system identification" (#1701)
1 parent 60e5846 commit 0c4ee3f

File tree

70 files changed

+111
-99
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+111
-99
lines changed

source/docs/beta/tasks/beta-task-overview.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,6 @@ The purpose of Task 4 is to write new code in order to test features and functio
4848

4949
1. REV Robotics Hardware and associated software
5050
2. RoboRIO 2.0, especially the SD card imaging process
51-
3. :ref:`SysID <docs/software/pathplanning/robot-characterization/index:Robot Characterization>`
51+
3. :ref:`SysID <docs/software/pathplanning/system-identification/index:System Identification>`
5252
4. :ref:`Axon <docs/software/wpilib-tools/axon/index:Axon>`
5353

source/docs/beta/tasks/task-4-new-features.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ The purpose of this task is to test any newly developed or heavily modified feat
1818

1919
**C++/Java**
2020

21-
- :ref:`SysID <docs/software/pathplanning/robot-characterization/index:Robot Characterization>`
21+
- :ref:`SysID <docs/software/pathplanning/system-identification/index:System Identification>`
2222

2323
Desired Feedback
2424
----------------

source/docs/controls-overviews/control-system-software.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,13 @@ PathWeaver
139139

140140
PathWeaver allows teams to quickly generate and configure paths for advanced autonomous routines. These paths have smooth curves allowing the team to quickly navigate thir robot between points on the field. For more information see the :ref:`PathWeaver section <docs/software/pathplanning/pathweaver/introduction:Introduction to PathWeaver>`.
141141

142-
Robot Characterization
142+
System Identification
143143
----------------------
144144

145-
.. image:: /docs/software/pathplanning/robot-characterization/images/analysis-type.png
146-
:alt: Robot Characterization new project screen.
145+
.. image:: /docs/software/pathplanning/system-identification/images/analysis-type.png
146+
:alt: System Identification new project screen.
147147

148-
This tool helps teams automatically calculate constants that can be used to describe the physical properties of your robot for use in features like robot simulation, trajectory following, and PID control. For more information see the :ref:`Robot Characterization section <docs/software/pathplanning/robot-characterization/introduction:Introduction to Robot Characterization>`.
148+
This tool helps teams automatically calculate constants that can be used to describe the physical properties of your robot for use in features like robot simulation, trajectory following, and PID control. For more information see the :ref:`System Identification section <docs/software/pathplanning/system-identification/introduction:Introduction to System Identification>`.
149149

150150
OutlineViewer
151151
-------------

source/docs/software/advanced-controls/controllers/feedforward.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ A feedforward controller injects information about the system’s dynamics (like
99

1010
There are two types of feedforwards: model-based feedforward and feedforward for unmodeled dynamics. The first solves a mathematical model of the system for the inputs required to meet desired velocities and accelerations. The second compensates for unmodeled forces or behaviors directly so the feedback controller doesn't have to. Both types can facilitate simpler feedback controllers. We'll cover several examples below.
1111

12-
.. note:: The WPILib feedforward classes closely match the available mechanism characterization tools available in the :ref:`frc-characterization toolsuite <docs/software/pathplanning/robot-characterization/introduction:Introduction to Robot Characterization>` - the characterization toolsuite can be used to quickly and effectively determine the correct gains for each type of feedforward. The toolsuite will indicate the appropriate units for each of the gains.
12+
.. note:: The WPILib feedforward classes closely match the available mechanism identification tools available in the :ref:`SysId toolsuite <docs/software/pathplanning/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. The toolsuite will indicate the appropriate units for each of the gains.
1313

1414
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.
1515

source/docs/software/advanced-controls/controls-glossary.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ Controls Glossary
9595
A term encompassing a :term:`plant` and it's interaction with a :term:`controller` and :term:`observer`, which is treated as a single entity. Mathematically speaking, a :term:`system` maps :term:`inputs <input>` to :term:`outputs <output>` through a linear combination of :term:`states <state>`.
9696

9797
system identification
98-
The process of capturing a :term:`systems <system>` :term:`dynamics` in a mathematical model using measured data. The characterization toolsuite uses system identification to find kS, kV and kA terms.
98+
The process of capturing a :term:`systems <system>` :term:`dynamics` in a mathematical model using measured data. The SysId toolsuite uses system identification to find kS, kV and kA terms.
9999

100100
system response
101101
The behavior of a :term:`system` over time for a given :term:`input`.

source/docs/software/advanced-controls/introduction/tuning-pid-controller.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ If the :term:`controller` settles at an :term:`output` above or below the :term:
1515

1616
Beware that if :math:`K_i` is too large, integral windup can occur. Following a large change in :term:`setpoint`, the integral term can accumulate an error larger than the maximal :term:`control input`. As a result, the system overshoots and continues to increase until this accumulated error is unwound.
1717

18-
.. note:: The :ref:`frc-characterization toolsuite <docs/software/pathplanning/robot-characterization/index:Robot Characterization>` can be used to model your system and give accurate Proportional and Derivative values. This is preferred over tuning the controller yourself.
18+
.. note:: The :ref:`SysId toolsuite <docs/software/pathplanning/system-identification/index:System Identification>` can be used to model your system and give accurate Proportional and Derivative values. This is preferred over tuning the controller yourself.
1919

2020
Actuator Saturation
2121
-------------------

source/docs/software/advanced-controls/state-space/state-space-flywheel-walkthrough.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Modeling Our Flywheel
3131
3232
Where :term:`x-dot` is the rate of change of the :term:`system`'s :term:`state`, :math:`\mathbf{x}` is the system's current state, :math:`\mathbf{u}` is the :term:`input` to the system, and :math:`\mathbf{y}` is the sytem's :term:`output`.
3333

34-
Let's use this system of equations to model our flywheel in two different ways. We'll first model it using :term:`system identification` using the frc-characterization toolsuite, and then model it based on the motor and flywheel's :term:`moment of inertia`.
34+
Let's use this system of equations to model our flywheel in two different ways. We'll first model it using :term:`system identification` using the SysId toolsuite, and then model it based on the motor and flywheel's :term:`moment of inertia`.
3535

3636
The first step of building up our state-space system is picking our system's states. We can pick anything we want as a state -- we could pick completely unrelated states if we wanted -- but it helps to pick states that are important. We can include :term:`hidden states <hidden state>` in our state (such as elevator velocity if we were only able to measure its position) and let our Kalman Filter estimate their values. Remember that the states we choose will be driven towards their respective :term:`references <reference>` by the feedback controller (typically the :ref:`Linear-Quadratic Regulator <docs/software/advanced-controls/state-space/state-space-intro:The Linear-Quadratic Regulator>` since it's optimal).
3737

source/docs/software/advanced-controls/state-space/state-space-intro.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Model-based control focuses on developing an accurate model of the :term:`system
1212

1313
.. note:: State-space control makes extensive use of linear algebra. More on linear algebra in modern control theory, including an introduction to linear algebra and resources, can be found in Chapter 4 of `Controls Engineering in FRC <https://file.tavsys.net/control/controls-engineering-in-frc.pdf>`__.
1414

15-
If you've used WPILib's feedforward classes for ``SimpleMotorFeedforward`` or its sister classes, or used FRC-Characterization to pick PID :term:`gains <gain>` for you, you're already familiar with model-based control! The ``kv`` and ``ka`` :term:`gains <gain>` can be used to describe how a motor (or arm, or drivetrain) will react to voltage. We can put these constants into standard state-space notation using WPILib's ``LinearSystem``, something we will do in a later article.
15+
If you've used WPILib's feedforward classes for ``SimpleMotorFeedforward`` or its sister classes, or used SysId to pick PID :term:`gains <gain>` for you, you're already familiar with model-based control! The ``kv`` and ``ka`` :term:`gains <gain>` can be used to describe how a motor (or arm, or drivetrain) will react to voltage. We can put these constants into standard state-space notation using WPILib's ``LinearSystem``, something we will do in a later article.
1616

1717
Vocabulary
1818
----------
@@ -86,7 +86,7 @@ We can convert this equation to state-space notation. We can create a system wit
8686
.. math::
8787
\mathbf{\dot{x}} = \begin{bmatrix}\frac{-kV}{kA}\end{bmatrix} \mathbf{x} + \begin{bmatrix}\frac{1}{kA}\end{bmatrix} \mathbf{u}
8888
89-
That's it! That's the state-space model of a system for which we have the kV and kA constants. This same math is use in FRC-Characterization to model flywheels and drivetrain velocity systems.
89+
That's it! That's the state-space model of a system for which we have the kV and kA constants. This same math is use in system identification to model flywheels and drivetrain velocity systems.
9090

9191
Visualizing State-Space Responses: Phase Portrait
9292
-------------------------------------------------
@@ -220,7 +220,7 @@ Oftentimes, our sensors have a delay associated with their measurements. For exa
220220

221221
This lag means that our feedback controller will be generating voltage commands based on state estimates from the past. This often has the effect of introducing instability and oscillations into our system, as shown in the graph below.
222222

223-
However, we can model our controller to control where the system's :term:`state` is delayed into the future. This will reduce the LQR's :term:`gain` matrix :math:`\mathbf{K}`, trading off controller performance for stability. The below formula, which adjusts the :term:`gain` matrix to account for delay, is also used in frc-characterization.
223+
However, we can model our controller to control where the system's :term:`state` is delayed into the future. This will reduce the LQR's :term:`gain` matrix :math:`\mathbf{K}`, trading off controller performance for stability. The below formula, which adjusts the :term:`gain` matrix to account for delay, is also used in system identification.
224224

225225
.. math::
226226
\mathbf{K_{compensated}} = \mathbf{K} \cdot \left(\mathbf{A} - \mathbf{BK}\right)^{\text{delay} / dt}

source/docs/software/advanced-controls/trajectories/troubleshooting.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,10 @@ If your odometry is bad, then your Ramsete controller may misbehave, because it
9595
}
9696

9797
2. Lay out a tape measure parallel to your robot and push your robot out about one meter along the tape measure. Lay out a tape measure along the Y axis and start over, pushing your robot one meter along the X axis and one meter along the Y axis in a rough arc.
98-
3. Compare X and Y reported by the robot to actual X and Y. If X is off by more than 5 centimeters in the first test then you should check that you measured your wheel diameter correctly, and that your wheels are not worn down. If the second test is off by more than 5 centimeters in either X or Y then your track width (distance from the center of the left wheel to the center of the right wheel) may be incorrect; if you're sure that you measured the track width correctly with a tape measure then your robot's wheels may be slipping in a way that is not accounted for by track width--if this is the case then you should :ref:`run the track width characterization <docs/software/pathplanning/robot-characterization/characterization-routine:Running Tests>` and use that track width instead of the one from your tape measure.
98+
3. Compare X and Y reported by the robot to actual X and Y. If X is off by more than 5 centimeters in the first test then you should check that you measured your wheel diameter correctly, and that your wheels are not worn down. If the second test is off by more than 5 centimeters in either X or Y then your track width (distance from the center of the left wheel to the center of the right wheel) may be incorrect; if you're sure that you measured the track width correctly with a tape measure then your robot's wheels may be slipping in a way that is not accounted for by track width--if this is the case then you should :ref:`run the track width identification <docs/software/pathplanning/system-identification/identification-routine:Running Tests>` and use that track width instead of the one from your tape measure.
9999

100100
.. image:: images/track-width-logger.png
101-
:alt: Highlights the trackwidth section of characterization.
101+
:alt: Highlights the trackwidth section of identification.
102102

103103
Verify Feedforward
104104
^^^^^^^^^^^^^^^^^^
@@ -227,7 +227,7 @@ If your feedforwards are bad then the P controllers for each side of the robot w
227227
{&m_drive});
228228

229229
4. Run the robot on a variety of trajectories (curved and straight line), and check to see if the actual velocity tracks the desired velocity by looking at graphs from NetworkTables.
230-
5. If the desired and actual are off by *a lot* then you should check if the wheel diameter and ``encoderEPR`` you used for characterization were correct. If you've verified that your units and conversions are correct, then you should try recharacterizing on the same floor that you're testing on to see if you can get better data.
230+
5. If the desired and actual are off by *a lot* then you should check if the wheel diameter and ``encoderEPR`` you used for system identification were correct. If you've verified that your units and conversions are correct, then you should try recharacterizing on the same floor that you're testing on to see if you can get better data.
231231

232232
Verify P Gain
233233
^^^^^^^^^^^^^
@@ -248,7 +248,7 @@ Test one constraint at a time! Remove the other constraints, tune your one remai
248248
* ``DifferentialDriveVoltageConstraint``:
249249

250250
- If your robot accelerates very slowly then it's possible that the max voltage for this constraint is too low.
251-
- If your robot doesn't reach the end of the path then your characterization data may problematic.
251+
- If your robot doesn't reach the end of the path then your system identification data may problematic.
252252

253253
* ``DifferentialDriveKinematicsConstraint``:
254254

source/docs/software/examples-tutorials/wpilib-examples.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ State-Space Examples
8080
These examples demonstrate the use of the :ref:`State-Space Control <docs/software/advanced-controls/state-space/state-space-intro:Introduction to State-Space Control>`.
8181

8282
* **StateSpaceFlywheel** (`Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/statespaceflywheel>`__, `C++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/StateSpaceFlywheel>`__): Demonstrates state-space control of a flywheel.
83-
* **StateSpaceFlywheelSysId** (`Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/statespaceflywheelsysid>`__, `C++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/StateSpaceFlywheelSysId>`__): Demonstrates state-space control using FRC Characterization's System Identification for controlling a flywheel.
83+
* **StateSpaceFlywheelSysId** (`Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/statespaceflywheelsysid>`__, `C++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/StateSpaceFlywheelSysId>`__): Demonstrates state-space control using SysId's System Identification for controlling a flywheel.
8484
* **StateSpaceElevator** (`Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/statespaceelevator>`__, `C++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/StateSpaceElevator>`__): Demonstrates state-space control of an elevator.
8585
* **StateSpaceArm** (`Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/statespacearm>`__, `C++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/StateSpaceArm>`__): Demonstrates state-space control of an Arm.
8686
* **StateSpaceDriveSimulation** (`Java <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/statespacedifferentialdrivesimulation>`__, `C++ <https://github.com/wpilibsuite/allwpilib/tree/main/wpilibcExamples/src/main/cpp/examples/StateSpaceDifferentialDriveSimulation>`__): Demonstrates state-space control of a differential drivetrain in combination with a RAMSETE path following controller and Field2d class.

0 commit comments

Comments
 (0)