Go FPV Latency Testing

I've seen lots of skepticism about the latency of my Go FPV app, which allows folks to use their phone, instead of goggles, to fly FPV.

Setup

I setup a little test to figure out the latency of the app vs a normal tv monitor.

I recorded a video of me taking a picture with a flash at 848x480 240fps, or 4.16ms per frame, with the phone display in the background so I could compare the timing between phone and recording.

Externally Recorded Results

The general methodology here is to record a high FPV video of both the monitor and something in real life (me snapping my fingers) and compare the number of frames the monitor lags behind real life in the recorded video.

  • V1, without optimizations -- currently available here via this community group

    • The TV monitor has a 25 frame latecy recorded at 240 fps this means a latency of 104ms.

    • A Nexus 5 running Go FPV is 18 frames or 74ms behind that, for a total of 43 frames of latency at 240 fps which means a ~178ms delay, in the best case. However, a very small FIFO buffer is causing lots of frames to be dropped when device performance limits are hit.

  • V2, with optimizations

    • The TV monitor was not used in testing.

    • A Nexus 5 running Go FPV is 30 frames slower than real life -- which means a total of ~125ms delay in the best case, however the FIFO buffer is still causing issues.

  • V3, further optimizations

    • The TV monitor was not used in testing.

    • A Nexus 5 running Go FPV is 28 frames slower than real life. Recording is broken in this version and the FIFO buffer causes issues.

  • V4, even more optimizations

    • The TV monitor was not used in testing.

    • I tested this time at 60fps, to get a higher quality picture out of the awesome GoPro clone I'm using. This give us ~16.6ms/frame

    • A Nexus 5 running Go FPV is between 8 and 10 frames slower than real life while recording -- which means an average total delay of 150ms while recording. The FIFO buffer has been removed and we get consistent render speeds across different hardware performance thresholds. Not bad, it is only 46ms slower than a TV monitor, with recording, faster when not using the recording feature.

Internally Recorded Results

For this, I instrumented the code and log the average frame rate of each session.

On long sessions (over 10k frames) I consistently achieve under 35ms render times as measured from the time the frame comes in off the USB link until just after rendering.

From this we can deduce that there is an approximately 120ms delay attributable to the other components in the system:

- Camera

- Wireless Link

- USB -> UVC Converter

Since the TV renders with about 104ms latency, we can assume the USB -> UVC converter is 16ms slower than the TV's analog to serial converter. This could potentially be improved with better hardware and a faster USB link.

Interpretation

  • According to 2007/8 Canadian census data, 20+ year old average reaction time is 480ms. So the delay from Go FPV would increase your effective reaction time, relative to a tv monitor by 9.5%

  • If you compute the difference in feet traveled, between the normal reaction time latency 480ms and reaction time through the goggles 526ms, traveling at 40 mph, it is about 4 feet.

Further Tests
  • If anyone wants to send me some fatsharks, skyzone or boscam goggles, I'd love to test 'em out!