Finalmente chegou o dia tão esperado, quando posso apresentar este desenvolvimento. O projeto foi iniciado exatamente um ano atrás, em 1 de setembro de 2018, pelo menos no o primeiro commit tem exatamente essa data.
O trem de passageiros na estação Rostov Principal (clicável)
O que é RRS? Trata-se de um simulador de composição ferroviária de via de 1520 mm, de código aberto e multiplataforma. O leitor pode naturalmente se perguntar: "Espere, para que serve este projeto, se já existem uma quantidade suficiente de simuladores de temática ferroviária, tanto comerciais quanto abertos?" Para a resposta a essa questão, convido você a olhar abaixo.
História do projeto
Há muito tempo, em 2001, surgiu , que gerou em nosso país uma enorme comunidade de simuladores ferroviários. Nos poucos anos em que esse projeto existiu (até que a Microsoft o abandonou, ocupando-se com coisas mais interessantes para ela, como a falência da Nokia e afins), o projeto acumulou uma grande quantidade de complementos criados para ele: rotas, composições, cenários.
Com base no MSTS, posteriormente, foram criados vários outros projetos, como , e outros complementos e derivados. Também surgiram projetos comerciais, como o famoso E tudo estaria bem, mas muitos amantes do transporte ferroviário não ficam satisfeitos com esses produtos por razões bem objetivas — eles não refletem de forma alguma a especificidade das composições nacionais, que são operadas e desenvolvidas no espaço pós-soviético. Isso se manifesta de forma mais aguda ao se olhar como os freios do trem são implementados — nenhum dos projetos mencionados possui e terá uma implementação adequada dos freios automáticos do sistema Matrosov.
No distante ano de 2008, surgiu outro projeto — , desenvolvido por Vyacheslav Usov. O projeto se destaca por levar em conta e corrigir as deficiências mencionadas, ao mesmo tempo que inicialmente se orienta para composições de bitola russa. Mas há um grande "mas" — o projeto é proprietário e fechado, com uma arquitetura que não permite a inclusão de composições próprias.
Eu mesmo cheguei ao tema ferroviário em 2007, quando comecei a trabalhar na , como pesquisador, e após a defesa da minha tese de doutorado em 2008, como pesquisador sênior. Naquela época, conheci os últimos avanços no campo dos simuladores de jogos ferroviários. E o que vi não me agradou, além de que o projeto ZDSimulator ainda não existia. Mais tarde, fascinado pela dinâmica do material rodante, entrei na Universidade Estadual de Transportes de Rostov () com o tema da tese de doutorado sobre a dinâmica da frenagem de trens de carga. Atualmente, estou liderando o desenvolvimento de complexos simuladores de transporte ferroviário para nossa universidade e lecionando disciplinas especializadas no departamento de 'Material Rodante Trativo'.
Em decorrência de tudo isso, surgiu a ideia de criar um simulador que permitisse ao desenvolvedor de complementos obter controle total sobre os processos físicos que ocorrem no material rodante. Semelhante ao simulador espacial Orbiter, para o qual eu desenvolvi, na época, um complemento na forma de uma família de foguetes lançadores baseados no R-7. Um ano atrás, comecei a trabalhar nessa área e me dediquei completamente a ela. Em 26 de dezembro de 2018, surgiu .
Meu trabalho foi notado por entusiastas, e o famoso nos círculos de simuladores ferroviários, criador de conteúdo visual para o ZDsimulator me ofereceu ajuda e colaboração no desenvolvimento futuro do projeto. Depois, outro desenvolvedor se juntou a nós — ), criador de rotas para o ZDsimulator. Nosso trabalho conjunto nos levou ao primeiro lançamento. No vídeo, há uma visão geral de como o jogo se apresenta em seu primeiro lançamento.

Características do simulador RRS
Antes de mais nada, esta é uma arquitetura de software aberta. Sem mencionar que o código do simulador é aberto, existe uma API e um SDK voltados para desenvolvedores de complementos de terceiros. A barreira de entrada é bastante alta — são necessárias habilidades básicas de programação em C++. O simulador foi escrito exatamente nesse idioma, utilizando o compilador GCC e sua versão MinGW para Windows. Além disso, é desejável que o desenvolvedor tenha familiaridade com o framework Qt, pois muitos conceitos dele estão na base da arquitetura do jogo.
No entanto, com o devido esforço e desejo, este projeto oferece enormes possibilidades para o desenvolvedor de complementos. O equipamento é realizado na forma de módulos baseados em bibliotecas dinâmicas. O principal elemento estrutural no simulador é a unidade de equipamento, ou unidade de movimentação (UM) — vagão (não motorizado ou em um trem automotor) ou seção de locomotiva. A API permite definir o torque aplicado aos pares de rodas da UM, recebendo em resposta a velocidade angular dos pares de rodas, bem como parâmetros externos, como tensão e tipo de corrente na rede de contato. O simulador não sabe nada além disso e não quer saber, deixando a física do funcionamento do equipamento interno sob a responsabilidade do desenvolvedor da locomotiva ou vagão específico.
Não é difícil adivinhar que essa abordagem relativamente de baixo nível permite implementar os menores nuances do esquema da locomotiva. Além disso, o pacote do simulador inclui um conjunto de equipamentos padrão instalados no equipamento nacional: guincho do maquinista nº 395, distribuidor de ar nº 242, válvula de freio auxiliar nº 254 e outros elementos do equipamento de freio. O desenvolvedor do complemento precisa apenas conectar esses elementos em um esquema pneumático da locomotiva ou vagão específico. Além disso, existe uma API para criar seus próprios módulos de equipamento.
Arquitetonicamente, o RRS é construído na interação de dois processos principais
- simulador — motor físico de dinâmica do trem TrainEngine 2. Implementa a física do movimento do trem considerando muitos fatores externos, levando em conta a interação das unidades de movimentação através de dispositivos de acoplagem, processa dados recebidos de módulos externos que implementam a física do funcionamento do equipamento da unidade de movimentação
- viewer — subsistema gráfico, responsável pela visualização do movimento do trem, construído com base no motor gráfico
Esses subsistemas interagem entre si por meio de uma memória compartilhada, implementada com base na classe QSharedMemory do framework Qt. As primeiras versões demo usavam IPC baseado em sockets, e no futuro, está previsto um retorno a essa tecnologia, considerando a melhoria de algumas partes do simulador e as necessidades voltadas para o futuro. A transição para a memória compartilhada foi, em certo sentido, uma medida forçada que se esgotou.
Não vou descrever os detalhes — muitos dos percalços no desenvolvimento deste projeto já foram expostos em minhas publicações no recurso, em particular, tenho um ciclo bastante abrangente , que surgiu precisamente da prática de trabalhar neste projeto.
As coisas no projeto não estão tão fluindo como eu gostaria. Em particular, o subsistema gráfico está bastante distante da perfeição em termos de qualidade de renderização, e o desempenho do sim deixa a desejar. Esta versão tem um único objetivo — apresentar à comunidade de entusiastas de transporte ferroviário o projeto, delinear suas possibilidades e finalmente criar um simulador ferroviário aberto e multiplataforma com uma API avançada para desenvolvedores de extensões.
Perspectivas
As perspectivas dependem de vocês, nossos queridos futuros usuários e desenvolvedores. O projeto é aberto e existe , onde é possível baixar o simulador, com , um conjunto que será continuamente ampliado. Existe projeto, , quanto , onde é possível obter consultas e auxílio detalhados.
Obrigado pela atenção!
Fonte: habr.com
