WiFI Broadcast

WiFi Broadcast has great potentials as link layer between the drone and the ground station. As well as link layer for video data created on the ground, e.g. between the speedboats and the mothership.

We tested the original WiFi broadcast implementation on a TL-WN722N with a patched driver. We did tests in the noisy Berlin environment and reached a throughput of 8 to 20 MBit/s on a table setup.

There are various projects that use the WiFi broadcast code:

The original implementation doesn't care much about the transmitted data. You can pipe whatever data you have to the tx process. Some of the mentioned implementations provided MAVLink transport, others provide a UDP interface. For example in theory its possible to transmit a 4k video stream via H265 using a Jetson Nano Board: https://befinitiv.wordpress.com/2019/04/29/fpv-in-4k/

The code for injecting packets is quite simple and can be adapted to our needs, e.g. improved forward error correction.

The code should work with all drivers that provide a monitor mode to inject packets. We tested the code on a Atheros AR9280 Rev:2 mini-pci card. Setting the bitrate with iw:

iw wlan0 set bitrates legacy-2.4 5

Result was an injection rate of around 12 MBit/s in the nosy Berlin environment.

We don't need a patched kernel to set the bitrate!

Manual bitrate configuration for ath9k/10k

* optional: Simulate FC-MAVLink-Data on PC - using Ardupilot SITL on UART output:

see SITL

* Pi Sender: Send data via wifibroadcast from Serial input port data - Mavlink Data from FC

configure UART using for 9600 Baudrate (or checkout your telemetry for correct Baud):

stty -F /dev/ttyAMA0 9600

Send data:

./tx wlan0 < /dev/ttyAMA0

* Groundstation station receiver side: Receive wifibroadcast data and pipe into QGC:

sudo ./rx wlp0s29u1u2 2> /dev/null | nc -l 5000

* QGC: New connection with TCP on Port 5000 - receives telemetry

source tx and rx commands: __ ?

Captured data needs to be sent from companion (connected to fc) to gcs. On the companion there might be also ROS needing access to mavlink messages.

On the gcs side the sent data needs to be handled. QGroundControl can't handle that captured data → needs additional software.

Routing of pakets (ros|captured data processing)<*>companion↔fc↔radio↔gcs<*>(qgroundcontrol|captured data processing)

- <*> routing to multiple endpoints

- radio is long distance rfd868 or similar

Parallel to the radio connection there might be a long distance wifi connection.

(images|captured data processing)<*>companion↔wifi↔gcs<*>(qgroundcontrol?|captured data processing)

open question: route (encapsulated) mavlink pakets also over wifi?

depending on that: combine of images / captured data on gcs side - how?


  • 20MBit/s in the basement in Neukölln, distance 50cm, two omni antennas with unknown dBi
  • 4MBit/s on Tempelhofer Feld, distance ~ 200m, unpatched kernel, txpower maybe not at max, both sides small omni antennas with unknown dBi
  • unkown MBit/s, max. distance ~ 1km, esp 201 with 1-3dBi omni, ground station Nanostation M2, unknown tx power on both sides, normal wifi, no wifibroadcasting
  • test in realistic environment, e.g. noiseless sea env
  • range test
  • test antenna combinations, e.g. dipol and sector, dipol and dish
  • implement tun/tap over wifibroadcast
  • searchwing-wifibroadcast.txt
  • Last modified: 2021/03/27 12:39
  • by swrm