Модуль связи Clover Swarm ESP-NOW
Комплексная система коммуникации для роя дронов на базе протокола ESP-NOW
Обзор системы
Модуль обеспечивает взаимодействие дронов в рое через ESP-NOW протокол. Это готовый "язык общения" для группы квадрокоптеров, чтобы они могли летать вместе, как стая птиц, и не сталкиваться.
Рой дронов — это группа из нескольких дронов, которые летают вместе, общаются между собой и выполняют одну задачу согласованно, как одно целое. Каждый дрон оборудован модулем ESP32, который отвечает за беспроводную передачу пакетов между дронами, в то время как Raspberry Pi управляет полетом и логикой миссии.
Основные возможности системы
- Широковещательная передача телеметрии (данные о состоянии дрона: его координаты, высота, скорость, заряд батареи и т.д) в реальном времени
- Отправка пользовательских сообщений между дронами ( например, "собраться в круг")
- Алгоритмы предотвращения столкновений
- Скоординированное роевое взаимодействие
- Автоматическое обнаружение дронов в сети
Архитектура системы

Схема передачи данных
- Главный компьютер (Raspberry Pi 1) решает, что нужно передать другим дронам. Он отправляет команду ESP32 #1 через проводное соединение UART (очень простой и быстрый кабель для передачи данных).
- ESP32 #1 берет эту команду и транслирует ее по протоколу ESP-NOW всем другим модулям ESP32 поблизости.
- Другие ESP32, получив сообщение, передают его по проводу UART уже своим главным компьютерам (Raspberry Pi #N). Так команда доходит до другого дрона.
Структура проекта
clover-swarm-espnow/ ├── esp/ # прошивка ESP32 │ ├── src/ # исходный код │ │ ├── main.cpp # основная точка входа в прошивку │ │ ├── ESPNowManager.cpp # управление коммуникацией ESP-NOW │ │ ├── ConfigManager.cpp # управление конфигурацией │ │ ├── PacketDeserializer.cpp # утилиты парсинга пакетов │ │ ├── Statistics.cpp # статистика сети │ │ └── telemetry_generator.cpp # Генерация данных телеметрии │ ├── data/ # файлы конфигурации │ │ ├── config.json # основная конфигурация │ │ └── espnow_config.json # специальные настройки ESP-NOW │ ├── platformio.ini # конфигурация сборки PlatformIO │ └── test/ # тесты прошивки ├── skyros/ # библиотека Python для Raspberry Pi │ ├── src/skyros/ # основной исходник библиотеки │ │ ├── drone.py # основной интерфейс дрона │ │ ├── collision_avoidance/ # алгоритмы предотвращения столкновений │ │ └── drone_data.py # структуры данных │ ├── examples/ # примеры использования │ │ ├── example.py # базовый пример использования │ │ ├── complex_example.py # продвинутая координация роя │ │ └── example_stress_usage.py # стресс-тесты │ └── test/ # тесты Python библиотеки │ ├── stationary.py # стационарные испытания дронов │ ├── stress.py # стресс-тест сети │ └── network_performance_test.py # тесты производительности └── esp_controller/ # Прошивка контроллера ESP32 для OTA
Инструкции по настройке
Прошивка ESP32
Примечание: Данная инструкция предназначена для разработки и обновления прошивки. На предварительно настроенных дронах прошивка ESP32 уже должна быть установлена.
Убедитесь, что дроны выключены перед началом работ
Подключение оборудования Подключите Raspberry Pi UART4 к ESP32C3 super mini UART1:
- TX (RPi GPIO8) → RXD (ESP GPIO3/D3)
- RX (RPi GPIO9) → TXD (ESP GPIO4/D4)
- CTS (RPi GPIO10) → RTS (ESP GPIO5/D5)
- RTS (RPi GPIO11) → CTS (ESP32 GPIO6/D6)
- VCC (RPi 5V) → VCC (ESP32 5V)
- GND (RPi GND) → GND (ESP32 GND)
Сборка и загрузка прошивки
Загрузка предварительно собранного бинарного файла
Инструмент для прошивки esptool:
pip install esptoolESP32 к компьютеру по USB
- Определите порт:
- Linux: /dev/ttyACM0, /dev/ttyUSB0
- Windows: COM3, COM4
- macOS: /dev/tty.usbserial-*
Прошивка ESP32C3 Super Mini
Сотрите флэш-память:
esptool.py --chip esp32c3 --port /dev/ttyACM* erase_flashЗагрузите прошивку (включая загрузчик и таблицу разделов)
esptool.py --chip esp32c3 --port /dev/ttyACM0 --baud 921600 \ --before default_reset --after hard_reset write_flash \ 0x0 firmware_esp32c3_super_mini_prod_merged.binПервый запуск (важно!)
При первой прошивке ESP32-C3 может потребоваться до 30 секунд для инициализации файловой системы SPIFFS. Это нормальное поведение — не отключайте питание и не прерывайте процесс.
Настройка Raspberry Pi
Включение UART на Raspberry Pi
Отредактируйте файл:
/boot/config.txt:В терминале выполните
sudo nano /boot/config.txt
Найдите (или добавьте в конец) следующие строки:
[all] dtoverlay=pi3-disable-bt dtoverlay=uart0,ctsrts dtoverlay=uart4,ctsrts enable_uart=1
Отключите Bluetooth используя следующие команды:
sudo systemctl disable hciuart sudo systemctl disable bluetooth
Raspberry Pi командой:
reboot
Установка Python-библиотеки
cd skyros/ pip install -e
Развертывание на нескольких дронах Для одновременного развертывания кода на несколько дронов используйте Ansible Deployment Guide (инструкции по автоматизированному развертыванию).
Примеры использования
Директория skyros/examples/ содержит примеры для различных сценариев:
Базовое использование (
example.py)- Инициализация дрона;
- Основные команды управления полетом;
- Обнаружение дронов в сети;
- Мониторинг статуса;
Базовая навигация с предотвращением столкновений

cd skyros/ python …
Координация роя (
complex_example.py)- Мастер-слейв координация дронов;
- Обработка пользовательских сообщений для скоординированного ;
- Индивидуальный таргетинг и контроль дронов
Стресс-тестирование (
example_stress_usage.py) Проверка производительности сети под нагрузкой- Сценарии координации нескольких дронов;
- Мониторинг телеметрии;
- Отслеживание сетевого статуса;
- Полезно только для отладки и проверки производительности сети.
Ключевые функции:
- Обнаружение дронов: автоматическое обнаружение других дронов с помощью телеметрии
- Предотвращение столкновений: встроенные алгоритмы для безопасного полета роя
- Пользовательские сообщения: широковещательная и целевая передача
- Мониторинг сети: отслеживание состояния и производительности в режиме реального времени
- Скоординированный полет: синхронный взлет, навигация и посадка
Продвинутое тестирование
Стационарное тестирование (skyros/test/stationary.py)
Используйте для диагностики сетевых проблем:
- Подготовка:
- Разместите дроны на маркерах ArUco
- Обеспечьте контролируемые условия
- Мониторинг: Тест предоставляет информацию в режиме реального времени о:
- Состоянии сетевого подключения
- Обнаруженных позициях дронов и расстояниях до них
- Расчетах векторов предотвращения столкновений
- Приеме телеметрических пакетов
- Показатели успешности передачи сообщений
Запуск:
cd skyros/test/ python3 stationary.pyЧто показывает тест:
- Измерение расстояний между дронами
- Координаты местоположения всех обнаруженных дронов
- Сетевая задержка и статистика пакетов
- Данные телеметрии в реальном времени
- Дополнительные тесты:
network_performance_test.py— проверка пропускной способностиstress.py— тестирование под высокой нагрузкойesp_simple_test.py— проверка функциональности ESP32