Skip to main content

Telemetry Structure

There's a lot of data on this robot. I will attempt to explain how it's set up.

1 Where all of the data lives

All of the streamable data is located in DataStreamerData. This is done deliberately as I didn't want each subsystem to "register" its own data - debugging and diagnosing what data is in the system quickly would be impractical.

All of these *.Telemetry objects are initialized here, but are overwritten in RobotInit.

Sidenote:

The reason that they are initialized is because when the Co-Proc receives a new packet, in order for mDataStreamerDataReceiver on the Co-Proc to call fromByteBuffer to deserialize the byte[] array none of the objects can be null.

2 How data gets there

Each TelemetryProvider has its own Telemetry class. Take AcesT265 for instance: AcesT265 wants to supply telemetry, so it implements TelemetryProvider<AcesT265.Telemetry> which is defined lower in the file This Telemetry object is filled members that extend GenericDataStore (such as DataStore_Integer and DataStore_Float)

3 How data gets out

The DataStreamer can send it Someone can enable network table publishing Lifetime statistics will read it It will be sent to the Co-Proc