This document details how data must be sent over NetworkTables for accurate data collection. Note that the data format has changed from what the old [frc-characterization](https://github.com/wpilibsuite/frc-characterization) tool used to generate.
## NetworkTables Data Entries
Here is a list of the NT entries that are used to send and collect data between sysid and the robot program:
| `/SmartDashboard/SysIdTelemetry` | `string` | Used to send telemetry from the robot program. This data is sent after the test completes once the robot enters the disabled state. |
| `/SmartDashboard/SysIdVoltageCommand` | `double` | Used to either send the ramp rate (V/s) for the quasistatic test or the voltage (V) for the dynamic test. |
| `/SmartDashboard/SysIdTestType` | `string` | Used to send the test type ("Quasistatic" or "Dynamic") which helps determine how the `VoltageCommand` entry will be used. |
| `/SmartDashboard/SysIdRotate` | `bool` | Used to receive the rotation bool from the Logger. If this is set to true, the drivetrain will rotate. It is only applicable for drivetrain tests. |
There are two formats used to send telemetry from the robot program. One format is for non-drivetrain mechanisms, whereas the other is for all drivetrain tests (linear and angular). All timestamps must be in seconds.
Supported test types for the "test" field in this data format include "Arm",
"Elevator", and "Simple". Supported unit types include "Meters", "Feet",
"Inches", "Radians", "Rotations", and "Degrees".
### Drivetrain
`timestamp, l voltage, r voltage, l position, r position, l velocity, r velocity, angle, angular rate`
Note that all positions and velocities should be in rotations of the output and rotations/sec of the output respectively. If there is a gearing between the encoder and the output, that should be taken into account.
Example JSON:
```json
{
"fast-backward": [
[
timestamp 1,
l voltage 1,
r voltage 1,
l position 1,
r position 1,
l velocity 1,
r velocity 1,
angle 1,
angular rate 1
],
[
timestamp 2,
l voltage 2,
r voltage 2,
l position 2,
r position 2,
l velocity 2,
r velocity 2,
angle 2,
angular rate 2
]
],
"fast-forward": [
[
timestamp 1,
l voltage 1,
r voltage 1,
l position 1,
r position 1,
l velocity 1,
r velocity 1,
angle 1,
angular rate 1
],
[
timestamp 2,
l voltage 2,
r voltage 2,
l position 2,
r position 2,
l velocity 2,
r velocity 2,
angle 2,
angular rate 2
]
],
"slow-backward": [
[
timestamp 1,
l voltage 1,
r voltage 1,
l position 1,
r position 1,
l velocity 1,
r velocity 1,
angle 1,
angular rate 1
],
[
timestamp 2,
l voltage 2,
r voltage 2,
l position 2,
r position 2,
l velocity 2,
r velocity 2,
angle 2,
angular rate 2
]
],
"slow-forward": [
[
timestamp 1,
l voltage 1,
r voltage 1,
l position 1,
r position 1,
l velocity 1,
r velocity 1,
angle 1,
angular rate 1
],
[
timestamp 2,
l voltage 2,
r voltage 2,
l position 2,
r position 2,
l velocity 2,
r velocity 2,
angle 2,
angular rate 2
]
],
"sysid": true,
"test": "Drivetrain",
"units": "Rotations",
"unitsPerRotation": 1.0
}
```
Supported test types for the "test" field in this data format include
"Drivetrain" and "Drivetrain (Angular)". Supported unit types include "Meters",
"Feet", "Inches", "Radians", "Rotations", and "Degrees".