Masintõlge, mida emakeelne kõneleja pole üle vaadanud. Võrdlusallikaks on ingliskeelne versioon.

Vastuvõtja usaldus ja merendusMuuda GitHubisAllikas: docs/NMEA-TRAINING.md

NMEA treeningvoogud: kshana nmea-scenario

Merendusakadeemiad ja simulaatorikeskused saavad söötta Kshana loodud NMEA 0183 laevasimulaatorisse või kaardiplotterisse, et õpetada meeskondi GNSS-i segamist ja spuufimist ära tundma.

Ainult treeninguks ja testimiseks. Loodud voogud on sünteetilised. Neid ei tohi kunagi söötta laeva elavatesse navigatsioonisüsteemidesse. Kshana on nõuandev, mitte tüübikinnitust omav navigatsiooniseade. Iga voog algab omaette märgilausega $PKSHT,TRAINING,SYNTHETIC,NOT-FOR-NAVIGATION ja kordab seda iga kümne sekundi järel; vastuvõtjad ignoreerivad seda; --no-marker eemaldab selle simulaatori jaoks, mis lükkab tundmatud laused tagasi. See kirjutab ainult NMEA teksti: RF-, IQ- ega lainekujuväljundit ei ole ja midagi ei edastata peale teksti aadressile, mille nimetate.

Treeningvoog stsenaariumist coastal-drag-off (mootor v0.40.0, algväärtus 22, 25 minutit, üks fiks 10 s kohta õppejõu logist). Kaart näitab laeva tegelikku rada ja rada, mida vastuvõtja teatab: need langevad kokku, kuni skriptitud asukoha eemaletõmme algab hetkel 421 s, teatatud rada kõnnib seejärel tegelikust eemale, kuigi vastuvõtja säilitab kehtiva fiksi, ja astub tagasi, kui sündmus lõpeb hetkel 1140 s. Selle kõrval kahe raja vahemaa ajas ning vastuvõtja teatatud keskmine kandja-müra tihedus, mis tõuseb ühele kõrgendatud tasemele, kuni sündmus kestab. Kshana loodud sünteetilised treeningandmed. Ainult treeninguks ja testimiseks: ärge kunagi sööta seda voogu laeva elavatesse navigatsioonisüsteemidesse. Nõuandev, mitte tüübikinnitust omav navigatsiooniseade. Nõuandev tarkvara, mitte tüübikinnitust omav navigatsiooniseade (IEC 61108, IEC 61162): laeva navigeerimise eest vastutab jätkuvalt operaator. Asukohad, kuupäevad ja rajad on väljamõeldud.Treeningvoog stsenaariumist coastal-drag-off (mootor v0.40.0, algväärtus 22, 25 minutit, üks fiks 10 s kohta õppejõu logist). Kaart näitab laeva tegelikku rada ja rada, mida vastuvõtja teatab: need langevad kokku, kuni skriptitud asukoha eemaletõmme algab hetkel 421 s, teatatud rada kõnnib seejärel tegelikust eemale, kuigi vastuvõtja säilitab kehtiva fiksi, ja astub tagasi, kui sündmus lõpeb hetkel 1140 s. Selle kõrval kahe raja vahemaa ajas ning vastuvõtja teatatud keskmine kandja-müra tihedus, mis tõuseb ühele kõrgendatud tasemele, kuni sündmus kestab. Kshana loodud sünteetilised treeningandmed. Ainult treeninguks ja testimiseks: ärge kunagi sööta seda voogu laeva elavatesse navigatsioonisüsteemidesse. Nõuandev, mitte tüübikinnitust omav navigatsiooniseade. Nõuandev tarkvara, mitte tüübikinnitust omav navigatsiooniseade (IEC 61108, IEC 61162): laeva navigeerimise eest vastutab jätkuvalt operaator. Asukohad, kuupäevad ja rajad on väljamõeldud.

Joonis on joonistatud faili scenarios/training/coastal-drag-off.toml õppejõu logist.

Kasutus#

# write a file (default <name>.nmea) and the instructor log next to it
kshana nmea-scenario scenarios/training/coastal-drag-off.toml --out drag.nmea

# serve over TCP in real time on this machine only (waits for the simulator to connect)
kshana nmea-scenario scenarios/training/open-sea-jamming.toml --tcp 10110

# reachable from the bridge-simulator host: name the address in full
kshana nmea-scenario scenarios/training/open-sea-jamming.toml --tcp 192.168.1.20:10110

# UDP, one sentence per datagram, ten times faster than real time
kshana nmea-scenario scenarios/training/combined-event.toml --udp 192.168.1.50:10110 --speed 10

# UDP broadcast
kshana nmea-scenario scenarios/training/combined-event.toml --udp 192.168.1.255:10110 --broadcast
Valik Tähendus
--out <file> kirjuta voog faili; kui võrguväljundit ei ole, on vaikeväärtus <name>.nmea
--instructor-log <prefix> kirjuta <prefix>.instructor.json ja <prefix>.instructor.txt (vaikimisi: faili kõrvale)
--tcp <addr:port> või <port> TCP-server; käitamine algab, kui klient on ühendunud (--wait-clients <n>). Üksik port kuulab ainult aadressil 127.0.0.1
--udp <addr:port> või <port> UDP, üks lause datagrammi kohta; --broadcast lubab leviaadressi. Üksik port saadab aadressile 127.0.0.1
--realtime, --speed <x> voo tempo; --speed 0 on nii kiiresti kui võimalik. Võrguväljundi vaikeväärtus on reaalaeg, failidel nii kiiresti kui võimalik
--seed <n> asenda stsenaariumi algväärtus
--no-marker jäta märgilause välja

Autentimist ei ole. TCP-server, millele on antud mittekohalik aadress, serveerib voogu igaühele, kes sellele ligi pääseb, ja UDP saadab ükskõik millisele aadressile, mille nimetate. TCP-klient, mis ei võta oma andmeid kahe sekundi jooksul vastu, jäetakse välja, nii et üks soiku jäänud tarbija ei saa teisi kinni hoida.

Sama algväärtus annab ühel platvormil samad baidid ja tempo ei muuda kunagi baite. Platvormide vahel on generaatori enda aritmeetika bitthaaval identne (see kasutab teisaldatavat matemaatikakihti), kuid satelliitide asukohad ja vaatenurgad tulevad mootori funktsioonidest, mis kutsuvad hosti matemaatikateeki, seega võib haruldasel piirjuhul GSV-s ümardatud kõrgusnurga, asimuudi või C/N0 numbrikoht platvormide vahel erineda.

Mida kirjutatakse#

Iga epohh (1, 2, 5 või 10 sekundis) kannab: RMC, GGA, GNS (fiks, asukoht, aeg), GSA (kasutatud satelliidid ja DOP, üks konstellatsiooni kohta), GSV (nähtavad satelliidid koos kõrgusnurga, asimuudi ja SNR-iga dB-Hz-des, üks komplekt konstellatsiooni kohta, NMEA 4,10 signaali ID), VTG (kurss ja kiirus maa suhtes), ZDA (aeg ja kuupäev), HDT (güroskoobi suund) ja VBW (vee- ja maakiirus logilt). Talker on GN mitme konstellatsiooni korral, muidu konstellatsiooni enda oma. Read lõpevad CRLF-iga ja on kontrollsumma poolest kehtivad.

HDT ja VBW esindavad sõltumatuid andureid (güroskoopkompass ja Doppleri logi). Ükski sündmus neid ei puuduta, mis on tahtlik: vahe selle vahel, mida GNSS teatab, ja selle vahel, mida güro ja logi ütlevad, on arutelu vihje.

Kui fiks kaob, on GGA kvaliteet 0, RMC olek V, asukohaväljad on tühjad ja ajaväljad jätkuvad (vastuvõtja kell käib edasi), nagu päris vastuvõtjatel.

Laev#

[vessel] ja [[waypoint]] annavad alguspunkti, kiiruse ja punktid, mille kaudu suunata. Laeva suunatakse järgmise teekonnapunkti poole pöördekiiruse piirangu (max_rot_deg_per_min, vaikimisi 30), piirangu all selle kohta, kui kiiresti pöördekiirus kasvab (max_rot_accel_deg_per_s2), ja kiiruse muutmise piirangu (max_accel_kn_per_min) all. Lõigu kiirus on teekonnapunkti speed_kn. [environment] lisab hoovuse, nii et maa suhtes kiirus erineb veekiirusest ja suund erineb kursist maa suhtes, ning magnetilise deklinatsiooni. stop_at_end peatab laeva viimasel teekonnapunktil.

Satelliidigeomeetria#

Satelliidid tulevad mootori enda nominaalsetest konstellatsioonidest (GPS-i pesatabel, Galileo ja BeiDou MEO Walkeri mustrid, GLONASS ICD), levitatuna funktsiooniga constellation::satellite_positions_fixed (kahekeha pluss sekulaarne J2, Maa pöörlemine) ja nähtuna laevalt mootori WGS-84 vaatenurkadega. GSV-s olevad nähtavate arv, kõrgusnurgad ja asimuudid on koha ja kellaaja jaoks usutavad. See on nominaalne taevas, mitte voo kuupäeva efemeriid: PRN-id määratakse pesa järjekorras ja iga konstellatsioon säilitab oma avaldatud pesapaigutuse, levitatuna pidevalt GPS-i pesatabeli epohhist (2016-12-31) J2 all, seega on paigutus terve, kuid selle orientatsioon ei ole päris taeva oma voo kuupäeval. C/N0 järgib kõrgusnurka (nominaalne seniiditase, seatud failis [receiver]), fikseeritud satelliidipõhise nihkega, aeglase tuhmumise ja müraga. Satelliidil alla track_threshold_dbhz on SNR-väli tühi; alla use_threshold_dbhz jälgitakse, kuid ei kasutata. Kuni max_used (vaikimisi 12, NMEA GGA lagi) kasutatavat satelliiti kasutatakse, valituna geomeetria põhjal (igas 30 kraadises asimuudisektoris esmalt kõrgeim satelliit). Vähem kui neli kasutatavat satelliiti kaotab fiksi ja see naaseb pärast reacquire_s kasutatavat signaali.

Sündmused#

Igal [[event]] on kind, alguse start_s, duration_s (algusest vabastuse alguseni), alguse tõusuramp ramp_s ja vabastuse ramp recovery_s. Tugevus tõuseb lineaarselt üle ramp_s, püsib, siis langeb üle recovery_s; 0 on aste. Kõik mõjud skaleeruvad selle tugevusega. Parameetrid, mis ei kuulu liigile, lükatakse tagasi.

liik parameetrid mõju
jamming cn0_drop_db, spread_db (vaikimisi 6) iga satelliidi C/N0 langeb kuni cn0_drop_db võrra (satelliidipõhine hajuvus), satelliidid langevad välja madalaimast alates, fiks kaob, kui kasutatavaid on alla nelja, ja taastub pärast vabastust ja reacquire_s
drag-off final_offset_m, üks väärtustest bearing_deg (tõene) või relative_bearing_deg (kursini alguses, siis hoitud), valikuline max_accel_mps2, counterfeit_cn0_dbhz vastuvõtja säilitab kehtiva fiksi, mille asukoht kõnnib tõest eemale; SOG ja COG sisaldavad eemaletõmmet. Eemaletõmme järgib ramplitel smoothstepi, seega vale rada algab ja lõpeb ilma kiirusastmeta; selle tipud on 1.5 D/T m/s ja 6 D/T^2 m/s ruudus rampi T s korral üle D m (mõlemad logitud), ja stsenaarium, mis ületaks max_accel_mps2, lükatakse tagasi. Aste (ramp_s = 0) liigutab asukohta kiirust puudutamata
time-spoof offset_s, counterfeit_cn0_dbhz RMC, GGA, GNS ja ZDA aeg nihutatakse tõelisest UTC-st; asukoht jääb tõeseks
replay-delay delay_s, affect_time (vaikimisi true), counterfeit_cn0_dbhz asukoht, kiirus (ja aeg) on laeval delay_s tagasi olnud; viivitus järgib tõusude ajal sujuvat astmefunktsiooni (smoothstep) ning teatatud kiirust skaleeritakse teguriga 1 - d(delay)/dt, kuni see muutub: lihtsustatud, meaconing-laadne abstraktsioon, mitte levimudel

counterfeit_cn0_dbhz: kui drag-off, aja spuufimine või taasesituse viivitus on aktiivne, näitab iga jälgitav satelliit seda üht tõstetud taset, mis on klassikaline tunnus. Peene sündmuse korral, kus säilitatakse tegelik C/N0 muster, jäetakse see ära. Kuni mis tahes võltssündmus on aktiivne, järgib vastuvõtja võltssignaali, mistõttu segamine seda ei katkesta; varasema segamise tõttu kaotatud fiks naaseb võltssignaalil reacquire_s pärast (vt combined-event). Ajamuutus, mille tõttu teatatud aeg seiskuks või jookseks tagurpidi (kiirus 1 s sekundis või rohkem), lükatakse tagasi, kui see ei ole samm (ramp_s = 0).

Sündmused võivad kattuda; nende mõjud liituvad (nihked, ajamuutused, viivitused) või kehtib tugevaim (segamine). Ajajoone onset on esimene epohh, mil sündmusel on mõju, üks epohh pärast skriptitud start_s, kui sündmus tõuseb järk-järgult.

Instruktori logi#

Voo kõrval annavad <prefix>.instructor.json ja <prefix>.instructor.txt:

  • sündmused sellisena, nagu need süstiti, lihtsas keeles koos iga parameetriga, ja nende UTC algusaeg;
  • ajajoone: algus, täielik mõju, taastumise algus, taastumine ning vastuvõtja enda fix-lost ja fix-regained;
  • tõelise raja teatatuga võrreldes log_interval_s sammuga: tõene ja teatatud asukoht, kiirus ja kurss, asukohaviga meetrites, ajanihe, kasutatud ja jälgitud satelliidid, keskmine C/N0 ning millised sündmused olid aktiivsed;
  • tõelise ja teatatud raja tippkiirus ja -kiirendus;
  • stsenaariumi trainer_note.

Näita logi alles lõppanalüüsil.

JSON-väljad (skeem kshana-nmea-training/1)#

väli tüüp, ühik tähendus
schema string kshana-nmea-training/1
warning string ainult koolituseks mõeldud väide
scenario, description, trainer_note string stsenaariumist
seed täisarv kasutatud algväärtus (seed)
start_utc ISO 8601 UTC käitamise algus
duration_s s käitamise kestus
summary.true_peak_sog_kn, summary.reported_peak_sog_kn sõlme suurim tõene ja teatatud kiirus maa suhtes
summary.true_peak_accel_mps2, summary.reported_peak_accel_mps2 m/s ruudus kiiruse suurim muutus sekundis, tõene ja järjestikuste teatatud fikside vahel
events[] üks iga skriptitud sündmuse kohta
events[].id täisarv 1-põhine; kasutavad timeline[].event ja track[].active_events
events[].description string lihtsas keeles kirjeldus koos parameetritega
events[].start_utc ISO 8601 UTC skriptitud algus
events[].parameters objekt sündmus täpselt nii, nagu see on kirjutatud (kind, start_s, duration_s, ramp_s, recovery_s ja liigi enda parameetrid; puuduvad jäetakse välja)
events[].resolved_bearing_deg kraadi tõene või null drag-off: rakendatud suund (suhteline suunanurk lahendatakse alguses)
events[].peak_drag_speed_mps, events[].peak_drag_accel_mps2 m/s, m/s ruudus või null drag-off: tipud, mille nihe võltsrajale lisab
timeline[] hetked lõppanalüüsi jaoks, ajalises järjekorras
timeline[].t_s, .utc s algusest, ISO 8601 UTC millal (tõene aeg)
timeline[].event täisarv või null sündmuse id; null vastuvõtja oleku muutuste korral
timeline[].what string onset, full-effect, recovery-begins, recovered (sündmused); fix-lost, fix-regained (vastuvõtja)
timeline[].text string selgitus
track[] üks rida iga log_interval_s kohta
track[].t_s, .utc s, ISO 8601 UTC millal (tõene aeg)
track[].true_lat_deg, .true_lon_deg kraadid tõene asukoht
track[].true_sog_kn, .true_cog_deg, .true_heading_deg sõlme, kraadi tõene tõene kiirus ja kurss maa suhtes ning güroskoobi suund
track[].fix_valid tõeväärtus vastuvõtja teatas fiksist
track[].reported_lat_deg, .reported_lon_deg, .reported_sog_kn, .reported_cog_deg kraadid, sõlmed, kraadi tõene või null mida vastuvõtja teatas; null, kuni fiks on kadunud
track[].position_error_m m või null horisontaalne kaugus tõelisest teatatud asukohani
track[].time_offset_s s teatatud UTC miinus tõene UTC
track[].n_used, .n_tracked täisarvud fiksis kasutatud ja jälgitud satelliidid
track[].mean_cn0_dbhz dB-Hz või null jälgitud satelliitide keskmine C/N0
track[].active_events täisarvud sündmuste id-d, millel on sel hetkel mõju

Välja lisamine ei muuda skeemi silti. Välja ümbernimetamine või eemaldamine või välja tähenduse või ühiku muutmine suurendab numbrit (/2).

Stsenaariumiteek#

scenarios/training/, kumbki mõne minuti pikkune reis koos treeneri märkusega oma TOML-is:

fail mida see näitab
open-sea-jamming.toml C/N0 langeb koos, satelliidid kaovad, fiks läheb kaduma ja naaseb
coastal-drag-off.toml kehtiv, terve väljanägemisega fiks nihkub 1,4 km kalda poole; ühtlaselt tõstetud C/N0
port-approach-time-spoof.toml asukoht õige, UTC triivib aeglase sadamasse sisenemise ajal 45 s ette
combined-event.toml segamine, seejärel võltssignaali ülevõtt koos drag-off-i ja ajanihkega, seejärel taasesituse viivitus
fjord-natural-degradation.toml blokeeritud taevas, mitte häire: fjordi kaljuseinad (REPRESENTATIVE fjord horisondijoone eelseadistus) varjavad satelliite idas ja läänes, seejärel kanal avaneb taas (sündmus natural-degradation, koos skyline tabeliga)

Asukohad, kuupäevad ja rajad on väljamõeldud; teek ei sisalda ühtki tegelikku laeva, operaatorit ega salvestist. See ei väida midagi selle kohta, kuidas ükski vastuvõtja või süsteem häire korral toimiks.

Modelleerimisvalikud#

Generaator on koolitusvahend, millel puudub väline sõltumatu etalon, ja selle arvud on modelleerimisvalikud, mitte ühegi vastuvõtja mõõtmised. Need on valitud nii, et need näeksid välja nagu tavalise vastuvõtja logi: C/N0 kalle 14 dB seniidist horisondini alla seniiditaseme (vaikimisi 47 dB-Hz) ja satelliidipõhine nihe +/-1,5 dB, aeglane hajumine 0,8 dB 97 s jooksul ja 0,5 dB 31 s jooksul, 0,3 dB värin; jälgimise (20 dB-Hz) ja kasutamise (28 dB-Hz) läved; asukohamüra (1,5 m HDOP-i 1 korral, korreleeritud 30 s jooksul, vertikaalselt kaks korda suurem); 0,05 kraadi güroskoobi müra ja 0,03 kn triivimüra; 20 s roolimise ajakonstant ja laeva mudeli teekonnapunktide saabumisraadiused; ning asimuudisektori põhine satelliidivalik. Vaikeväärtused asuvad [receiver] ja [vessel] ning neid kõiki saab stsenaariumis muuta.

Tagasilugemine#

kshana receiver-trust oskab neid faile sisse lugeda (format = "nmea"). Testid kontrollivad iga teegi stsenaariumi iga lauset selle enda väljade arvu ja kontrollsumma reeglite vastu ning käitavad failid läbi selle lugeja, mis tõlgendab GGA, RMC ja GSV lauseid ning laseb teised tüübid läbi, jätmata ühtki vahele. Testid fikseerivad stsenaariumi kohta kuldse väljavõtte (tests/fixtures/nmea_training/); pärast kavatsetud muutust genereeritakse uuesti käsuga KSHANA_BLESS_GOLDEN=1.