ForceSeatMIは、あらゆるアプリケーションやゲーム(以下、SIMと表記)にモーションプラットフォームのサポートを追加できる、使いやすく強力なインターフェースです。ほとんどのアプリケーションでは、SIMからハードウェアを直接制御する必要はありません。そのため、ForceSeatMIはテレメトリーまたはポジショニングリクエストをForceSeatPMに送信するためにのみ使用されます。このアプローチにより、テレメトリーデータを実際のプラットフォームモーションに変換する責任がSIMからForceSeatPMに委譲されます。また、SIMが実装する必要のあるエラー処理も簡素化されます。

ForceSeatMIの最新バージョンでは、逆運動学を使用してハードウェアを制御することが可能です。SIMは必要なトップフレーム位置を送信し、ForceSeatPMが必要なアーム(またはアクチュエーター)の位置を計算します。この機能は、力のシミュレーションではなく精密な位置決めが必要なアプリケーションで使用できます。

Fsmi Diagram (1)

このドキュメントは、ForceSeatMI 2.63以降にのみ適用されます。旧バージョンのAPIはこのドキュメントでは扱いません。ForceSeatMI 2.63以降は、インターフェースおよびバイナリレベルで2.61以前のバージョンとの後方互換性がありません。古いForceSeatMIから2.63以降に切り替える場合、アプリケーションのソースコードに変更が必要になります。

機能

  • SIMは、力のシミュレーション(テレメトリー)、高速トップフレーム位置決め、精密トップフレーム位置決めの動作モードから選択できます
  • SIMはテレメトリーデータを実際のモーター位置に変換する必要がありません – これはForceSeatPMによって行われます
  • SIMは特定のモーションプラットフォームハードウェアに依存しません。ハードウェア関連の調整はForceSeatPM内で行われます
  • ForceSeatPMのすべての診断および処理機能は引き続き利用可能で、使用できます

パッケージ内容

  • ForceSeatMI_Loader.c – 実際のDLL(ForceSeatPMによってインストールされます)への関数呼び出しを転送するラッパー
  • ForceSeatMI_Common.h、ForceSeatMI_Common.cs – 型と列挙型を含むヘッダー
  • ForceSeatMI_Functions.h – 純粋なC/C++ API
  • ForceSeatMI.cs – C# API
  • ForceSeatMI_Telemetry.h、ForceSeatMI_Telemetry.cs – テレメトリーデータ用の構造体
  • ForceSeatMI_Positioning.h、ForceSeatMI_Positioning.cs – ポジショニングデータ用の構造体
  • ForceSeatMI_TactileTransducers.h、ForceSeatMI_TactileTransducers.cs – 触覚トランスデューサーエフェクト用の構造体
  • ForceSeatMI_Status.h、ForceSeatMI_Status.cs – 現在のモーションプラットフォームステータスデータ用の構造体
  • Unity/*.cs – Unity 3D C# API
  • Plugins/UnrealEngine – 車両および航空機のテレメトリー抽出用のヘルパークラスを備えた専用Unreal Engineプラグイン
  • Examples – サンプル
ForceSeatMIは、ForceSeatPMソフトウェアの一部としてインストールされるDLLを使用します。お使いのコンピューターにForceSeatPMがインストールされていることを確認してください。

要件

  • 次の言語とフレームワークがすぐに使用できます:C、C++、C#、Unity 3D(C#)、Unreal Engine(C++)
  • ネイティブAPI DLLはVisual Studio 2015でコンパイルされています – MSVCとの静的リンクが使用されています。
  • Unity 3Dのサンプルには、Unity 5.x以降が必要です
  • Unreal Engineのサンプルには、Unreal Engine 4.14以降が必要です
  • C#のサンプルには、少なくともVisual Studio 2013 Express for Windows Desktopと.NET Framework 4.0が必要です。
  • C/C++のサンプルには、少なくともVisual Studio 2013 Express for Windows Desktopが必要です。
  • Windows PCのみをサポートしています

動作モード

ForceSeatMIは、以下に説明するモードのいずれかで動作します。初めてのユーザーには、最もシンプルな例であり、組み込みプロファイルSDK – Positioningで動作するLogical Table Positionから始めることをお勧めします。

モード説明アプリケーション推奨プロファイル
テレメトリーデータこのモードでは、SIMは車両の位置、G-フォース、および車両座標系における加速度に関する情報をForceSeatPMに直接送信します。力からトップフレームの動きへの変換全体は、ForceSeatPMスクリプティングエンジン内で行われます。これにより、SIMで何も変更することなく、マッピングやフィルターパラメーターを簡単に変更できます。 ゲームおよび車両物理シミュレーションSDK – Vehicle Telemetry
SDK – Plane Telemetry
論理テーブル位置このモードでは、SIMは抽象単位(最大回転/移動のパーセント)でトップフレーム位置(ヨー、ピッチ、ロール、ヒーブ、スウェイ、サージ)を送信します。これにより、SIMはトップフレーム位置を完全に制御できますが、正しい角度とオフセットを計算するのはSIMの責任となります。 フレーム位置をより細かく制御したいアプリケーション向けSDK – Positioning
精密テーブル位置このモジュールは、SIMによって提供されるトップフレーム変換マトリックスを使用し、実世界の単位ですべてのアーム/アクチュエーターの位置を計算します。機器テストアプリケーションSDK – Positioning

実装の詳細

structSizeは必須フィールドであり、必ず入力する必要があります。これは、DLLとSIM間の後方/前方互換性を処理するために使用されます。

telemetry.structSize = sizeof(ForceSeatMI_Telemetry);

maskは、他のどのフィールドが設定されているかを示します。たとえば、SIMがFSMI_TopTablePositionLogical構造体でrollを提供する場合、maskフィールドにはFSMI_POS_BIT_POSITIONビットが含まれている必要があります。常にstateフィールドをマスクに含める必要があります(FSMI_POS_BIT_STATEまたはFSMI_TEL_BIT_STATE)。

#define FSMI_POS_BIT_STATE ...
#define FSMI_POS_BIT_POSITION ...
#define FSMI_POS_BIT_MATRIX ...
#define FSMI_POS_BIT_MAX_SPEED ...
#define FSMI_POS_BIT_TRIGGERS ...
#define FSMI_POS_BIT_AUX ...
 
#define FSMI_TEL_BIT_STATE ...
#define FSMI_TEL_BIT_RPM ...
#define FSMI_TEL_BIT_SPEED ...
 
#define FSMI_TEL_BIT_YAW_PITCH_ROLL ...
#define FSMI_TEL_BIT_YAW_PITCH_ROLL_ACCELERATION ...
#define FSMI_TEL_BIT_YAW_PITCH_ROLL_SPEED ...
#define FSMI_TEL_BIT_SWAY_HEAVE_SURGE_ACCELERATION ...
#define FSMI_TEL_BIT_SWAY_HEAVE_SURGE_SPEED ...
 
#define FSMI_TEL_BIT_PEDALS_POSITION ...
#define FSMI_TEL_BIT_GEAR_NUMBER ...
#define FSMI_TEL_BIT_GROUND_TYPE ...
#define FSMI_TEL_BIT_COLLISION ...
 
#define FSMI_TEL_BIT_GLOBAL_POSITION ...
#define FSMI_TEL_BIT_TIME ...
#define FSMI_TEL_BIT_TRIGGERS ...
 
#define FSMI_TEL_BIT_MAX_RPM ...
#define FSMI_TEL_BIT_FLAGS ...
#define FSMI_TEL_BIT_AUX ...

ForceSeatMIがSIMで使用される場合、SIMは少なくとも1回ForceSeatMI_BeginMotionControlを呼び出す必要があります。そうしないと、常に一時停止状態になります。最初の呼び出しの後、一時停止の処理方法を選択できます。1つのオプションはForceSeatMI_EndMotionControlを呼び出すことで、もう1つのオプションはstateビットを設定することです。推奨事項は次のとおりです:

  1. SIMがランタイムモードに入る場合(テレメトリーデータを送信する予定の場合)、ForceSeatMI_BeginMotionControlを呼び出します
  2. SIMがランタイムモードを終了する場合(しばらくテレメトリーデータを送信しない場合)、ForceSeatMI_EndMotionControlを呼び出します
  3. ランタイム中に短い一時停止イベントがある場合(例:ユーザーがキーボードで一時停止を押した場合)、SIMはstateフィールドを使用する必要があります

つまり、ForceSeatMI_BeginMotionControl/ForceSeatMI_EndMotionControlを使用してランタイム – メインメニューの遷移を処理し、stateを使用して短時間の一時停止イベントを処理することをお勧めします。

stateフィールドは8ビットで構成されていますが、現在のバージョンでは最初のビットのみが使用されます。

  • ビット番号0 — 1(FSMI_STATE_PAUSE)は、SIMのランタイムモードが一時停止していることを意味し、0(FSMI_STATE_NO_PAUSE)は、SIMのランタイムモードが実行中であることを意味します。
stateフィールドを設定する場合は、FSMI_POS_BIT_STATEまたはFSMI_TEL_BIT_STATEmaskに追加することを忘れないでください。ForceSeatMI_BeginMotionControlが呼び出された後、モーションプラットフォームの一時停止を解除するために、少なくとも1回stateを設定してください。

サンプル

次のサンプルがSDKと一緒に提供されています。各サンプルに正しいプロファイルを使用してください。

サンプル説明必要なプロファイル
TableLogPos_CPP
TableLogPos_CS
TableLogPos_Unity
TableLogPos_Unreal
最大移動量のパーセントでロール、ピッチ、ヨー、ヒーブ、スウェイ、サージを指定してトップテーブル位置を制御する方法を示します。あらゆる種類のモーションプラットフォームの制御に使用できます。 SDK – Positioning
TablePhyPos_CPP
TablePhyPos_CS
TablePhyPos_Unity
TablePhyPos_Unreal
実世界の単位でロール、ピッチ、ヨー、ヒーブ、スウェイ、サージを提供することにより、精密なトップテーブル位置を指定する方法を示します。3DoFおよび6DoFマシンでのみ動作します。 SDK – Positioning
TableMatrixPos_CPP
TableMatrixPos_CS
変換マトリックスを提供することにより、精密なトップテーブル位置を指定する方法を示します。6DoFマシンにのみ推奨されます。 SDK – Positioning
Telemetry_Veh_Unity
Telemetry_Veh_Unreal
SIMからForceSeatPMに車両テレメトリーデータを送信する方法を示します。SDK – Vehicle Telemetry
Telemetry_Fly_Unity
Telemetry_Fly_Unreal
SIMからForceSeatPMに航空機テレメトリーデータを送信する方法を示します。SDK – Plane Telemetry

最後に

  • プラットフォームが動かない、またはシステムが一時停止状態にある場合は、次を確認してください:
    • ForceSeatPMで正しいプロファイルがアクティブになっているか確認してください
    • ForceSeatPMで正しいプロファイルがインポートされているか確認してください(動作モードが異なると、必要なプロファイルも異なります)
    • ForceSeatMI診断を確認して、ForceSeatPMがSIMからデータを受信しているかどうかを確認してください。
    • pausedインジケーターがオンかオフか確認してください
    • maskフィールドを設定することを忘れないでください
    • 一時停止モードを解除するために、正しいstate値を設定することを忘れないでください。
  • ForceSeatMI32.dll/ForceSeatMI64.dllは高性能向けに設計されているため、ログ記録は利用できず、DLLは最小限の必要なデータ整合性チェックのみを実行します。
Sign up to our newsletter
Always be the first to know about new products, updates and company news
  • このフィールドは入力チェック用です。変更しないでください。