Digital FPV
Summary¶
Cinematic uses the HDZero Freestyle V2 for digital FPV video. The camera connects to the VTX via a MIPI CSI-2 cable; the VTX encodes each frame in hardware (H.265, 1–2 ms) and transmits on 5.8 GHz; the HDZero Goggle 2 receives, decodes, and displays the stream with 4–8 ms total latency. Digital FPV provides sharper image quality than analog at the cost of cliff-edge failure behaviour — when the digital link degrades below the error-correction threshold, the display freezes or goes dark rather than degrading gracefully to snow.
Concept¶
Analog vs digital FPV latency¶
Analog FPV transmits the composite video signal directly — the camera scans each line and the VTX transmits it immediately. Total latency is approximately 15–20 ms (one TV field time). Analog degrades gracefully: as signal weakens, noise appears as snow. The pilot can still orient the drone through moderate snow.
Digital FPV encodes each frame, packetises it, transmits it, receives it, error-checks it, decodes it, and displays it. HDZero uses dedicated hardware encoders and decoders that each contribute 1–2 ms. Total latency: 4–8 ms — roughly half that of analog.
The trade-off: digital either works (clean image) or it doesn't (freeze or black). There is no intermediate degraded state. This is why:
- VLOS must be maintained independently of the FPV feed — the pilot must always be able to locate the drone with their eyes, not only through the goggles
- The HDZero system uses diversity antenna reception — the goggle checks signal quality on multiple antennas per packet and selects the best
- The VTX transmit power is adjustable (25 mW / 200 mW / 800 mW) to match range requirements
MIPI CSI-2 cable handling¶
The MIPI cable between the HDZero camera and VTX carries high-frequency differential signals (hundreds of MHz clock rate). Its differential impedance must remain consistent along its length. Exceeding the cable's minimum bend radius changes the impedance, creating reflections that corrupt the video signal.
On this build, the MIPI cable routes away from motor phase wires and the battery lead — see electronics-installation for the general EMC routing discipline this build uses in place of a printed cable channel. Never fold or crease the cable, and leave a short service loop at the camera bracket end rather than pulling it taut.
MSP DisplayPort OSD¶
The FC sends OSD character data to the VTX via MSP DisplayPort. The VTX overlays this text on the video frame before transmission. The pilot sees: battery voltage, GPS satellite count, altitude, distance from home, flight mode, RSSI/LQ. OSD_TYPE = 5 in ArduPilot enables this. The OSD is completely generated by the flight controller firmware — the VTX is a passive renderer.
Reference¶
HDZero Freestyle V2 specification¶
| Parameter | Value |
|---|---|
| Input voltage | 7–25V (this build: from the H7A3-SLIM's own switchable 9V/2A BEC, not a separate buck converter — see voltage-regulation) |
| RF output | 5.8 GHz, 25/200/800 mW selectable |
| Encoding | H.265 hardware encoder, 1–2 ms |
| Latency (total) | 4–8 ms end-to-end |
| Resolution | 720p60 or 1080p30/60 |
| Camera interface | MIPI CSI-2 flat cable |
| FC interface | MSP DisplayPort |
| Mass | 18 g (VTX) + 7 g (camera) |
Antenna and diversity¶
The HDZero Goggle 2 has two receive antennas. On each received packet, the goggle compares signal quality from both antennas and uses the better one. This diversity reception reduces the impact of physical antenna orientation — as the drone rolls, one antenna will be better positioned than the other, and diversity switching maintains the link.
Antenna placement on the drone: mount the VTX antenna pointing upward, clear of the GPS bracket, the battery, and the GoPro mount. Clear line of sight from antenna to goggle antenna is the primary requirement.
MIPI cable routing requirements¶
- Route away from motor phase wires and the battery lead
- Minimum bend radius: 30 mm
- Leave a short service loop at the camera bracket end
- Never crease, fold, or kink the cable
- Replace if any visible damage to the cable body or connector
Procedure¶
VTX power level selection¶
| Situation | Recommended power |
|---|---|
| Indoor or proximity (<10 m) | 25 mW |
| Standard outdoor, <200 m | 200 mW |
| Extended range or obstacles | 800 mW (check local regulations) |
In EU: 25 mW EIRP is the legal limit for unlicensed 5.8 GHz transmission in most EU countries. Verify local regulations before using 200 mW or 800 mW outdoors. VTX power is controlled via the SA switch on TX16S (3-position).
Post-installation video check¶
- Connect battery. Wait for VTX to power up (~3 s after FC boot).
- In goggles: select HDZero input, scan for signal.
- Verify video is clear at close range. OSD elements should be visible.
- Move the drone 20 m away. Verify video remains clear.
- If image is clean at 20 m but corrupted at 1 m: VTX may be overdriving the receiver at close range at 200/800 mW. Switch to 25 mW for proximity work.
Rationale¶
Why HDZero and not DJI O3 or Walksnail¶
HDZero provides among the lowest latency in the digital FPV market. Just as important here: it's the same video system used by both current builds (Cinematic and Agile), so goggles, ecosystem knowledge, and troubleshooting transfer directly between them — see agile-variant. DJI O3 and Walksnail use proprietary protocols, and DJI specifically has a history of firmware changes that broke third-party equipment — a dependency risk that runs counter to everything this project is about. See foss-stack-libdrone for the fuller argument.
Connections¶
requires: [] related: - crsf-protocol - gps-antenna-placement - voltage-regulation - electronics-installation leads_to: - piloting-progression