Skip to content

WFB-NG (WiFi Broadcast Next Generation)

WFB-NG — це відкритий цифровий радіолінк для передачі відео, телеметрії та даних поверх «сирого» Wi-Fi. Він є основою відеолінку в OpenIPC/OpenFPV-системах. Проєкт розробляє svpcom.

На відміну від звичайного Wi-Fi-з'єднання, WFB-NG переводить мережеву карту в режим монітора й передає пакети напряму (інжекція), без асоціації та підтверджень — це дає мінімальну затримку й велику дальність.

Принцип роботи

  • Broadcast без асоціації. Немає «підключення» між пристроями та очікування ACK — передавач просто транслює пакети, а будь-який приймач у тому ж каналі їх ловить.
  • FEC (Forward Error Correction). Додаються надлишкові пакети, щоб відновлювати втрачені. За замовчуванням лінк відновлює до 4 втрачених пакетів із блоку в 12 (налаштовується через fec_k/fec_n).
  • 1:1 RTP → IEEE 802.11. Кожен RTP-пакет відео мапиться в один радіопакет без серіалізації в потік — це мінімізує затримку.
  • Шифрування. Трафік шифрується (libsodium) парою ключів gs.key / drone.key.

Переваги

  • Низька затримка — немає handshake-протоколів.
  • Стійкість до завад — FEC відновлює втрачені пакети, є диверсивний прийом.
  • Велика дальність — кілька кілометрів за правильних антен і потужності.
  • Двосторонній канал — відео «вниз» + телеметрія MAVLink «вгору».
  • Кілька приймачів — агрегація з кількох карт/станцій, автоматичний вибір найкращого передавача за рівнем сигналу.

Підтримуване обладнання

ЧипсетПримітка
RTL8812AUНайпоширеніший, потрібен патчений драйвер
RTL8812EUПотрібен патчений драйвер
Atheros AR9350Підтримується

Карта обов'язково має підтримувати режим монітора та інжекцію пакетів. Див. також Мережеві карти.

Компоненти

ІнструментПризначення
wfb_keygenГенерує пару ключів шифрування (gs.key, drone.key)
wfb_txПередавач (інжекція пакетів у режимі монітора)
wfb_rxПриймач
wfb_tunТунель IPv4 поверх лінку (для MAVLink/даних)
wfb-cli gsМонітор стану лінку на наземній станції (RSSI, FEC, втрати)

Ключі шифрування

WFB-NG шифрує трафік. Ключі генеруються однією командою (щоб утворити коректну пару):

bash
wfb_keygen

Команда створює два файли. Розкладіть їх так:

  • drone.key → на камеру (дрон): /etc/drone.key
  • gs.key → на наземну станцію: /etc/gs.key

Ключі мають бути з однієї пари

Якщо gs.key і drone.key згенеровані різними викликами wfb_keygen, лінк не встановиться (помилка дешифрування). Генеруйте обидва ключі разом і лише потім розкладайте по пристроях.

Конфігурація: /etc/wifibroadcast.cfg

Головний конфіг лінку. Канал і регіон задаються в [common], а потоки відео/телеметрії — в окремих секціях.

ini
[common]
wifi_channel = 161          # 161 = 5825 МГц (5.8 ГГц)
wifi_region = 'BO'          # регіон для максимальної потужності

[drone_video]
peer = 'connect://127.0.0.1:5600'   # куди віддавати відео
bandwidth = 20              # 20 або 40 МГц
stbc = 1
ldpc = 1
mcs_index = 1
fec_k = 8
fec_n = 12

[gs_video]
peer = 'listen://0.0.0.0:5600'

[gs_mavlink]
peer = 'connect://127.0.0.1:14550'

Основні параметри

ПараметрЗначенняОпис
wifi_channelнапр. 161Канал Wi-Fi (має збігатися на дроні та GS)
wifi_regionнапр. 'BO'Регіон/потужність (обирайте легальний для вашої країни)
bandwidth20 / 40Ширина каналу, МГц
mcs_index15Схема модуляції: вище = більший бітрейт, менша дальність
stbc / ldpc0/1Кодування для стійкості до завад
fec_k / fec_nнапр. 8 / 12FEC: k даних із n пакетів (більший запас = надійніше)
short_giTrue/FalseКороткий guard interval

Потужність і регіон

Параметр wifi_region впливає на дозволену потужність передавача. Використовуйте значення, легальне для вашої країни та діапазону. Завищена потужність може бути незаконною й перегрівати карту.

Налаштування наземної станції (Ubuntu)

Приклад для Ubuntu 22.04 LTS.

1. Залежності:

bash
sudo apt update
sudo apt install dkms git python3-all-dev net-tools virtualenv fakeroot \
  debhelper python3-twisted libpcap-dev python3-pyroute2 python3-future \
  python3-all libsodium-dev

2. Драйвер карти (приклад для RTL8812AU) — встановіть патчений драйвер через dkms.

3. Встановлення WFB-NG (вкажіть ім'я свого інтерфейсу з iwconfig):

bash
git clone -b stable https://github.com/svpcom/wfb-ng.git
cd wfb-ng
sudo ./scripts/install_gs.sh "wlan0"

4. Конфіг — відредагуйте /etc/wifibroadcast.cfg (канал/регіон/потоки, як вище) і покладіть /etc/gs.key.

Запуск і моніторинг

bash
# Наземна станція
sudo systemctl enable --now wifibroadcast@gs
systemctl status wifibroadcast@gs

# Дрон (камера)
sudo systemctl enable --now wifibroadcast@drone

# Монітор лінку (RSSI, FEC, втрати пакетів)
wfb-cli gs

# Логи для діагностики
journalctl -xu wifibroadcast@gs -n 100

Перегляд відео

Відеопотік (зазвичай H.265) віддається по UDP на порт 5600. Його можна відкрити у PixelPilot, QGroundControl чи GStreamer:

  • QGroundControl — UDP h.265, адреса 0.0.0.0:5600, увімкніть Low Latency Mode.
  • GStreamer — приймання RTP/UDP на 5600 з декодуванням H.265.

Вирішення проблем

СимптомПричина / рішення
Немає відео взагаліРізний wifi_channel на дроні та GS — звірте /etc/wifibroadcast.cfg
Помилки дешифруванняgs.key і drone.key не з однієї пари — перегенеруйте wfb_keygen
Лінк рветься / низький бітрейтЗавеликий mcs_index для умов — зменшіть; перевірте антени та потужність
Карта не запускаєтьсяНемає режиму монітора/інжекції або непатчений драйвер

Для автоматичного підбору бітрейту під умови зв'язку див. Adaptive-Link.

Проект спільноти. Не є офіційним ресурсом OpenIPC.