14.09.2026

SQVL-MESH

Полевая координация Мобильные системы Геопространственные системы

Индивидуальная навигация и командная координация на одной карте в реальном времени

SQVL-MESH начался с одной GPS-точки на телефоне. В версии 0.12.11 это client-server alpha для полевой координации с приложениями Android и iOS, постоянным локальным состоянием, нативными картографическими модулями, собственным сетевым протоколом и изолированными командными комнатами.

Система дает группе одну операционную карту для позиций, ролей, жизненного состояния, тактических символов, локальных планов местности и управления видимостью между командами. Интернет выбран основным транспортом как наиболее доступный в текущих условиях. Meshtastic и LoRa остаются будущим резервным каналом для компактных критических данных при отсутствии интернета.

Единая операционная картина

Полевая координация обычно зависит от нескольких несвязанных инструментов: голосовой рации, телефона с GPS, нестабильного мобильного интернета, отдельных трекеров и локальных или бумажных карт. Каждый инструмент хранит часть обстановки, но ни один не поддерживает полное актуальное состояние группы.

SQVL-MESH объединяет основное состояние координации в одной мобильной системе:

  • актуальные и устаревшие позиции участников;
  • постоянную идентичность, роль и жизненное состояние;
  • координаты MGRS, азимут, расстояние и ETA;
  • генерируемые тактические символы;
  • приватные KMZ-карты, обрабатываемые на устройстве;
  • фоновую синхронизацию на Android и iOS;
  • публичные и приватные командные комнаты на Android;
  • транспортную границу для будущего mesh-канала.

Продукт строится вокруг непрерывности. Полезная операционная картина должна переживать блокировку экрана, обрыв сети, задержанные пакеты, перезапуск приложения, различия платформ и смену транспорта.

От GPS-прототипа к community candidate

Первая сборка только открывала карту и показывала позицию телефона. Следующий вертикальный срез связал два устройства через WebSocket relay. Локальное SQLite-хранилище сделало принятое состояние долговечным, а типизированные контракты и правила ревизий не позволили дубликатам и задержанным пакетам заменить более новые данные.

Проект развивался внутри той же архитектуры: профили участников, фоновый GPS, поддержка iOS, восстановление соединения, MGRS-навигация, таймеры состояний, Tactical Symbol Engine, локальный импорт KMZ, компас с истинным азимутом, сохранение камеры и, наконец, protocol v3 с изолированными командными комнатами.

Это изменило категорию продукта. SQVL-MESH больше не является демонстрацией GPS-трекинга. Он становится платформой для участников, геоданных и управляемой видимости между командами.

Карта, которая сохраняет состояние

У позиционирования есть три явных режима: Off, While open и Background. Пользователь может прекратить публикацию своей позиции, продолжая получать состояние команды. В фоновом режиме координаты обновляются, когда приложение скрыто или экран заблокирован.

Карта учитывает возраст координаты и не делает повторно полученный пакет свежим. Она восстанавливает центр, масштаб, наклон и поворот после перезапуска, поддерживает обзор группы, возврат к своей позиции, центральный прицел, копирование MGRS, расстояние, истинный азимут и ETA на основе скорости.

Профиль участника отделяет медленно меняющуюся идентичность от частых событий позиции. Изменение роли или состояния имеет собственную ревизию и временную метку. Другие устройства вычисляют длительность WOUNDED, DEAD и STALE локально, поэтому сеть не передает новый таймер каждую секунду.

Компас использует нативные данные платформы: rotation-vector sensor с поправкой магнитного склонения на Android и Core Location true heading на iOS. Он физически принят на Android и исправном iPhone 15. Проблема старого iPhone 12 изолирована как неисправность устройства или системного сервиса, поскольку встроенный Apple Compass на нем также не менял направление.

Тактические данные остаются семантическими

Tactical Symbol Engine генерирует детерминированные SVG-символы из ограниченных семантических параметров: принадлежности, набора символов, статуса и роли. Один рендерер используется в маркерах участников, настройках профиля, предпросмотрах и Symbol Configurator.

Изображения, произвольные SVG и XML не передаются по сети. Клиенты обмениваются компактными идентификаторами и локально собирают одинаковое изображение. Каталог символов может развиваться без жесткой связи с профилями, пакетами и транспортом.

KMZ-слои следуют той же границе приватности. Выбранный файл проверяется, извлекается, преобразуется в локальную Web Mercator XYZ-пирамиду из 512-пиксельных тайлов, регистрируется в SQLite и отображается через MapLibre. Исходные файлы, координаты, имена и созданные тайлы не покидают устройство.

Каталог поддерживает до 24 локальных слоев с прогрессом, восстановлением, видимостью, порядком, переходом к границам и удалением. Kotlin- и Swift-модули обрабатывают растры, не передавая большие изображения через React Native bridge.

Team Lobby и protocol v3

Главное обновление последних версий связано с серверно авторизованным разделением команд. Android-клиент поддерживает четыре состояния доступа:

  • No room для локального использования без команды;
  • Public для общей публичной комнаты;
  • приватные команды с паролем;
  • защищенный read-only наблюдатель Admin.

Участники получают только профили и позиции, разрешенные их комнатой. Создатель может переименовать команду, сменить пароль, удалить участника или полностью удалить комнату. Пароли не сохраняются на телефоне. После аутентификации сервер выдает отзываемую непрозрачную сессию, которая хранится в защищенном хранилище устройства.

Выход или смена комнаты создают новую generation boundary. Старые профили, позиции и маркеры очищаются до активации новой комнаты, поэтому состояние одной команды не может попасть в другую.

Admin объединяет Public и приватные команды на одной карте, но не публикует собственную позицию, не меняет комнаты и не использует действия создателя. В этом режиме маркеры показывают команду-источник.

Protocol v3 работает на отдельном review relay. Текущий публичный маршрут protocol v2 не изменен, поэтому тестирование комнат не дестабилизирует прежний рабочий контур. Team Lobby физически принят на Android; iOS-клиент пока использует предыдущую модель членства.

Архитектура с явной ответственностью

SQVL-MESH организован как TypeScript monorepo с общим React Native-приложением, сервером Fastify и WebSocket, типизированными контрактами и нативными Kotlin- и Swift-пакетами для KMZ и определения направления.

Мобильная архитектура разделяет владельцев состояния:

  • Position отвечает за разрешения, GPS, фоновые процессы и восстановление.
  • Membership отвечает за комнаты, сессии и текущую область доступа.
  • Local State отвечает за SQLite, историю событий, проекции и настройки.
  • Participants объединяет идентичность, профиль, состояние и принятую позицию.
  • Map отображает подготовленное состояние и управляет камерой.
  • Communication координирует пакеты и транспорт.
  • Relay владеет авторизацией, маршрутизацией и серверными полномочиями.

Protocol v3 добавляет постоянные комнаты и членство, роли member, creator и observer, отзываемые сессии, ограниченные snapshots, идемпотентные операции, лимит пакета 16 КиБ, rate limiting, backpressure, изоляцию по комнате и поколению состояния, восстановление после перезапуска и fail-closed поведение хранилища.

Relay работает в изолированном Docker-контейнере через Cloudflare Tunnel. Релизы используют неизменяемые директории, атомарное продвижение, сохраненную предыдущую версию и rollback. Тестовая граница подтверждает 128 одновременных соединений и безопасное отклонение 129-го; длительная нагрузка на этой границе еще требует проверки.

Доказательства до заявлений

Текущий автоматический контур содержит 483 успешно пройденные проверки мобильного приложения, сервера и общих контрактов. Принятый Android-кандидат остаётся версией 0.12.10 (53), а 0.12.11 фиксирует завершённую физическую приёмку и финализацию истории проекта, не выдавая её за новый устанавливаемый артефакт.

Физические проверки охватывают Pixel, Sony, iPhone 12, iPhone 15, позиционирование при заблокированном экране, потерю сети и переподключение, публичные и приватные комнаты, Admin-наблюдение, удаление участника и комнаты, а также сценарии изоляции на двух и трех устройствах. Карта и фоновое позиционирование также прошли недельную полевую эксплуатацию с Android/iOS-контрольными точками примерно через каждые 100 метров.

Два Wio Tracker L1 Pro были протестированы отдельно. Двусторонние сообщения прошли примерно на 400 метрах и на 550 метрах, когда оба участника находились на возвышенностях. Связь не прошла примерно на 600 и 630 метрах при перекрытии рельефом. Эти результаты показывают зависимость LoRa от высоты и препятствий, но не являются обещанием рабочего радиуса.

Текущая граница

SQVL-MESH находится на стадии рабочей alpha и Android community-test candidate. Физически приняты общая карта, фоновый GPS, профили, жизненные состояния, символы, MGRS, компас, локальные KMZ-слои, сохранение камеры, Android Team Lobby, изоляция комнат, восстановление сессий и review relay protocol v3.

Это еще не production-система. Team Lobby отсутствует на iOS, protocol V3 не заменил публичный relay, а pre-public adversarial security review, длительный тест 128 клиентов и контролируемый multi-team pilot остаются открытыми. Среди ограничений карт остаются давление памяти на iOS при больших KMZ, неполная нативная отмена, порядок составных слоев, поддержка JPEG и повернутых GroundOverlay, а также отсутствие полной офлайн-подложки.

Meshtastic BLE не интегрирован. Текущие радиотесты подтверждают только аппаратную гипотезу, но не доставку событий приложения через mesh.

Следующий переход

Ближайший шаг — pre-public adversarial security review, затем ограниченное Android-тестирование с сообществом и исправление блокирующих полевых проблем. Следующая инженерная последовательность включает перенос Team Lobby на iOS, длительное нагрузочное тестирование, мониторинг и контролируемое продвижение protocol V3 на публичный relay.

Также необходимо закрыть критические KMZ-дефекты и временный Android DNS workaround. Только после стабилизации интернет-продукта и его операционных границ существующий транспортный интерфейс будет подключен к Meshtastic BLE.

Моя роль

Я отвечаю за продуктовую концепцию, требования, мобильный UX, системную архитектуру, разработку Android и iOS, backend и сетевой протокол, нативные Kotlin- и Swift-модули, картографический конвейер, серверную инфраструктуру, автоматические и физические проверки, backlog, историю решений и границы приватности.

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