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

| このドキュメントは、ForceSeatMI 2.63以降にのみ適用されます。旧バージョンのAPIはこのドキュメントでは扱いません。ForceSeatMI 2.63以降は、インターフェースおよびバイナリレベルで2.61以前のバージョンとの後方互換性がありません。古いForceSeatMIから2.63以降に切り替える場合、アプリケーションのソースコードに変更が必要になります。 |
| ForceSeatMIは、ForceSeatPMソフトウェアの一部としてインストールされるDLLを使用します。お使いのコンピューターにForceSeatPMがインストールされていることを確認してください。 |
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ビットを設定することです。推奨事項は次のとおりです:
つまり、ForceSeatMI_BeginMotionControl/ForceSeatMI_EndMotionControlを使用してランタイム – メインメニューの遷移を処理し、stateを使用して短時間の一時停止イベントを処理することをお勧めします。
stateフィールドは8ビットで構成されていますが、現在のバージョンでは最初のビットのみが使用されます。
| stateフィールドを設定する場合は、FSMI_POS_BIT_STATEまたはFSMI_TEL_BIT_STATEをmaskに追加することを忘れないでください。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 |
