Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BIDS ~運転ゲームの表示拡張を容易化するために~

Avatar for TR TR
February 11, 2022

BIDS ~運転ゲームの表示拡張を容易化するために~

株式会社Supporterzさま主催の「技育展2021」のはじめてのアウトプット③で発表したスライドです

Bve Trainsim向けに開発している, 情報共有MOD/ライブラリおよび表示ソフトウェア群について紹介しています

Avatar for TR

TR

February 11, 2022

More Decks by TR

Other Decks in Programming

Transcript

  1. 目次 1. BIDS #とは 2. 開発の動機 3. 使用技術概要 4. プロダクト一覧

    5. 技育展に向けて実装した機能 6. 今後の目標 2021/9/25 2 Tetsu_Otter TetsuOtter
  2. 目次 1. BIDS #とは 2. 開発の動機 3. 使用技術概要 4. プロダクト一覧

    5. 技育展に向けて実装した機能 6. 今後の目標 2021/9/25 3 Tetsu_Otter TetsuOtter
  3. 1. BIDS #とは • 運転ゲームの表示拡張を簡単に行うために開発しているツール群 2021/9/25 4 Image1 by Still

    Photography from Pixabay Image2 by Andrzej Rembowski from Pixabay Tetsu_Otter TetsuOtter Image1 Image2 Control State
  4. 1. BIDS #とは • 日本国内のほか, 韓国等の外国でも使用されている • 目標 → オウチ運転台を簡単に作れて楽に使えるツールをつくる

    2021/9/25 5 ※ リバースエンジニアリングにかかる労力は考えないこととする 実車の部品をリバエンして使用するのではなく, 3Dプリンタ等でパーツを自作する事例もある Tetsu_Otter TetsuOtter With BIDS 運転ゲーム ゲームと連動! Image by しなの~じ (@Shinanoji_1097) 画像使用許可取得済み
  5. 目次 1. BIDS #とは 2.開発の動機 3. 使用技術概要 4. プロダクト一覧 5.

    技育展に向けて実装した機能 6. 今後の目標 2021/9/25 6 Tetsu_Otter TetsuOtter
  6. 2. 開発の動機 • そもそも →→→ 鉄オタ • フリーの鉄道運転シミュレーションゲームで遊ぶ 2021/9/25 7

    Screenshot : https://bvets.net/ Screenshot : https://openbve-project.net/ • 遊んでいるうちに 標準の機能では不満を持つようになる Tetsu_Otter TetsuOtter
  7. 2. 開発の動機 不満1. 基本的に操作はキーボード経由で行う仕様だった → どうせならキーボードじゃなくてコントローラーを使いたい → もっと言うと, 自分でコントローラーを作って使いたい 不満2.

    基本的に表示はウィンドウ内で完結 → 速度等をウィンドウ内だけじゃなくて外部でも表示させたい 2021/9/25 8 ※ 著作権が不安なのでopenBVEのアイコンを使用していますが, 開発当時のターゲットはBVE Trainsim 5でした Icon from https://github.com/leezer3/OpenBVE/blob/master/graphics/logo_icon.svg (Public Domain) Power /Brake Speed etc. Tetsu_Otter TetsuOtter コントローラ 速度計など 運転ゲーム
  8. 2. 開発の動機 • 既存の代替手段が存在 (BVE Trainsim向け) 2021/9/25 9 Mackoy.TsmcInterface.dll Communication.dll

    開発者 mackoy 様 (BVE Trainsim 開発者) Rock_On 様 プラグインの種類 InputDevice ATS 機能 力行5段/制動9段/ボタン4個の操作 情報を外部に送信 欠点 情報の出力機能がない (※) UDP/IPを用いてデータを外部送信 →Arduino等のマイコンでは重い ※ TSマスコン自体に情報を表示する機能が存在しないため, 当たり前ではある Tetsu_Otter TetsuOtter
  9. 目次 1. BIDS #とは 2. 開発の動機 3.使用技術概要 4. プロダクト一覧 5.

    技育展に向けて実装した機能 6. 今後の目標 2021/9/25 11 Tetsu_Otter TetsuOtter
  10. 3. 使用技術概要 Key Value 使用言語 C#, C++ ほか 動作環境 .NET5以上が動作する環境

    (一部はnet35にも対応) 通信手段 (ローカル) MemoryMappedFile (共有メモリ) 通信手段 (マシン間) • SerialPort (RS232C ほか) • UDP/IP • TCP/IP • WebRTC etc. 2021/9/25 12 Tetsu_Otter TetsuOtter
  11. 目次 1. BIDS #とは 2. 開発の動機 3. 使用技術概要 4.プロダクト一覧 5.

    技育展に向けて実装した機能 6. 今後の目標 2021/9/25 13 Tetsu_Otter TetsuOtter
  12. 4. プロダクト一覧 1. BIDSSMemLib • 共有メモリ空間へのアクセスとデータの管理を行うライブラリ群 • https://github.com/Tralsys/BIDSSMemLib 2021/9/25 15

    Tetsu_Otter TetsuOtter BIDSSMemLib (bve5/obve) SMemCtrler SMemIF BIDSSMemLib (rw) SMemCtrler SMemIF BIDS_Server BIDSSMemLib (rw) SMemCtrler SMemIF caMon 共有メモリ (MemoryMappedFile) 運転ゲーム (BVE Trainsim / openBVE ほか) .NETの バージョン間差異を 吸収
  13. 4. プロダクト一覧 2. BIDS_Server • 通信モジュールを管理するソフトウェア • https://github.com/Tralsys/BIDS_Server • そのうちstaticクラスを使わない構造に作り直したい

    2021/9/25 16 Tetsu_Otter TetsuOtter BIDS_Server Serial Mod UDP Mod SkyWay Mod ※ SkyWay Modは現在計画中段階 UDP Mod BIDS_Server BIDSSMemLib (rw) interfaceを用いた アセンブリの動的ロード IPアドレス指定が不要 → かんたん!
  14. 4. プロダクト一覧 3. BIDSDispWeb • Webブラウザ上で情報を表示するプロジェクト • https://github.com/Tralsys/BIDSDispWeb • CSHTML5を使用して作成

    • WebRTC (SkyWay) を用いてデータ共有 • 保守性と優先度の都合でしばらく放置中 2021/9/25 17 Tetsu_Otter TetsuOtter わかりづらいですが 上のPCで起動したゲームと Xperia/iPhoneの表示が 連動しています
  15. 4. プロダクト一覧 4. BIDSDispX • Xamarinを用いてクロスプラットフォームな表示を実現 • https://github.com/Tralsys/BIDSDispWeb • レイアウトで小数で受けときながら内部では整数で計算するという仕様がつらかった

    • 通信遅延がひどいため, ある程度解消できるまで放置中 (最大で500ms近い遅延は許容できなかった) 2021/9/25 18 Tetsu_Otter TetsuOtter わかりづらいですが 左のPCで起動したゲームと タブレット内の時刻表示を 連動させています
  16. 4. プロダクト一覧 5. caMon • Windows上で簡単に表示拡張を実現できるように開発したアプリ • GitHub上 + Microsoft

    Storeでの公開 • WPFを用いてレイアウトを実装 → MVVMパターンでかんたんに画面を作れる! (目標) 2021/9/25 19 Tetsu_Otter TetsuOtter ゲーム画面
  17. 目次 1. BIDS #とは 2. 開発の動機 3. 使用技術概要 4. プロダクト一覧

    5.技育展に向けて実装した機能 6. 今後の目標 2021/9/25 20 Tetsu_Otter TetsuOtter
  18. 5. 技育展に向けて実装した機能 1. 任意データの共有機能 • 将来性のあるデータ構成を事前に定義しておくのは無理がある (例) : 車の変速機について, 技術革新によりCVTが誕生した

    -> これを予め予測するのは不可能 ✓文字列をKeyとして任意のデータを共有できる機能を実装 ✓ライブラリのアップデートなく技術革新に追従できる 2021/9/25 21 Tetsu_Otter TetsuOtter データにラベリングして共有すれば良い!
  19. 5. 技育展に向けて実装した機能 1. 任意データの共有機能 ×実装の都合で, 情報の共有範囲に制約ができてしまった ➢ BIDS_Serverを経由する共有メモリ空間から共有された情報にアクセスできない ×実装の都合で, 1つのデータ共有ごとに最低4KBのメモリ空間を使う

    (未検証) ➢ Capacityとして最低4096byteが指定されるため, おそらくそれだけの空間を占有している ➢ 将来的に, こまごまとしたデータを1つの共有メモリ空間で共有できるようにしたい 2021/9/25 22 Tetsu_Otter TetsuOtter BIDS_Server Data Source マシン間通信 Client BIDS_Server 共有メモリ 共有メモリ ×
  20. 5. 技育展に向けて実装した機能 2. スクリプト実行機能 • 多種多様な機器構成にはじめから対応するのは事実上不可能 (BVEは様々なアドオンを組み合わせて遊ぶことができるが, その組み合わせを事前に知ることは難しい) ✓コンパイルレスにデータ共有を定義できる「スクリプト実行機能」を実装 ➢

    Microsoft.CodeAnalysis.CSharp.Scriptingパッケージを使用 (ちなみに : Documentがなかったため, ソースとにらめっこしながら書いた) ✓動作は遅くなってしまうものの, 「かんたんにデータ拡張」を実現 2021/9/25 23 Tetsu_Otter TetsuOtter アドオン作成者に組み合わせを書いてもらえばいい!
  21. 目次 1. BIDS #とは 2. 開発の動機 3. 使用技術概要 4. プロダクト一覧

    5. 技育展に向けて実装した機能 6.今後の目標 2021/9/25 24 Tetsu_Otter TetsuOtter
  22. 6. 今後の目標 • BIDS_Serverの実装し直し • staticクラスに機能を実装するのはやはり好ましくないので, 実装し直す → MOD側の実装にも手を入れる必要があり, コスト大なのが難点

    • クラスが巨大(当社比)なので, もっと小さくしたい • マイコン向けライブラリの充実 • 現状はかなり使いづらいので, 使いやすくしたい • シリアル通信以外にも対応したい • 設定用ソフトを作って簡単にプログラムを組めるようにしたい • BIDSDispXをリリース OR MAUIで作り直し • Androidタブレットで動作するのはやはり魅力的 (Fireタブレットとか約6000円で手に入る) • WiFi経由のほか, Bluetooth経由の通信を試したい 2021/9/25 25 Tetsu_Otter TetsuOtter
  23. 6. 今後の目標 • BVE Trainsim, openBVE以外への対応 • TRAIN CREW Prologue

    (溝月レイル 様) が近日早期アクセスでリリース → 対応させたい • このほか, ETS2等のドライビングシミュレーションゲームでも使用したい • ドキュメントを充実させる • ドキュメントが散逸してしまっているため, 一ヶ所にまとめる • 英語のドキュメントも作成する • テストの実装を増やす • 今のところは一部にしか実装できていないため, バグ駆逐のためにもテストコードをなるべく増やしていきたい 2021/9/25 26 Tetsu_Otter TetsuOtter
  24. 付録1. 共有メモリを使用する理由 1. データに「いつでも / 誰でも」アクセスできる ✓ アプリケーションユーザは, 送信先を意識せず使用することができる ✓

    クライアントアプリケーションは, どのタイミングでもデータの読み取りができる ✓ ホスト側は, クライアントからのリクエストに対応する処理が不要になる 2. ネットワークを介さない ✓ ファイアウォールの例外設定ポップアップが出ない 2021/9/25 28 Tetsu_Otter TetsuOtter クソウザい
  25. 付録2. 通信方式について • BIDS_Serverに以下を実装 1. 文字列コマンドにてデータのリクエストを行い, レスポンスにてデータを得る方式 2. 文字列コマンドにて必要なデータ情報を送信し, データに変化があった際にそのデータを送信してもらう方式

    3. データの更新があった際に送られてくるバイナリデータ(リトルエンディアン形式)を読む方式 (但し, 通信速度とバッファの都合上Serialではオプションでの有効化が必要) 4. 文字列コマンドにて操作命令を送信する方式 • 任意データの送受信機能は未実装 • 上記のほか, JSON形式でデータのGet/Setを行う方式も検討中 2021/9/25 29 Tetsu_Otter TetsuOtter
  26. 付録3. MOD一覧 • BIDS_Server用 通信mod 1. Blank MOD -> 空のmod.

    単純に「ロードできるかどうか」のテストに使用する 2. Communication MOD -> Rock_On様のCommunication.dllと同じような動作を行うmod 3. Serial MOD -> Arduino等, COMポートを介して通信を行うために使用するmod 4. SkyWayIF MOD -> (開発中) NTT Communications社のWebRTC Gatewayを介してSkyWayを使用した通信を実現す るためのmod 5. TCP Client-side MOD / TCP Server-side MOD -> TCP/IPにて通信を行うために使用するmod 将来的に実行時オプションでClient/Serverを分けれるようにしたい 6. Test MOD -> 実行時引数で指定したコマンドを実行し, 結果をファイルとConsoleに出力するmod 7. UDP MOD -> UDP/IPにて通信を行うために使用するmod. デフォルトではブロードキャストにより通信を行う 2021/9/25 30 Tetsu_Otter TetsuOtter
  27. 付録3. MOD一覧 • BIDS_Server用 通信mod 8. dgoCtrlUSB (https://github.com/Tralsys/TR.BIDSsvMOD.dgoCtrlUSB) -> TAITO社の電車でGO!用コントローラをBIDSにて使用するためのmod

    金銭面の都合でドライバの署名が行えていないため, ドライバのインストールが非常に面倒 2021/9/25 31 Tetsu_Otter TetsuOtter
  28. 付録3. MOD一覧 • caMon用 画面表示mod 1. E233SP (https://github.com/Tralsys/caMon/tree/master/caMon.pages.e233sp) -> E233系風の計器表示を実装したmod.

    汎用性重視のため下半分のみを実装している 2. E235SP (https://github.com/Tralsys/caMon/tree/master/caMon.pages.e235sp) -> E235系風の計器表示を実装したmod. 上半分の表示内容は独自の内容 3. Sample (https://github.com/Tralsys/caMon/tree/master/caMon.pages.sample) -> コードサンプルとして作成した, BIDSを用いて共有している情報(任意データを除く)を表示するmod 4. BIDSDataUpdateNotifierUsecase (https://github.com/Tralsys/caMon/tree/master/caMon.pages.BIDSDataUpdateNotifierUsecase) -> BIDSDataUpdateNotifierの使用例として作成した, 保安灯の状態を表示するmod 2021/9/25 32 Tetsu_Otter TetsuOtter
  29. 付録3. MOD一覧 • caMon用 画面表示mod 5. TypeBDispW (https://github.com/Tralsys/TR.caMonPageMod.TypeBDispW) -> BIDSDispWebと同じデザインの表示を実現したmod

    6. HoanDisp (https://github.com/Tralsys/TR.caMonPageMod.HoanDisp) -> E233系等の運転台に設置されたサブモニタに表示される保安灯画面を模した表示を実装したmod 7. TIMSDisp (https://github.com/Tralsys/TR.caMonPageMod.TIMSDisp) -> (開発中) E657系風のTIMS表示器のUIレイアウトをE231系風のTIMS表示器のUI配色にて実装したmod 8. LCD4Passenger (https://github.com/Tralsys/caMon.pagemod.LCD4Passenger) -> (設計中) 客室内に設置される案内ディスプレイ風の表示を簡単に実現するためのmod 9. HMIDisp233 (https://github.com/TetsuOtter/caMonPageMod.HMIDisp233) -> CT様から提供して頂いた画像素材を用いて, E233系の運転台に設置されたサブモニタに表示される保安灯画 面の表示を実装したmod 10. BISC (https://github.com/TetsuOtter/TR.caMonPageMod.bisc) -> ビットごとに表示/非表示が割り当てられた画像をまとめて連結するツール. BEの車両アドオン作成補助用ツー ルであり, 他のcaMon向けmodとは性質が少し異なる 2021/9/25 33 Tetsu_Otter TetsuOtter