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!
* 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: https://github.com/booo/wifibroadcast/ ?
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?
TBD.