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 tool used to generate.
Here is a list of the NT entries that are used to send and collect data between sysid and the robot program:
NT Entry | Type | Description |
---|---|---|
/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.
timestamp, voltage, position, velocity
Example JSON:
{ "fast-backward": [ [ timestamp 1, voltage 1, position 1, velocity 1 ], [ timestamp 2, voltage 2, position 2, velocity 2 ] ], "fast-forward": [ [ timestamp 1, voltage 1, position 1, velocity 1 ], [ timestamp 2, voltage 2, position 2, velocity 2 ] ], "slow-backward": [ [ timestamp 1, voltage 1, position 1, velocity 1 ], [ timestamp 2, voltage 2, position 2, velocity 2 ] ], "slow-forward": [ [ timestamp 1, voltage 1, position 1, velocity 1 ], [ timestamp 2, voltage 2, position 2, velocity 2 ] ], "sysid": true, "test": "Simple", "units": "Rotations", "unitsPerRotation": 1.0 }
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".
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:
{ "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".