È arrivato finalmente il giorno che tanto aspettavo, quando posso finalmente presentare questo progetto. È iniziato esattamente un anno fa, il 1° settembre 2018, perlomeno nel il primo commit ha esattamente questa data.
Treno passeggeri alla stazione Rostov Centrale (cliccabile)
Cos'è RRS? È un simulatore open source cross-platform per materiali rotabili su binari da 1520 mm. Il lettore potrebbe giustamente chiedere: "Scusate, a cosa serve questo progetto se esistono già un numero sufficiente di simulatori ferroviari, sia commerciali che open?" Per rispondere a questa domanda, vi invito a dare un'occhiata sotto il tag
Storia del progetto
Tanto tempo fa, nel 2001, è stato pubblicato , che ha dato origine a una vasta comunità di appassionati di simulatori ferroviari nel nostro paese. Nel corso degli anni in cui questo progetto è esistito (fino a quando Microsoft non lo abbandonò, occupandosi di questioni più interessanti per lei, come il fallimento di Nokia e simili), il progetto è stato arricchito da una moltitudine di add-on creati per esso: percorsi, materiali rotabili, scenari.
Sulla base di MSTS, sono stati successivamente creati altri progetti, come , e altri aggiuntivi e derivati. Sono nati anche progetti commerciali, come il famoso . E tutto ciò sarebbe accettabile, ma molti appassionati di trasporti ferroviari non sono soddisfatti di questi prodotti per ragioni del tutto oggettive: non riflettono affatto le specifiche dei mezzi di trasporto domestici, utilizzati e sviluppati nello spazio post-sovietico. Questo diventa particolarmente evidente nel modo in cui sono implementati i freni dei treni: nessuno dei progetti elencati offre e offrirà una corretta implementazione dei freni automatici del sistema Matrosov.
Nel già lontano 2008 è apparso un altro progetto — , sviluppato da Vyacheslav Usov. Il progetto è notevole perché tiene conto e corregge i difetti sopra menzionati, ed è inizialmente orientato sui mezzi di trasporto a scartamento russo. Ma c'è un grande "ma": il progetto è proprietario e chiuso, architetturalmente non consente l'integrazione di mezzi di trasporto propri.
Sono entrato nel mondo ferroviario nel 2007, quando ho iniziato a lavorare presso , come ricercatore, e dopo aver difeso la mia tesi di dottorato nel 2008 — come ricercatore senior. È stato allora che ho scoperto le ultime innovazioni nel campo dei giochi/ simulatori ferroviari. Tuttavia, ciò che ho visto non mi è piaciuto, e in quel momento non c'era ancora il progetto ZDSimulator. Successivamente, appassionato della dinamica dei veicoli, sono approdato all'Università Statale di Rostov sulle Ferrovie () con un tema di dissertazione dottorale sulla dinamica dell'arresto dei treni merci. Attualmente, dirigo lo sviluppo di complessi di simulazione per il trasporto ferroviario nella nostra università e insegno corsi specializzati al dipartimento di "Veicoli a trazione."
Da quanto sopra, è nata l'idea di creare un simulatore che permettesse agli sviluppatori di addon di avere il pieno controllo sui processi fisici che avvengono nel materiale rotabile. Simile al simulatore spaziale Orbiter, per il quale in passato ho sviluppato un addon sotto forma di una famiglia di razzi vettori basati sul R-7. Un anno fa ho iniziato questo progetto e mi sono immerso completamente in esso. Il 26 dicembre 2018 è stata rilasciata questa .
Il mio lavoro è stato notato da appassionati e da un noto creatore di contenuti visivi per simulatori ferroviari che mi ha offerto aiuto e collaborazione per lo sviluppo futuro del progetto. Successivamente si è unito a noi un altro sviluppatore — ), creatore di percorsi per ZDsimulator. Il nostro lavoro insieme ci ha portato al primo rilascio. Nel video — una panoramica di come appare il gioco al suo primo rilascio

Caratteristiche del simulatore RRS
Innanzitutto, si tratta di un'architettura software aperta. Oltre al fatto che il codice del simulatore è aperto, esiste un'API e un SDK progettati per gli sviluppatori di componenti aggiuntivi. La barriera all'ingresso è piuttosto alta: sono richieste competenze di base nello sviluppo in C++. Il simulatore è scritto proprio in questo linguaggio, utilizzando il compilatore GCC e la sua variante MinGW per il sistema operativo Windows. Inoltre, è preferibile che lo sviluppatore conosca il framework Qt, poiché molte delle sue concetti sono alla base dell'architettura del gioco.
Tuttavia, con sufficiente impegno e volontà, questo progetto offre agli sviluppatori di componenti aggiuntivi enormi opportunità. Il materiale rotabile è implementato come moduli basati su librerie dinamiche. L'elemento strutturale principale nel simulatore è l'unità di materiale rotabile, o un'unità di movimento (UM) — carro (non motorizzato o parte di un treno motore) o sezione di locomotiva. L'API consente di impostare la coppia applicata alle ruote dell'UM, ricevendo in cambio la velocità angolare delle ruote, oltre a parametri esterni come tensione e tipo di corrente nella rete di contatto. Il simulatore non sa né vuole sapere altro, lasciando la fisica del funzionamento delle apparecchiature interne alla responsabilità dello sviluppatore della specifica locomotiva o carro.
Non è difficile capire che un approccio relativamente a basso livello consente di realizzare le più minute sfumature dello schema della locomotiva. Inoltre, il pacchetto del simulatore include un insieme di attrezzature standard installabili sui mezzi di trasporto domestici: la gru del macchinista n.° 395, il distributore d'aria n.° 242, la valvola del freno ausiliario n.° 254 e altri componenti dell'attrezzatura di frenatura. Allo sviluppatore dell'integrazione basta semplicemente collegare questi elementi in uno schema pneumatico della particolare locomotiva o carro. Inoltre, è disponibile un'API per la creazione di moduli di equipaggiamento personalizzati.
L'architettura RRS si basa sull'interazione di due processi principali
- simulatore — un motore fisico di dinamica del treno, TrainEngine 2, che implementa la fisica del movimento del treno tenendo conto di numerosi fattori esterni, considerando l'interazione delle unità mobili tramite dispositivi di accoppiamento e gestendo i dati provenienti da moduli esterni che realizzano la fisica del funzionamento dei veicoli ferroviari.
- visualizzatore — un sottosistema grafico che esegue la visualizzazione del movimento del treno, costruito sulla base di un motore grafico
Questi sottosistemi interagiscono tra loro tramite una memoria condivisa, implementata sulla base della classe QSharedMemory del framework Qt. Le prime versioni demo utilizzavano IPC basato su socket, e in futuro è previsto un ritorno a questa tecnologia, tenendo conto delle modifiche a parti del simulatore e delle esigenze future. Il passaggio alla memoria condivisa è stato in parte una misura forzata, che si è evoluta nel tempo.
Non descriverò i dettagli — molte delle peripezie dello sviluppo di questo progetto sono già state esposte nelle mie pubblicazioni sulla piattaforma, in particolare ho un ciclo piuttosto ampio di , nato dalla pratica di lavorare a questo progetto.
Non tutto va come si sperava nel progetto. In particolare, il sistema grafico è ancora lontano dalla perfezione in termini di qualità di rendering, e anche le prestazioni del simulatore lasciano a desiderare. Questo rilascio ha un obiettivo: far conoscere la comunità degli appassionati di trasporti ferroviari al progetto, delinearne le potenzialità e finalmente creare un simulatore ferroviario open-source e multipiattaforma con un API avanzato per lo sviluppo di addon.
Prospettive
Le prospettive dipendono da voi, nostri cari futuri utenti e sviluppatori. Il progetto è aperto, esiste , dove è possibile scaricare il simulatore, con , il cui contenuto sarà continuamente aggiornato. Esiste del progetto, , e , dove è possibile ricevere consulenza e assistenza dettagliate.
Grazie per l'attenzione!
Fonte: habr.com
