Hammerill Light Logo

libfpv - FPV дрон в любой игре

23 октября 2026 г.

⚠️ То, что вы читаете, — перевод, сделанный ИИ. Изначально статья написана на английском, оригинал можно прочитать здесь.

Ну что ж, всем привет, давно я не работал над по-настоящему интересным проектом. Рад видеть вас здесь — похоже, вам действительно хочется узнать, как была создана libfpv.

Спойлер: вы можете разочароваться.

Прежде всего мне нужно показать, на что способна libfpv. Ты, да-да, ты, давай, поиграй в Mario 64 прямо здесь: загрузи игру (пробел, пробел), дождись появления Марио и нажми F, чтобы заспавнить дрон:

Если хотите поиграть на весь экран, переходите по этой ссылке: https://sm64ex-fpv.hammerill.com

Я также уже показывал проект на Reddit, вот самый первый пост с Super Mario 64:

А вот следующий, с Grand Theft Auto IV:

И наконец, моё полное прохождение SM64, сыгранное почти исключительно на квадрике:

Всё началось с того, что я заинтересовался FPV-симуляторами в целом. Сначала специализированными симуляторами вроде Liftoff и прочих, потом FPV-модами для больших игр вроде GTA V. Не буду рассказывать, почему меня всё это вообще заинтересовало, там было много эмоций... Просто пропущу это.

Короче, играть в GTA V с FPV-модом было отлично, это как заново открыть для себя игру с совершенно другого ракурса. А ещё это чувство свободы: классические FPV-симуляторы заставляют вас оставаться в пределах карты, а с этим модом я мог облететь всю карту GTA V, со всеми её зданиями, природой и всем остальным.

Это был потрясающий опыт, и он подтолкнул меня купить настоящий FPV-дрон в реальной жизни. Сегодня можно купить самые крошечные тинивупы, вот я и взял себе Air65 II. Позже хочу спаять свою пятидюймовку, но до этого я пока не дошёл (к тому же паяю я отвратительно).

Полёты на этом малыше заставили меня понять одну вещь: играя с FPV-модом, я полностью пропустил обучение «арму» дрона. Я просто отключил его в настройках и больше о нём не вспоминал. А ведь с настоящим дроном это делают постоянно, и я провёл несколько минут с уже забинженным квадом, не в силах взлететь, потому что просто не знал, что квад нужно армить и как это вообще делается... Пишу это и чувствую себя глупо, но я правда был в такой ситуации.

Это было первое, что заставило меня осознать: мод, в который я играл, упускает вещи, которые происходят в реальной жизни, а значит, наверняка не симулирует и много чего ещё.

Тогда же я начал настраивать OSD своего дрона: уровень батареи здесь, уровень сигнала там, имя пилота HAMMERILL в самом низу... А ещё возможность скрыть всё это тумблером отключения OSD на пульте, потому что мне не особо нужно видеть его 100% времени.

Кстати, о тумблерах. В самом начале каждый раз, когда мой вуп падал вверх ногами, мне приходилось снимать очки и идти переворачивать его руками. Потом я увидел, как какой-то чувак в интернете делает нечто волшебное: CRASH FLIP — и дрон переворачивается сам. Так я узнал, что это реальная функция под названием turtle mode. И снова это то, чему симулятор меня не научил.

Включение turtle mode — штука довольно техническая: если в симуляторе просто жмёшь «перевернуть», и всё, дрон снова летит, то в реальной жизни нужно дизармить, включить тумблер crash flip, армить с ним (убедившись, что газ на 0%), толкнуть стик в сторону переворота, дизармить, выключить тот же тумблер, армить (снова убедившись, что газ на 0%) и взлетать. До сих пор мне не попадался ни один FPV-симулятор, который заставлял бы тебя проходить всю эту процедуру, чтобы ты привык к ней ещё до того, как полетаешь на настоящем дроне.

...

После всего этого мне захотелось ещё и снимать на FPV-дрон в BeamNG.drive, а именно — делать это в записи сцены, чтобы потом снять со стороны, как я дрифтую. Я скачал мод с FPV-дроном и... не понял, как его заспавнить. Только позже до меня дошло, что квад — это новое «транспортное средство», так я его и заспавнил. Настроил пульт, но не нашёл никаких опций для настройки рейтов. Наконец взлетел и... Физика была ужасной, она работала совсем не так, как в других симуляторах, и совсем не так, как летает мой вуп. Это было ужасно: дрон не слушался, не держал направление (вообще-то в реальной жизни PID как раз и нужен, чтобы дрон был отзывчивым) и всё в таком духе.

Я даже не пытался заспавнить его в записи сцены — я бы просто не понял, как поместить туда FPV-«транспорт», чтобы полетать вокруг сцены (мод без документации), да и с такой физикой мне это было попросту неинтересно.

Всё это заставило меня понять, что у «FPV-модов» в целом есть две проблемы, которые для меня важны. Вот они:

  1. Каждый мод нужно делать с нуля для каждой игры. «С нуля» значит, что нужно потратить время, подогнать физику, создать/прикрепить объект дрона к игровому миру, реализовать OSD/рейты/тюнинг... Работы огромное количество, и всё это приходится переделывать снова и снова для КАЖДОЙ игры, в которой хочется FPV-мод.
  2. Как прямое следствие пункта 1, для конкретной игры вам могут попасться FPV-моды с плохой физикой, плохой интеграцией с игровыми режимами (например, непонятно, как заспавнить квад в записи сцены в BeamNG), плохими или отсутствующими OSD/рейтами/тюнингом... И ни один FPV-мод не пытается быть максимально реалистичным, так что вы не сможете, например, наработать мышечную память для переворота в turtle mode, играя в него.

TLDR: моддерам всегда приходится делать весь FPV-мод с нуля, и он не будет настолько реалистичным, насколько мог бы.

Однажды мне просто пришла в голову забавная мысль: «Вот бы поиграть в FPV-симулятор, где квад работает просто... на Betaflight, как настоящий дрон, который буквально летает по виртуальному миру, и чтобы я мог настраивать его через Configurator и всё такое».

Тогда я ещё не знал, что после недолгих поисков наткнусь на pr0p — FPV-симулятор, который делает РОВНО это.

Более того, эта игра работает на опенсорсном движке SimITL, именно он реализует весь квад с Betaflight на борту. И физика у него хорошая, ведь он эмулирует настоящее поведение PID настоящего квада (и всё, что делает полётный контроллер), так что можно почувствовать, например, настоящий prop wash.

Когда я увидел всё это несколько месяцев назад, меня это очень вдохновило, но тогда я ничего с этим не сделал.

...

Вы видели огромную волну людей, которые моддят игры с помощью ИИ? Я — да, ещё как.

Всё это напомнило мне о том, что люди делали несколько лет назад с декомпиляцией Super Mario 64, я говорю о libsm64. Если вы не знаете, что это, — это штука, которая позволяет внедрить играбельного Марио из этой игры в абсолютно любую другую игру.

Теперь сложите эти два факта: есть FPV-сообщество, которое хочет моддить игры, добавляя в них FPV-дроны, но для каждой игры это нужно делать с нуля; и есть libsm64, которая позволяет играть за Марио с ТОЧНО ТАКОЙ ЖЕ физикой, анимациями, управлением и поведением, как в оригинальной игре, во всех возможных играх.

Никто ведь не разрабатывает Марио с нуля каждый раз, когда делает мод с libsm64, правда?

Так зачем каждый раз разрабатывать FPV-дрон?

Я знал, что нужно делать. Я должен был создать libfpv — духовную наследницу libsm64, которая встраивает FPV-дроны в игры так же, как libsm64 делает это с Марио.

Я знал, что вручную буду делать всё слишком медленно, поэтому отдал ИИ всю техническую часть (грустно это говорить, учитывая, что несколько лет назад я писал проекты на C/C++ руками и отвергал ИИ — так было и с разработкой этого сайта, на котором вы читаете эту статью, и со сборкой ядра Linux с драйверами HDMI CEC для моей работы, где я возился с битами смещений, чтобы драйвер мог получить доступ к периферии, прописывал это в device tree, чтобы ядро это запомнило, и где ИИ был бесполезен, потому что просто ничего не знал/не понимал... Но сегодня мне приходится пересмотреть свою позицию и начать пользоваться им всерьёз). Просто вот что такое сегодня «software dev».

ИИ использовался даже на этапе технического проектирования. Я объяснил идею Claude, сказал, что хочу, чтобы libfpv была основана на SimITL, попросил его задать мне уточняющие технические вопросы (например, где будет крутиться логика Betaflight и кто будет считать физику дрона — игра или libfpv) и выдать мне промпт с полной спецификацией, чтобы передать его Claude Code для инициализации проекта libfpv.

Claude Code (Opus 5.5) начал собирать проект с модулями вроде SimITL, самого Betaflight, Dear ImGui... Потом скомпилировал автономный пример, который немного напоминал pr0p, только с графикой похуже и дерьмовой картой. Но этого мне хватило, чтобы понять, что у этой штуки есть потенциал.

Я даже не говорил ему, что должно быть в меню ImGui, — он сам понял, что оно будет нужно для настройки пульта и даже самого дрона, как будто Betaflight Configurator недоступен (хотя он был доступен благодаря SimITL; но вот в браузерных версиях — нет).

Ещё на ранних этапах разработки я сделал libfpv совместимой с любой ОС: Windows, Linux, macOS. Вероятно, даже с консолями, но пока не официально (у меня есть PS Vita, так что дайте знать, если хотите, чтобы я что-нибудь с ней сделал).

Я также поработал над доводкой интеграции Betaflight. SimITL это делал, но не реализовывал некоторые вещи вроде GPS-элементов на OSD и рабочего turtle mode, а также обработки тумблеров отключения OSD / airmode... Теперь я могу сделать собственный идеально «реалистичный» FPV-симулятор, который можно встроить куда угодно!

После двух часов работы Claude, когда первая версия libfpv была готова, я попросил его попробовать интегрировать libfpv в Super Mario 64. Забавно, ведь сам проект родился из идеи libsm64. В конце концов, это игра моего детства.

Я заставил его работать над форком sm64ex, чтобы первая интеграция была не внедрена в игру, а встроена прямо в её исходный код.

Я дал Claude поработать... 30 минут. За 30 минут он смог выдать уже протестированный MVP.

Он сделал так, чтобы дрон взаимодействовал с окружением, с рабочими коллизиями и всем остальным, что касается связки sm64ex <-> libfpv.

Результат был настолько хорош, что я просто обязан был запостить это на Reddit. Потом я пошёл спать. Было поздно. Утром мне нужно было заниматься математикой.

Увидев, что людям идея очень понравилась, уже на следующий вечер я захотел протестировать настоящее внедрение в игру, в большую игру. Из всех интересных игр я выбрал GTA IV. Не GTA V, потому что существующий FPV-мод для неё хорош, и не GTA San Andreas, которую я очень хотел, потому что она у меня просто не была установлена.

Я снова дал Claude поработать, но на этот раз было сложнее: сначала нужно подготовить инструменты для моддинга, а после часа ожидания получаешь первую версию с кучей багов. Я её дебажу, заставляю своего агента всё исправлять... В итоге за 3 часа у меня была ещё одна рабочая интеграция libfpv. Так что я должен был запостить на Reddit и её!

Если я потратил 3 мучительных часа на дебаг, можно ли это всё ещё называть вайб-кодингом? 🤔

Согласно Википедии — да, учитывая, что я только тестировал полученный код и направлял ИИ, чтобы тот его исправлял, не вычитывая его целиком. Какой позор 🙈

После GTA IV я наконец понял, что у libfpv есть будущее и что я должен убедиться, что это именно то будущее, которое нам нужно. Вместо того чтобы пробовать другие игры, я начал улучшать само ядро libfpv и переделывать физику, потому что получил на этот счёт отзывы. Всё для того, чтобы libfpv (и её интеграция в SM64) ощущалась менее «плавающей» и менее вялой.

Интеграции, которые я хочу сделать позже, — это, конечно, GTA San Andreas и BeamNG.drive, игры, о которых я уже упоминал. Будут и другие, я уверен.

А ещё вместе с libfpv готовится другой секретный проект, вот увидите 😉