Russian Railway Simulator (RRS): перший публічний реліз

Настав той довгоочікуваний мною день, коли я нарешті можу уявити цю розробку. Проект було розпочато рівно рік тому, 1 вересня 2018 року, принаймні в репозиторії RRS на Gtihub перший коміт має саме таку дату.

Пасажирський поїзд на станції Ростов Головний (клікабельно)

Russian Railway Simulator (RRS): перший публічний реліз

Що таке RRS? Це відкритий кросплатформовий симулятор рухомого складу колії 1520 мм. Читач закономірно запитає: «Дозвольте, а навіщо потрібен цей проект, якщо симуляторів залізничної тематики, як комерційних, і відкритих, достатню кількість?» За відповіддю на це питання я і пропоную заглянути під кат

Історія проекту

Колись давним давно, 2001 року, побачив світ Microsoft Train Simulator (MSTS), що породив нашій країні величезне співтовариство ж/д-симмеров. За кілька років, які проіснував цей проект (поки Майкрософт не закинула його, зайнявшись цікавішими для неї речами, на кшталт збанкрутування Нокії тощо), проект обріс масою створених для нього доповнень: маршрутів, рухомого складу, сценаріїв.

На основі MSTS, згодом, було створено низку інших проектів, такі як OpenRails, RTrainSim (RTS) та інші доповнення та похідні. З'явилися і комерційні проекти, такі як знаменитий trainz. І все б добре, але багатьох любителів залізничного транспорту ці продукти не влаштовують з цілком об'єктивних причин — вони ніяк не відображають специфіки вітчизняного рухомого складу, що експлуатується та розробляється на пострадянському просторі. Особливо гостро це проявляється при погляді на те, як реалізуються гальма поїзда — у жодному з перерахованих проектів немає і не буде нормальної реалізації автоматичних гальм системи Матросова.

У неблизькому вже 2008 році з'явився інший проект. ZDSimulator, розроблений В'ячеславом Усовим Проект чудовий тим, що перелічені вище недоліки він враховує і виправляє, при цьому спочатку орієнтований на рухомий склад російської колії. Але є одне велике "але" - проект пропрієтарний і закритий, архітектурно не допускає впровадження в нього власного рухомого складу.

Сам я прийшов до залізничної тематики у 2007 році, коли почав працювати у ВАТ ВЕЛНДІ, на посаді наукового співробітника, а після захисту кандидатської дисертації у 2008 році – старшого наукового співробітника. Тоді ж я познайомився з останніми на той момент досягненнями в галузі залізничних ігор-симуляторів. І те, що я побачив, мені не сподобалося, а проекту ZDSimulator на той момент ще не було. Надалі я, захоплений динамікою рухомого складу, прийшов до Ростовського державного університету шляхів сполучення (РГУПС) з темою докторської дисертації з динаміки гальмування вантажного поїзда. На сьогоднішній день я керую розробкою тренажерних комплексів залізничного транспорту для нашого вишу та викладаю профільні дисципліни на кафедрі «Тяговий рухомий склад».

У зв'язку з усім переліченим вище виникла ідея створення симулятора, який дозволяв би розробнику доповнення для нього отримати повний контроль над фізичними процесами, що протікають в рухомому складі. Подібно до космічного симулятора Orbiter, для якого я розробив свого часу доповнення у вигляді сімейства ракет носіїв на базі Р-7. Рік тому я взявся за цю роботу та пішов у неї з головою. 26 грудня 2018 року побачила світ ось ця технологічна демка.

Моя робота була помічена ентузіастами, і відомий у колах залізничних симерів, творець візуального контенту для ZDsimulator Роман Бірюков (Ромич РЖДЗЗ) запропонував мені допомогу та співпрацю у подальшому розвитку проекту. Пізніше до нас приєднався ще один розробник. Олександр Міщенко (Ulovskii2017), творець маршрутів для ZDsimulator. Наша співпраця привела нас до першого релізу. На відео – деякий огляд того, як гра виглядає до свого першого релізу

Особливості симулятора RRS

Насамперед це — відкрита програмна архітектура. Не говорячи навіть про те, що код симулятора відкритий, існує API і SDK, орієнтований на розробників сторонніх доповнень до нього. Поріг входження досить високий - потрібні базові навички розробки мовою C++. Симулятор написаний саме на ньому, із застосуванням компілятора GCC та його варіанта MinGW для операційної системи Windows. Крім того, бажано знайомство розробника з фреймворком Qt, оскільки багато концепцій з нього лежать в основі архітектури гри.

Однак, за належної старанності та бажання, цей проект відкриває для розробника доповнень величезні можливості. Рухомий склад реалізується як модулів з урахуванням динамічних бібліотек. Основним структурним елементом у симуляторі є одиниця рухомого складу, або рухома одиниця (ПЕ) - вагон (несамохідний або у складі моторвагонного поїзда) або секція локомотива. API дає можливість задавати момент, що крутить, прикладений до колісних пар ПЕ, у відповідь отримуючи кутову швидкість колісних пар, а так само зовнішні параметри, на зразок напруги і роду струму в контактній мережі. Більше симулятор ні про що не знає і не хоче знати, що залишає фізику роботи внутрішнього обладнання на совісті розробника конкретного локомотива або вагона.

Неважко здогадатися, що такий відносно низькорівневий підхід дає змогу реалізувати найдрібніші нюанси схеми локомотива. Крім того, до комплекту симулятора входить набір стандартного обладнання, що встановлюється на вітчизняний рухомий склад: поїзний кран машиніста ум. №395, розподільник повітря ум. №242, кран допоміжного гальма ум. №254 та інші елементи гальмівного обладнання. Розробнику доповнення достатньо лише з'єднати ці елементи у пневматичну схему конкретного локомотива чи вагона. Крім того, є API для створення власних блоків обладнання.

Архітектурно RRS побудований на взаємодії двох основних процесів

  • симулятор - фізичний двигун динаміки поїзда TrainEngine 2. Реалізує фізику руху поїзда з урахуванням безлічі зовнішніх факторів, враховуючи взаємодію рухомих одиниць через зчіпні прилади, займається обробкою даних, що надходять із зовнішніх модулів, що реалізують фізику роботи обладнання рухомого складу
  • глядач - графічна підсистема, що виконує візуалізацію руху поїзда, побудована на базі графічного двигуна OpenSceneGraph

Ці підсистеми взаємодіють між собою через загальну пам'ять, що реалізується на базі класу QSharedMemory фреймворку Qt. Перші демо-версії використовували IPC на базі сокетів, і надалі планується повернення на цю технологію з огляду на доопрацювання деяких частин симулятора та потреби з прицілом на майбутнє. Перехід на загальну пам'ять був певною мірою вимушеним заходом, який зжив себе.

Не описуватиму нюанси — багато з перипетій розвитку цього проекту вже викладено в моїх публікаціях на ресурсі, зокрема я досить великий. цикл туторіалів по движку OpenSceneGraph, що виріс саме з практики роботи над цим проектом.

У проекті не все так гладко, як хотілося б. Зокрема, графічна підсистема дуже далека до досконалості щодо якості рендерингу, та й продуктивність сима залишає бажати кращого. Даний реліз має одну мету - познайомити співтовариство любителів залізничного транспорту з проектом, окреслити його можливості і створити відкритий, кросплатформовий залізничний симулятор з просунутим API для розробника доповнень.

Перспективи

Перспективи залежать від вас, наші дорогі майбутні користувачі та розробники. Проект відкритий, існує офіційний сайт, де можна завантажити симулятор, з документацією, Склад якої буде безперервно поповняться. Існує форум проекту, група ВК, І канал на YouTube, де можна отримати найдокладнішу консультацію та допомогу.

Дякуємо за увагу!

Джерело: habr.com

Додати коментар або відгук