Треки полёта на карте

Обновлено: 2026-08-15 ангар hangar трек track gpx kml ardupilot dataflash карта полёт gps события failsafe режим полёта

Треки полёта

Вкладка «Полёты» на паспорте борта (/hangar/view/<id>) позволяет
загрузить файл GPS-трека и посмотреть маршрут полёта на карте.

Треки — это карта и анализ полёта, не счётчик налёта. «Налёт борта» и
суммарный налёт/дистанция флота на дашборде считаются ТОЛЬКО по одометру
полётного контроллера (кнопка «Синхронизировать налёт» на паспорте борта) —
загрузка трека на эту цифру не влияет никак, ни суммой, ни максимумом. Чтобы
налёт борта рос, синхронизируйте его по USB; трек здесь даёт маршрут на
карте и рекорды (макс. высота/скорость/время одного полёта, «самый летающий
борт») на дашборде.

Что можно загрузить

Формат Расширение Статус
GPX (GPS Exchange) .gpx ✅ разбирается, показывается на карте
KML (Google Earth) .kml ✅ разбирается (LineString и gx:Track)
INAV/Betaflight blackbox .bbl, .bfl, .txt ✅ из лога извлекается GPS-трек
ArduPilot DataFlash .bin ✅ из лога извлекается GPS-трек + события полёта
ArduPilot DataFlash (текст) .log ✅ тот же трек текстовым CSV-дампом («Log → text»)
ArduPilot/MAVLink телеметрия .tlog ⏳ пока не поддерживается (см. ниже)

Формат определяется автоматически — по содержимому файла и расширению.
Из трека берутся координаты (широта/долгота), а если есть — высота, время
точки и скорость. Максимальный размер файла — 512 МБ (реальный blackbox-лог
часового полёта — обычно 80–300 МБ); при превышении платформа честно сообщит
лимит в МБ (файл при этом не грузится в память целиком).

Blackbox-логи полётного контроллера. Файл blackbox (.bbl/.bfl, а
также .txt — так по умолчанию называет лог SD-карта INAV) декодируется на
платформе локально — из него берётся GPS-трек (координаты, высота,
скорость, время). Если полётник писал лог без GPS-модуля (или не было
фикса спутников), точек в логе нет — платформа честно сообщит об этом.
Обрезанный или частично повреждённый лог тоже разберётся: покажется та
часть маршрута, что успела записаться. Если же лог пустой или битый
целиком
(типичная причина — SD-карта не успела дописать данные, например
при обрыве питания) — платформа так и скажет: «лог пустой или повреждён —
запись не удалась», не путая это с неподдерживаемым форматом. Прочая
телеметрия из blackbox (напряжение, ток, RSSI, режимы) пока не извлекается —
см. планы ниже.

ArduPilot — вторая платформа наравне с INAV. Бинарный DataFlash-лог
(.bin, самоописывающийся формат FMT-заголовков) декодируется на платформе
локально, тем же принципом честности, что и blackbox: лог без GPS-модуля/
фикса — понятное сообщение, а не пустой трек; обрезанный лог разберётся
частично (та часть маршрута, что успела записаться). Кроме точек трека, из
лога извлекаются дискретные события полёта (смена режима, ошибки
подсистем, текстовые сообщения прошивки) — они показываются маркерами на
карте/3D-сцене и тиками на шкале реплея (см. «События на треке» ниже).
Текстовый CSV-дамп («Log → text», расширение .log) — тот же трек, но без
событий (секонд-формат). MAVLink-телеметрия (.tlog) распознаётся, но
разбор пока не реализован — сообщение об этом при загрузке явно так и
говорит («пока не поддерживается»), вместо намёка на неизвестный формат;
используйте DataFlash-лог (.bin) с полётного контроллера вместо .tlog.

Как загрузить

  1. Откройте борт → вкладка «Полёты».
  2. Нажмите «Загрузить трек» и выберите файл GPX, KML, blackbox-лог
    (.bbl/.bfl/.txt) или ArduPilot DataFlash-лог (.bin/.log).
  3. После разбора трек появится в списке и сразу отрисуется на карте с
    авто-зумом по границам маршрута: зелёный маркер — старт, красный —
    финиш
    , синяя линия — путь.

Для каждого трека в списке видно: имя файла, формат, число точек, дистанцию,
длительность и дату. Кнопки: «На карте» (показать), «Скачать» (сырой
файл как загружен), «Завести событие» / «🚨 Открыть событие» (см. ниже)
и «Удалить».

Полёт закончился событием? Кнопка «Завести событие» у трека
открывает форму нового события с уже
выбранным бортом и предзаполненным временем происшествия (конец GPS-трека) —
после сохранения событие свяжется с ЭТИМ ЖЕ треком, файл лога не
копируется
(общий track_id на обе карточки). Если трек уже связан с
событием, вместо этой кнопки — прямая ссылка «🚨 Открыть событие».
Обратное тоже работает: загрузка лога прямо из карточки [события]
(../events/events.md) сразу заводит полноценный полёт на этой вкладке
(раздел «Трек полёта и место падения»).

Дата — это время полёта, а не время загрузки файла. Если в логе есть
GPS-время (GPX почти всегда, blackbox — если был фикс спутников), в колонке
«Дата» показывается момент первой GPS-точки трека — то есть когда
реально состоялся полёт, а не когда вы загрузили файл на платформу (это
могут быть разные дни). Наведите курсор на дату — подсказка уточнит,
откуда она взята. Если в логе времени нет (KML часто его не пишет, у
blackbox без фикса спутников времени тоже нет) — колонка честно показывает
момент загрузки, ничего не придумывая.

Реплей полёта

Под картой есть плеер реплёя — можно «проиграть» полёт: маркер-самолётик
(✈️) едет по маршруту, как самолёт двигался по времени.

  • ▶ / ⏸ — воспроизведение и пауза.
  • Ползунок — перемотка в любую точку трека.
  • Скорость, , , (во сколько раз быстрее реального времени).
  • «Следить камерой» — карта едет за маркером (по желанию).

Во время реплёя рядом показываются параметры текущей точки: высота, скорость
и время. Если у точек трека есть метки времени — маркер движется по реальному
времени
полёта (с интерполяцией между точками); если времени в файле нет —
равномерно по точкам.

Тот же плеер работает и в карточке события (если событие привязано к треку)
— можно проиграть полёт, закончившийся крашем.

События на треке (смена режима, ошибки, фейлсейф)

Для треков ArduPilot DataFlash (.bin) на карте, в 3D-сцене и на шкале
реплея появляются маркеры дискретных событий полёта — то, что писал в лог
полётный контроллер отдельно от GPS-точек: смена режима полёта, ошибки
подсистем (EKF, GPS и т.п.) и текстовые сообщения прошивки. Это ключевой
инструмент разбора события: например, флайэвей после потери линка — по
маркерам видно, в какой момент маршрута сработал фейлсейф и что борт делал
после
.

  • Цвет — по важности события, не по акценту темы: обычная смена режима —
    нейтральный серо-голубой; предупреждение — жёлтый; ошибка/фейлсейф —
    красный. Три уровня видно сразу, не вчитываясь в подписи.
  • На шкале реплея (и 2D, и 3D) — маленькие цветные точки-тики поверх
    ползунка позиции, на своём моменте трека.
  • На карте/3D-сцене — маркер стоит НА маршруте в точке, где событие
    произошло (интерполяция по времени, как и у движущегося маркера-самолётика).
  • Клик по маркеру или тику — реплей ставится на паузу и перематывается
    ровно к этому моменту.

Треки без событий (GPX, KML, INAV/Betaflight blackbox, а также ArduPilot
.log-текстовый дамп) показываются как обычно — просто без маркеров и тиков,
без какой-либо заглушки на месте отсутствующих данных.

3D-просмотр трека

Над картой — переключатель «🗺️ 2D map» / «🧊 3D scene»: тот же трек можно
посмотреть как объёмную сцену (как в ArduPilot Mission Planner), а не только
плоскую линию на карте.

  • Трек рисуется 3D-ломаной: широта/долгота превращаются в горизонтальную
    плоскость (метры от центра трека), высота — в вертикальную ось. На длинных
    маршрутах с небольшим набором высоты в реальных пропорциях (метр высоты =
    метр по горизонтали) трек выглядит почти плоским, поэтому по умолчанию
    высота преувеличена автоматически — коэффициент подбирается по аспекту
    трека (горизонтальный размах / перепад высот), чтобы профиль полёта было
    видно сразу. Ползунок «Vertical exaggeration» рядом позволяет подкрутить
    преувеличение вручную (×1…×10) — текущий коэффициент всегда подписан
    числом, чтобы было видно, что высота преувеличена (это не настоящий рельеф);
    ×1 — реальные пропорции.
  • Высота сцены — заметно выше плоской 2D-карты (на широком экране), чтобы
    объёмный трек не превращался в сжатую полосу.
  • Цвет линии — градиент по высоте или скорости (переключатель «Color
    by»
    ), рядом легенда с мин/макс значением. Тёмный конец шкалы — низкое
    значение, светлый — высокое.
  • Камера — орбита (зажать и тянуть), пан (правая кнопка), зум (колесо
    мыши) — стандартное управление 3D-вьюером, как у конструктора крыла.
  • Реплей — тот же принцип, что у 2D (play/pause, ползунок, скорость
    1×/2×/4×/8×, «следить камерой»): маркер едет по 3D-треку, вертикальная
    линия-«флагшток» до сетки пола показывает высоту наглядно, рядом — текущая
    высота/AGL/скорость/время (AGL — см. ниже).
  • Земля — настоящий рельеф местности (карта высот): под треком строится
    меш по данным о высоте участка, где летали, а не условная плоскость. Это
    особенно важно для полётов в горах — видно, где земля поднимается навстречу
    треку, а где остаётся запас высоты. Если данные о рельефе получить не
    удалось (нет сети до сервиса высот, площадка вне покрытия) — платформа
    честно об этом сообщает и показывает прежнюю сетку-плоскость вместо того,
    чтобы выдумывать несуществующий рельеф.

    Высоты тянет и кеширует сама платформа (не браузер) — сторонний сервис
    карт высот не получает никаких данных о вашем треке напрямую, и повторный
    показ того же места (аэродрома) не требует нового обращения наружу.
    Источник — открытые данные о рельефе (без API-ключа и платы). Спутниковый
    снимок поверх рельефа — в планах (см. ниже), сама геометрия земли уже
    здесь.

  • AGL (высота над землёй) — раз рельеф известен, реплей может показывать
    не только высоту над уровнем моря, но и реальный запас до земли ИМЕННО под
    бортом в этой точке маршрута — появляется в реплее автоматически, когда для
    места есть данные о рельефе.

3D-сцена (Three.js) грузится, только если у борта есть хотя бы один трек —
на пустой вкладке лишние ~600 КБ библиотеки не подгружаются.

Приватность

Треки приватны — их видит только владелец борта, как и остальные данные
борта (конфигурации, расходы, события). Чужой трек недоступен. При удалении
борта все его треки (и сырые файлы) удаляются вместе с ним; если удалённый
трек (единичное удаление или удаление всего борта) был связан с событием —
связь честно отвязывается (трек и место падения пропадают из карточки
события), само событие не удаляется и не портится.

Карта и внешние тайлы. Сама библиотека карты (Leaflet) и её стили
хостятся локально на платформе. А вот тайлы карты (картинки местности)
подгружаются с внешнего CDN — это внешний вызов: при открытии карты трека
браузер обращается к basemaps.cartocdn.com. Сами координаты вашего трека
при этом наружу не отправляются (уходит лишь запрос на квадраты карты нужного
региона), но факт обращения к внешнему сервису стоит иметь в виду.

Платформа работает в тёмной теме, поэтому карта использует тёмный
баземап CARTO «Dark Matter»
(dark_all) — это
нормальная тёмная карта, а не инверсия светлой (раньше светлые тайлы
OpenStreetMap инвертировались фильтром и выглядели «негативом»). Тайлы —
рендер данных OpenStreetMap; подпись на
карте: «© OpenStreetMap, © CARTO».

Лицензия. Тайлы CARTO берутся с публичного CDN без API-ключа; базовые
стили CARTO бесплатны для некоммерческого использования (для коммерческого
нужна лицензия CARTO Enterprise — учесть при монетизации платформы). Провайдер
легко заменить: URL тайлов задан в flight_tracks.js и incident_track_map.js,
хост — в CSP img-src (web/app.py).

Рельеф под 3D-треком — иначе, чем 2D-тайлы выше: браузер НЕ обращается
к стороннему сервису напрямую (координаты трека наружу из браузера не
уходят вовсе) — данные о высоте местности запрашивает и кеширует сама
платформа, а фронту отдаёт уже готовую сетку. Источник — AWS Terrain
Tiles
(открытые данные о
рельефе: SRTM/NED/GMTED2010 от USGS, ETOPO1 от NOAA — все общественное
достояние), без API-ключа и платы. Кеш — по участку местности (не по
пользователю): повторный показ того же аэродрома у любого пилота платформы
не требует нового обращения наружу.

Что дальше (планы)

  • спутниковый снимок поверх рельефа под 3D-треком (геометрия земли уже есть,
    см. выше — текстура сверху — отдельный шаг);
  • графики высоты/скорости вдоль трека с курсором, синхронным с реплеем;
  • привязка события к точке на треке («здесь разбился»);
  • телеметрия из blackbox (напряжение, RSSI, режимы) и сравнение нескольких
    полётов;
  • разбор MAVLink-телеметрии (.tlog) — не входит в текущий парсер, отдельный
    тикет (см. блок про ArduPilot выше);
  • инструмент подключения/настройки ArduPilot по MAVLink (аналог /tools/ inav-connect) — отдельная будущая тема, ArduPilot-парсер логов её не
    включает.