Russian Railway Simulator (RRS): den første offentlige udgivelse

Den ventede dag er endelig kommet, hvor jeg kan præsentere denne udvikling. Projektet blev påbegyndt præcist et år siden, den 1. september 2018, i det mindste i RRS-repositoriet på Github den første commit har netop denne dato.

Passagertog på stationen Rostov Glavniy (klikbart)

Russian Railway Simulator (RRS): den første offentlige udgivelse

Hvad er RRS? Det er en åben, tværplatforms simulator for rullende materiel med en sporvidde på 1520 mm. Læseren vil naturligt stille spørgsmålet: "Hvorfor er dette projekt nødvendigt, hvis der allerede findes mange kommercielle og åbne jernbanesimulatorer?" For svaret på dette spørgsmål foreslår jeg, at man kigger videre nedenfor.

Projektets historie

Engang for længe siden, i 2001, kom Microsoft Train Simulator (MSTS), som skabte et enormt fællesskab af jernbaneentusiaster i vores land. I de få år, som dette projekt eksisterede (indtil Microsoft opgav det for mere interessante aktiviteter, såsom at bringe Nokia i konkurs osv.), voksede projektet til en masse tilføjelser: ruter, rullende materiel, scenarier.

Baseret på MSTS blev der senere skabt en række andre projekter, såsom OpenRails, RTrainSim (RTS) og andre tilføjelser og afledte værker. Der kom også kommercielle projekter, som den berømte Trainz.Og alt ville være godt, men mange jernbaneentusiaster er ikke tilfredse med disse produkter af helt objektive grunde — de afspejler på ingen måde karakteristikaerne for det indenlandske rullende materiel, som bruges og udvikles i det post-sovjetiske område. Dette bliver især tydeligt, når man ser på, hvordan togbremsesystemerne er implementeret — i ingen af de nævnte projekter findes der eller vil der nogensinde være en ordentlig implementering af de automatiske bremser i Matrosov-systemet.

I det ikke så fjerne 2008 kom et andet projekt — ZDSimulator, udviklet af Vyacheslav Usov. Projektet er bemærkelsesværdigt, fordi det tager hensyn til og retter de nævnte mangler, og det er oprindeligt orienteret mod rullende materiel med russisk sporvidde. Men der er et stort "men" — projektet er proprietært og lukket, hvilket arkitektonisk udelukker muligheden for at integrere sit eget rullende materiel.

Selv stødte jeg på jernbanetemaet i 2007, da jeg begyndte at arbejde i OAO VELNII, i stilling som forskningsmedarbeider, og efter jeg forsvarede min ph.d.-afhandling i 2008 — som senior forskningsmedarbeider. Det var dengang, jeg stødte på de nyeste på det tidspunkt opnåelser inden for jernbane-simuleringsspil. Og det, jeg så, var ikke tilfredsstillende, og projektet ZDSimulator eksisterede ikke dengang. Senere, drevet af min passion for dynamikken i rullende materiel, kom jeg til Rostov State Transport University (RGUPS) med emnet for min doktorafhandling om dynamikken ved bremsning af godstog. I dag leder jeg udviklingen af træningssimulatorer for vores universitet og underviser i relevante fag på instituttet for 'Trækkraft rullende materiel'.

I forbindelse med alt ovenstående opstod ideen om at skabe en simulator, der ville give udvikleren af tilføjelser mulighed for at få fuld kontrol over de fysiske processer, der foregår i det rullende materiel. Sammenligneligt med den rum-simulator Orbiter, for hvilken jeg tidligere udviklede en tilføjelse i form af en række raketter baseret på R-7. For et år siden begyndte jeg på dette arbejde og kastede mig helhjertet ind i det. Den 26. december 2018 blev denne teknologiske demo.

Mit arbejde blev bemærket af entusiaster, og en velkendt skikkelse blandt jernbane-simuleringsfællesskabet, skaberen af visuelt indhold til ZDsimulator, Roman Biryukov (Romych RŽDUZ) tilbød mig hjælp og samarbejde i den videre udvikling af projektet. Senere sluttede endnu en udvikler sig til os — Alexander Mishchenko (Ulovskii2017), skaber af ruter til ZDsimulator. Vores samarbejde førte os til den første udgivelse. I videoen er der en oversigt over, hvordan spillet ser ud ved sin første udgivelse.

Afspil video

Funktioner ved simulatoren RRS

Først og fremmest er det — en åben softwarearkitektur. For ikke at nævne, at simulatorens kode er åben, findes der en API og SDK, der er rettet mod udviklere af tredjeparts tilføjelser til det. Indgangsbarrieren er relativt høj — grundlæggende færdigheder i C++-programmering er nødvendige. Simulatoren er netop skrevet i dette sprog, med anvendelse af GCC-kompilatoren og dens variant MinGW til Windows-operativsystemet. Derudover er det ønskeligt, at udvikleren er bekendt med Qt-rammeværket, da mange koncepter fra det ligger til grund for spillets arkitektur.

Men med tilstrækkelig indsats og vilje åbner dette projekt op for udviklere af tilføjelser enorme muligheder. Det bevægelige materiel implementeres i form af moduler baseret på dynamiske biblioteker. Hovedstrukturelementet i simulatoren er enhed af bevægeligt materiel, eller bevægende enhed (BE) — en vogn (ikke-motoriseret eller i en motorvognstog) eller sektion af lokomotiv. API'en giver mulighed for at angive det drejningsmoment, der påføres akslerne af BE, og modtage den vinkelfart, som akslerne har, samt eksterne parametre som spænding og typen af strøm i kontaktledningen. Simulatoren ved ikke mere og ønsker ikke at vide noget, hvilket lader fysikken af det indre udstyrs arbejde være i hænderne på udvikleren af det specifikke lokomotiv eller vogn.

Det er ikke svært at gætte, at en sådan relativt lav-niveau tilgang giver mulighed for at implementere selv de mindste nuancer i lokomotivets skema. Desuden indeholder simulatoren et sæt standardudstyr, som installeres på hjemmelavet bevægeligt materiel: lokomotivførerens kran nr. 395, luftfordeler nr. 242, hjælpet bremsesventil nr. 254 og andre dele af bremsesystemet. Udvikleren af tilføjelsen skal blot koble disse elementer i det pneumatiske schema for det specifikke lokomotiv eller vogn. Derudover er der et API til at skabe egne udstyrsenheder.

Arkitektonisk er RRS bygget på interaktionen mellem to hovedprocesser

  • simulator — en fysisk motor for togbevægelse, TrainEngine 2. Den implementerer fysikken i togbevægelse under hensyntagen til mange eksterne faktorer, idet den tager højde for interaktionen mellem bevægelige enheder via koblingsapparater, samt behandler data der kommer fra eksterne moduler, som implementerer fysikken i arbejdet med det bevægelige materiel.
  • viewer — et grafisk subsystem, der udfører visualiseringen af togbevægelsen, bygget på basis af den grafiske motor OpenSceneGraph

Disse subsystemer interagerer med hinanden via delt hukommelse, der implementeres ved hjælp af klassen QSharedMemory fra Qt-frameworket. De første demoversioner brugte IPC baseret på sockets, og i fremtiden planlægges det at vende tilbage til denne teknologi, idet der tages højde for forbedringer af nogle dele af simulatoren og fremtidige behov. Overgangen til delt hukommelse var til en vis grad en nødvendighed, der havde udlevet sin berettigelse.

Jeg vil ikke beskrive nuancerne — mange af de begivenheder, der har præget udviklingen af dette projekt, er allerede beskrevet i mine publikationer på ressourcen, herunder en ret omfattende cyklus af tutorials om motoren OpenSceneGraph, som netop er vokset ud af arbejdspraksis på dette projekt.

I projektet forløber ikke alt så glat, som man kunne ønske. Især grafiske subsystem er langt fra perfekt med hensyn til renderingkvalitet, og simulatorens ydeevne efterlader også meget at ønske. Dette udgivelse har ét mål — at introducere jernbaneentusiastfællesskabet til projektet, skitsere dets muligheder og endelig skabe en åben, tværplatform jernbanesimulator med et avanceret API for udviklere af tilføjelser.

Udsigter

Fremtiden afhænger af jer, vores kære fremtidige brugere og udviklere. Projektet er åbent, der eksisterer den officielle hjemmeside, hvor man kan downloade simulatoren, med dokumentation, som kontinuerligt vil blive opdateret. Der findes et forum for projektet, en VK-gruppe, og YouTube-kanal, hvor man kan få de mest detaljerede konsultationer og hjælp.

Tak for din opmærksomhed!

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster