コンテンツにスキップ
MFTokyo2023の展示の準備でやってたこと

MFTokyo2023の展示の準備でやってたこと

概要

こんにちは、入江田です。

2023年10月14、15日に行われたMaker Faire Tokyo 2023で、現在開発中のスイッチサイエンス新製品「Picossci-CANボード」とDirect Drive Tech社のダイレクトドライブモーターを使用したフォース フィードバック付きDIYハンドルコントローラのデモ展示をスイッチサイエンスブースで行いました。そのデモについてご紹介します!

目標タスク

DIYハンドルコントローラーのデモンストレーションを実現したい

  • この用途に使える新基板「Picossci-CANボード」
  • この用途に使えるモーター「DDT M15」


これらを使ったデモンストレーションを展示で行うのが目標

課題

  • ファームウェア実装をTinyGoで提供したい(昨年達成)
  • 一方的な振動するとかバネっぽい動きを示す単純なデモでは体験として弱い
  • フォースフィードバック対応のあるゲームであればよい体験を提供できる
  • しかし市販ゲームを販促目的で展示に使うことはできない
  • オープンソースな対応ゲームがあれば展示しやすい

オープンソースなフォースフィードバック対応ゲーム

古くからあるタイトルでは以下の2つくらいが見つかった

  • Speed Dreams
  • Live For Speed

しかし、実際にこれらと作成したDIYハンコンを組み合わせてみるといろいろと問題がありました。

  • 「Speed Dreams」ではDIYハンコンをFFBコントローラーとして認識しない
  • 「Live For Speed」では認識されたが、制御が10Hz以下であり体験としてはかなり荒いものだった

ラリーゲーム実装

「Live For Speed」で妥協する案で検討を進めていましたが、ラリーゲーム実装を作成し、オープンソースで公開された実装を発見。

コード: https://github.com/mokiat/rally-mka

デモ: https://mokiat.itch.io/rally-mka



これはGoだけで書かれており、改変が非常に簡単だと見込めましたのでこちらにフォースフィードバック実装を追加する形でデモを実装しようと考えました。

実装期間が足りない

MFTokyo2023期日の1週間前になり、ハンドルコントローラーをあらかじめ東京に送付する必要がありました。
この時点でラリーゲームのコードを読み込んで計算を入れ込む場所の目途を付けたところでした。

明らかに実装調整の時間が足りませんでした。

ハンドルコントローラーを東京に送ったのち、現物が無くても実装できるところを片付けていきました。
が、限度があり最終的にどうしても数値結果を見ながら調整が必要ということになり困り果てました。

エミュレータを突貫で作り始める

会期直前のホテルでの前泊時に調整を進めるために急遽エミュレータを作ることにしました。

PIcossci-CANボードの予備はあったので、それでFFBハンコンダミーデバイスを作り、ゲーム側にはそれをハンコンに見せかけ、PC上の別アプリケーションから操作値を流し込むというものを作り始めました。

構成:

Emulator Application:

  • GUIアプリケーションとして構築
  • スライダーやボタンを操作可能
  • それらの操作値をUSB-CDC(シリアルポート)経由でダミーデバイスに送る
  • ダミーデバイスは受け取った値をHID-JoystickデバイスとしてPC側に状態を送る
  • ゲームアプリケーションはJoystickに従って動き、フォースフィードバックをダミーデバイスに送る
  • ダミーデバイスはフォースフィードバック指令に従ってForce出力を算出しそれをシリアルポートに出力
  • GUIアプリはForce値を円グラフに表示


ここまでを突貫で作ってからゲームアプリケーション側実装の調整を行いました。

実際の操作の様子

ラリーゲーム側の改造

  • 物理エンジン実装にフォース値を出力する機能はない
  • タイヤの向きと進行方向のギャップに係数と速度を掛けたものをフォースフィードバックとした
  • WebHIDというブラウザAPIを使ってジョイスティックを認識する部分を追加
  • FFBのConstantForceコマンドで算出したフィードバック値をHIDデバイスに送信

ダミーと実際のハンコン

  • PCゲームアプリケーションからは同じものに見える
  • ダミー+エミュレータGUIをつないだ状態だとGUI側からの操作が反映し、
  • 実機ハンコンをつないだ状態だと実機操作が反映する

 

ダミー+エミュレータでパラメータ調整

  • フォースフィードバックの計算式が破綻しないか
  • 出力の範囲が想定されたものか
  • 意図した出力が得られているのか


以上をGUIの表示を確認しながら調整をしました。

実際に実施したデモ

実装上よかったこと

  • 今後、再現性の求められるバグシューティングに使えそう
  • ラリーゲームにはお手製ゲームエンジンが使われているがこれは同じコードでネイティブでもWebでも動く
  • 周回をカウントしたりタイム出したりしていないから交代してもらいやすい(ゲームとして完成していないからよかった)

この展示の今後

  • もし次に展示があるなら固定をもうちょっと考えたい
  • 小さい子供が結構ハンドルにぶら下がっちゃうので
  • クランプを奥側にもできるような構造を

まとめ

  • キッズに大盛況
  • 行列でプレイ待ちができることも
  • レースゲーム好きからも好評
  • がんばって良かった
前の記事 Pythonで動的にモジュールをインポートして実行するようにするけど、モジュール側の定義もチェックしたい話