FPV Rust

Заметки о FPV-дронах, электронике и программировании на Rust

Betaflight vs INAV: что выбрать для дальних полётов

8 февраля 2026 · 5 мин чтения · FPV прошивки

После года экспериментов с обеими прошивками могу поделиться впечатлениями. Если коротко: для фристайла и гонок — Betaflight, для дальних автономных полётов — однозначно INAV.

Betaflight отлично оптимизирован для ручного управления. Его PID-контроллер работает на частотах до 8 кГц, что даёт невероятную отзывчивость стиков. Но как только вам нужен GPS-return-to-home или waypoint-навигация, Betaflight сдаёт позиции.

INAV, напротив, изначально проектировался для навигации. Поддержка GPS, барометра, компаса — всё из коробки. Mission Planner позволяет задавать маршруты с точностью до метра.

Rust на STM32: первые шаги с Embassy

2 февраля 2026 · 8 мин чтения · Rust embedded

Наконец-то добрался до Embassy — асинхронного фреймворка для embedded Rust. Это буквально async/await для микроконтроллеров, и это работает удивительно хорошо.

Для теста взял плату с STM32F411 (та же серия, что в полётных контроллерах). Embassy позволяет писать многозадачный код без RTOS — всё на корутинах Rust.

Пример — чтение данных с IMU (гироскоп + акселерометр) через SPI, одновременно обрабатывая UART-команды от приёмника:

#[embassy_executor::task] async fn read_imu(spi: Spi) { ... }

Compiler гарантирует отсутствие data races на этапе компиляции. После C в embedded это ощущается как переход из каменного века. Нет больше забытых volatile, нет проблем с порядком инициализации периферии.

Сборка 5" фристайл квадрокоптера: бюджет 2026

25 января 2026 · 6 мин чтения · FPV сборка

Собрал новый фристайл-квад на актуальных компонентах. Цель — оптимальное соотношение цены и качества. Вот что получилось:

Общий вес без батареи: 320 грамм. С батареей 6S 1100mAh — около 520 грамм. Тяговооружённость больше 8:1, что даёт запас для любых манёвров.

no_std в Rust: зачем и как

18 января 2026 · 4 мин чтения · Rust embedded

Многие, начиная изучать Rust для embedded, спотыкаются о #![no_std]. Объясню простыми словами: стандартная библиотека Rust (std) зависит от ОС — ей нужны потоки, файловая система, сеть. На голом микроконтроллере этого нет.

no_std означает, что вы используете только core — подмножество стандартной библиотеки, которое работает без ОС. Базовые типы, итераторы, Option, Result — всё доступно. Нет только того, что требует аллокатора или ОС.

Если нужна динамическая память (Vec, String, HashMap), подключаете alloc крейт и реализуете глобальный аллокатор. Для STM32 хорошо работает embedded-alloc.