SQVL-MESH
Individuāla navigācija un komandas koordinēšana vienā reāllaika kartē
SQVL-MESH sākās ar vienu GPS punktu tālruņa kartē. Versijā 0.12.11 tā ir klienta-servera lauka koordinācijas alfa ar Android un iOS lietotnēm, noturīgu lokālo stāvokli, vietējiem kartēšanas moduļiem, savu tīkla protokolu un izolētām komandu telpām.
Sistēma dod grupai vienu operacionālo karti pozīcijām, lomām, dzīvības stāvoklim, taktiskajiem simboliem, lokāliem apvidus plāniem un redzamības pārvaldībai starp komandām. Internets ir izvēlēts kā primārais transports, jo pašreizējā vidē tas ir vispieejamākais. Meshtastic un LoRa paliek nākotnes rezerves kanāls kompaktu kritisku datu piegādei bez interneta.
Viena operacionālā aina
Lauka koordinācija parasti balstās uz vairākiem nesaistītiem rīkiem: balss radiostaciju, tālruni ar GPS, nestabilu mobilo internetu, atsevišķiem izsekotājiem un lokālām vai papīra kartēm. Katrs rīks glabā daļu situācijas, bet neviens neuztur pilnu un aktuālu grupas stāvokli.
SQVL-MESH apvieno galveno koordinācijas stāvokli vienā mobilajā sistēmā:
- aktuālas un novecojušas dalībnieku pozīcijas;
- noturīgu identitāti, lomu un dzīvības stāvokli;
- MGRS koordinātas, azimutu, attālumu un paredzamo ierašanās laiku;
- ģenerētus taktiskos simbolus;
- privātas KMZ kartes, kas tiek apstrādātas ierīcē;
- fona sinhronizāciju Android un iOS;
- publiskas un privātas komandu telpas Android;
- transporta robežu nākotnes mesh kanālam.
Produkts ir veidots ap nepārtrauktību. Noderīgai operacionālajai ainai jāsaglabājas, kad ekrāns ir bloķēts, tīkls pārtrūkst, paketes aizkavējas, lietotne tiek pārstartēta, platformas atšķiras vai mainās transports.
No GPS prototipa līdz community candidate
Pirmā versija tikai atvēra karti un parādīja tālruņa pozīciju. Nākamais vertikālais griezums savienoja divas ierīces caur WebSocket relay. Lokāla SQLite glabātuve padarīja pieņemto stāvokli noturīgu, bet tipizēti līgumi un revīziju noteikumi neļāva dublikātiem un aizkavētām paketēm pārrakstīt jaunākus datus.
Projekts auga tajā pašā arhitektūrā: dalībnieku profili, fona GPS, iOS atbalsts, savienojuma atjaunošana, MGRS navigācija, stāvokļu taimeri, Tactical Symbol Engine, lokāls KMZ imports, kompass ar patieso azimutu, saglabāts kameras stāvoklis un visbeidzot protocol v3 ar izolētām komandu telpām.
Tas mainīja produkta kategoriju. SQVL-MESH vairs nav GPS izsekošanas demonstrācija. Tas kļūst par platformu dalībniekiem, ģeotelpiskiem datiem un kontrolētai redzamībai starp komandām.
Karte, kas saglabā stāvokli
Pozicionēšanai ir trīs skaidri režīmi: Off, While open un Background. Lietotājs var pārtraukt savas pozīcijas publicēšanu, turpinot saņemt komandas stāvokli. Fona režīmā koordinātas turpina atjaunoties, kad lietotne nav redzama vai ekrāns ir bloķēts.
Karte uzrauga koordinātu vecumu un nepadara atkārtoti saņemtu paketi par svaigu. Pēc pārstartēšanas tā atjauno centru, mērogu, slīpumu un pagriezienu, kā arī nodrošina komandas pārskatu, centrēšanu, tēmēkli, MGRS kopēšanu, attālumu, patieso azimutu un uz ātrumu balstītu ierašanās laiku.
Dalībnieka profils nodala lēni mainīgu identitāti no biežiem pozīcijas notikumiem. Lomas vai stāvokļa maiņai ir sava revīzija un laika zīmogs. Citas ierīces lokāli aprēķina WOUNDED, DEAD un STALE ilgumu, tāpēc tīklam nav katru sekundi jāpārraida jauns taimeris.
Kompass izmanto platformas vietējos virziena datus: Android rotation-vector sensoru ar magnētiskās deklinācijas korekciju un iOS Core Location true heading. Tas fiziski pieņemts Android un funkcionējošā iPhone 15. Vecāka iPhone 12 problēma izolēta kā ierīces vai sistēmas servisa kļūme, jo arī Apple Compass tajā pašā ierīcē nemainīja virzienu.
Taktiskie dati paliek semantiski
Tactical Symbol Engine ģenerē determinētus SVG simbolus no ierobežotiem semantiskiem parametriem: piederības, simbolu kopas, statusa un lomas. Tas pats atveidotājs tiek izmantots dalībnieku marķieros, profila iestatījumos, priekšskatījumos un Symbol Configurator.
Attēli, patvaļīgi SVG un XML netiek sūtīti tīklā. Klienti apmainās ar kompaktiem identifikatoriem un lokāli izveido vienādu attēlu. Tādēļ simbolu katalogs var attīstīties bez ciešas sasaistes ar profiliem, paketēm vai transportu.
KMZ slāņi ievēro to pašu privātuma robežu. Izvēlētais fails tiek pārbaudīts, izvilkts, pārveidots lokālā 512 pikseļu Web Mercator XYZ flīžu piramīdā, reģistrēts SQLite un attēlots ar MapLibre. Avota faili, koordinātas, nosaukumi un izveidotās flīzes nepamet ierīci.
Katalogs atbalsta līdz 24 lokāliem slāņiem ar progresu, atjaunošanu, redzamību, secību, pāreju uz robežām un dzēšanu. Kotlin un Swift moduļi apstrādā rastrus, nepārsūtot lielus attēlus caur React Native tiltu.
Team Lobby un protocol v3
Lielākās jaunākās izmaiņas ir servera autorizēta komandu nodalīšana. Android klients atbalsta četrus piekļuves stāvokļus:
- No room lokālai lietošanai bez komandas;
- Public kopīgai publiskai telpai;
- ar paroli aizsargātas privātas komandas;
- aizsargātu tikai lasāmu Admin novērotāju.
Dalībnieki saņem tikai tos profilus un pozīcijas, ko atļauj viņu telpa. Izveidotājs var pārdēvēt komandu, mainīt paroli, izņemt dalībnieku vai pilnībā dzēst telpu. Paroles netiek glabātas tālrunī. Pēc autentifikācijas serveris izsniedz atsaucamu necaurspīdīgu sesiju, kas glabājas aizsargātā ierīces krātuvē.
Iziešana no telpas vai tās maiņa izveido jaunu generation boundary. Vecie profili, pozīcijas un marķieri tiek notīrīti pirms jaunās telpas aktivizēšanas, tādēļ vienas komandas stāvoklis nevar nonākt citā.
Admin apvieno Public un privātās komandas vienā kartē, bet nevar publicēt savu pozīciju, mainīt telpas vai izmantot izveidotāja darbības. Šajā režīmā marķieri norāda avota komandu.
Protocol v3 darbojas atsevišķā review relay. Pašreizējais publiskais protocol v2 maršruts nav mainīts, tāpēc telpu testēšana nevar destabilizēt iepriekšējo darba vidi. Team Lobby fiziski pieņemts Android, bet iOS klients joprojām izmanto iepriekšējo dalības modeli.
Arhitektūra ar skaidru atbildību
SQVL-MESH ir TypeScript monorepozitorijs ar kopīgu React Native lietotni, Fastify un WebSocket serveri, tipizētiem līgumiem un vietējiem Kotlin un Swift pakotņu moduļiem KMZ un virziena noteikšanai.
Mobilā arhitektūra nodala stāvokļa īpašniekus:
- Position pārvalda atļaujas, GPS, fona procesus un atjaunošanu.
- Membership pārvalda telpas, sesijas un aktīvo piekļuves apgabalu.
- Local State pārvalda SQLite, notikumu vēsturi, projekcijas un iestatījumus.
- Participants savieno identitāti, profilu, stāvokli un pieņemto pozīciju.
- Map attēlo sagatavoto stāvokli un pārvalda kameru.
- Communication koordinē paketes un transportu.
- Relay pārvalda autorizāciju, maršrutēšanu un servera pilnvaras.
Protocol v3 pievieno noturīgas telpas un dalību, member, creator un observer lomas, atsaucamas sesijas, ierobežotus snapshots, idempotentas operācijas, 16 KiB paketes ierobežojumu, rate limiting, backpressure, izolāciju pēc telpas un stāvokļa paaudzes, atjaunošanu pēc pārstartēšanas un fail-closed glabātuves darbību.
Relay darbojas izolētā Docker konteinerā aiz Cloudflare Tunnel. Laidieni izmanto nemainīgas direktorijas, atomāru paaugstināšanu, saglabātu iepriekšējo versiju un rollback. Testa robeža apstiprina 128 vienlaicīgus savienojumus un drošu 129. savienojuma noraidīšanu; ilgstoša slodze uz šīs robežas vēl jāpārbauda.
Pierādījumi pirms apgalvojumiem
Pašreizējā automatizētā kontūra satur 483 sekmīgas mobilās lietotnes, servera un kopīgo līgumu pārbaudes. Pieņemtais Android kandidāts paliek versija 0.12.10 (53), bet 0.12.11 fiksē pabeigtu fizisko pieņemšanu un projekta vēstures finalizāciju, neuzdodot to par jaunu instalējamu artefaktu.
Fiziskā testēšana aptver Pixel, Sony, iPhone 12, iPhone 15, pozicionēšanu ar bloķētu ekrānu, tīkla zudumu un atkārtotu savienojumu, publiskas un privātas telpas, Admin novērošanu, dalībnieka un telpas dzēšanu, kā arī divu un trīs ierīču izolācijas scenārijus. Karte un fona pozicionēšana izmantota arī nedēļu ilgā lauka darbībā ar Android un iOS kontroles punktiem aptuveni ik pēc 100 metriem.
Divi Wio Tracker L1 Pro tika testēti atsevišķi. Divvirzienu ziņojumi darbojās aptuveni 400 metros un 550 metros, kad abi dalībnieki atradās paaugstinājumos. Savienojums neizdevās aptuveni 600 un 630 metros, kad ceļu aizsedza reljefs. Šie rezultāti parāda LoRa atkarību no augstuma un šķēršļiem, bet nav apsolīts darbības rādiuss.
Pašreizējā robeža
SQVL-MESH ir darbojoša alfa un Android community-test candidate. Fiziski pieņemta kopīgā karte, fona GPS, profili, dzīvības stāvokļi, simboli, MGRS, kompass, lokālie KMZ slāņi, kameras saglabāšana, Android Team Lobby, telpu izolācija, sesiju atjaunošana un protocol v3 review relay.
Tā vēl nav production sistēma. Team Lobby nav iOS, protocol V3 nav aizstājis publisko relay, un pre-public adversarial security review, ilgstošs 128 klientu tests un kontrolēts multi-team pilot joprojām ir atvērts. Kartēšanas ierobežojumi ietver iOS atmiņas spiedienu ar lieliem KMZ, nepilnīgu vietējo atcelšanu, saliktu slāņu secību, JPEG un pagrieztu GroundOverlay atbalstu un pilnīgas bezsaistes pamatkartes trūkumu.
Meshtastic BLE nav integrēts. Pašreizējie radio testi apstiprina tikai aparatūras hipotēzi, nevis lietotnes notikumu piegādi caur mesh.
Nākamā pāreja
Tuvākais solis ir pre-public adversarial security review, pēc tam ierobežota Android testēšana kopienā un bloķējošu lauka problēmu labošana. Nākamā inženierijas secība ietver Team Lobby pārnešanu uz iOS, ilgstošu slodzes testēšanu, uzraudzību un kontrolētu protocol V3 paaugstināšanu uz publisko relay.
Jānovērš arī kritiskie KMZ defekti un pagaidu Android DNS risinājums. Tikai pēc interneta produkta un tā operacionālo robežu stabilizēšanas esošais transporta interfeiss tiks savienots ar Meshtastic BLE.
Mana loma
Es atbildu par produkta koncepciju, prasībām, mobilo UX, sistēmas arhitektūru, Android un iOS izstrādi, backend un tīkla protokolu, vietējiem Kotlin un Swift moduļiem, kartēšanas konveijeru, servera infrastruktūru, automatizētiem un fiziskiem testiem, backlog, lēmumu vēsturi un privātuma robežām.
Projekts parāda pilnu ceļu no nenoteiktām lauka prasībām līdz pārbaudītai sistēmai: kopīgs mobilais produkts, tipizēts protokols, lokāls operacionālais stāvoklis, servera pilnvaras, vietēja ģeotelpiskā apstrāde un godīga pierādījumu vēsture par to, kas darbojas un kas vēl ne.