Concept illustration

Read diagram notes
- Original message field: Keep battery or ESC source identity and field definition.
- Measurement, estimate or state: Current, remaining-energy estimate and discharge state are not interchangeable.
- Units and unavailable codes: Decoding must preserve scaling and field-specific missing-value meanings.
- Clock and acquisition boundary: Message time and logger receipt do not guarantee simultaneous physical samples.
A hypothetical large civil fixed-wing VTOL aircraft combines a battery monitor and several motor-controller reports in one log. A dashboard groups everything under propulsion health. The useful comparison starts earlier: which values describe measurements, which describe estimates and which merely report a state? The following worked dictionary uses actual MAVLink common-message definitions. It illustrates an interpretation method, not telemetry observed on an GAUTEN aircraft or proof that an unspecified controller implements these messages.
Source and meaning of each field
The dictionary preserves the message name because a short column label loses context. Its classification describes the protocol’s meaning, not a claim that the installed sensing chain is calibrated. Unknown physical sensor locations remain unknown rather than being guessed from a familiar field name.
| Message and field | Meaning and physical boundary | Units and time meaning |
|---|---|---|
| BATTERY_STATUS.current_battery | Measured battery current; the installed sensor and included branches still need identification.[2] | cA; no timestamp field in this message.[2] |
| BATTERY_STATUS.battery_remaining | Estimated remaining battery energy, not a direct energy measurement.[2] | Percent; no acquisition timestamp supplied here.[2] |
| BATTERY_STATUS.charge_state | Reported discharge-state enum, not a current sensor.[2] | Enumerated state; same message-time limitation.[2] |
| ESC_STATUS.current | Measured current from each ESC; the protocol does not specify input-lead versus winding sensing.[2] | A; message carries time_usec.[2] |
| ESC_STATUS.rpm | Reported motor speed; this definition does not prescribe a tachometer or estimation method.[2] | rpm; same message timestamp.[2] |
| ESC_INFO.temperature | Reported ESC temperature, not a defined winding or junction location.[2] | cdegC; message carries time_usec.[2] |
For this fixed-wing review, these distinctions change the proposed graph. The reviewer would not merge battery current and ESC current into one supposedly redundant measurement before identifying their physical boundaries. Nor would a percentage trend be relabeled measured remaining energy. The dictionary answers what a value purports to represent while leaving implementation evidence visible.
Units and scaling conventions
MAVLink distinguishes centiamperes from amperes and centidegrees Celsius from degrees. Unknown-value sentinels also differ: battery current and remaining-energy estimates use -1, while unavailable ESC temperature uses INT16_MAX.[2] An exporter must retain those meanings instead of turning unavailable values into apparent physical readings.
As an original export-review example, imagine a decoder that drops unit labels before combining columns. The analyst would keep raw field identity, decoded unit and any display conversion in separate columns. A plausible-looking temperature curve would not resolve whether a missing-value code was mishandled. This is a data interpretation check, not a proposed calibration procedure.
ArduPilot’s analog power-module documentation separately defines voltage/current scale and offset configuration.[1] That measurement-chain subject is developed in the related calibration article. Here, successful decoding means the protocol was interpreted; it does not by itself validate the sensor calibration or installed current path.
Update rate and missing samples
ESC time_usec can use Unix epoch or time since boot. The protocol labels ESC_INFO and ESC_STATUS streaming rates as recommendations, not measured acquisition rates.[2] Neither statement makes the message timestamp a guaranteed simultaneous sample time for every field.
In the hypothetical fixed-wing comparison, retain message time, logger receipt time and any documented acquisition time separately. A BATTERY_STATUS row lacking an embedded timestamp would be labeled with the logger’s actual time basis, not silently assigned an ESC clock. Missing packets, a repeated displayed value and an unchanged physical quantity would remain different interpretations until the implementation record distinguishes them.
Logs and configuration records
The proposed handoff attaches source system/component identity, battery ID or ESC index, firmware revision and decoder definition to each column. If the team changes a battery monitor or controller, the old field mapping remains attached to the old logs. This prevents an apparently unchanged chart label from hiding a changed source.
A reported state also does not establish command authority; the separate generator-control article handles that architectural question. The present dictionary instead leaves the analyst with explicit measured, estimated, reported and undefined entries. No component diagnosis, installed accuracy or endurance conclusion follows merely because the resulting table is complete.
Related reading
- Camera Event Timing and Geotag Quality
- Keeping Inspection Annotations Linked to Original Evidence
- Voltage and Current Monitoring Need Calibration Context
- Generator Control Versus Generator Telemetry