ForceSeatMI ist eine einfach zu bedienende, aber leistungsstarke Schnittstelle, die es ermöglicht, Unterstützung für Bewegungsplattformen zu jeder Anwendung oder jedem Spiel (in den folgenden Abschnitten als SIM bezeichnet) hinzuzufügen. In den meisten Anwendungen ist es nicht notwendig, die Hardware direkt aus der SIM zu steuern. Aus diesem Grund wird ForceSeatMI nur verwendet, um Telemetrie- oder Positionierungsanfragen an ForceSeatPM zu senden. Dieser Ansatz überträgt die Verantwortung für die Umwandlung von Telemetriedaten in tatsächliche Plattformbewegungen von der SIM an ForceSeatPM. Außerdem vereinfacht er die Fehlerbehandlung, die die SIM implementieren muss.
Mit der neuesten Version von ForceSeatMI ist es möglich, die Hardware mithilfe von Inverser Kinematik zu steuern. Die SIM sendet die erforderliche Position des oberen Rahmens und ForceSeatPM berechnet die erforderlichen Positionen der Arme (oder Aktuatoren). Diese Funktion kann in Anwendungen verwendet werden, bei denen eine präzise Positionierung anstelle einer Kräftesimulation erforderlich ist.

| Diese Dokumentation gilt nur für ForceSeatMI 2.63 oder neuer. Ältere Versionen der API werden von diesem Dokument nicht abgedeckt. ForceSeatMI 2.63+ ist auch nicht rückwärtskompatibel auf Schnittstellen- und Binärebene mit 2.61 und früheren Versionen. Der Wechsel von älterem ForceSeatMI zu 2.63+ erfordert Änderungen im Quellcode deiner Anwendung. |
| ForceSeatMI verwendet eine DLL, die als Teil der ForceSeatPM-Software installiert wird. Stelle sicher, dass ForceSeatPM auf deinem Computer installiert ist. |
ForceSeatMI arbeitet in einem der unten beschriebenen Modi. Für Erstanwender wird empfohlen, mit Logical Table Position zu beginnen, da dies das einfachste Beispiel ist und mit dem integrierten Profil SDK – Positioning funktioniert.
| Modus | Beschreibung | Anwendungen | Empfohlenes Profil |
| Telemetriedaten | In diesem Modus sendet die SIM Informationen über Fahrzeugposition, G-Kräfte und Beschleunigungen im Fahrzeugkoordinatensystem direkt an ForceSeatPM. Die gesamte Umwandlung von Kräften in Bewegungen des oberen Rahmens erfolgt innerhalb der Scripting-Engine von ForceSeatPM. Dies ermöglicht es, Mapping- und Filterparameter einfach zu ändern, ohne etwas in der SIM ändern zu müssen. | Spiele und Fahrzeugphysiksimulationen | SDK – Vehicle Telemetry SDK – Plane Telemetry |
| Logische Tischposition | In diesem Modus sendet die SIM die Position des oberen Rahmens (Gieren, Nicken, Rollen, Heben, Schwanken und Schub) in abstrakten Einheiten (Prozent der maximalen Rotation/Translation). Dies ermöglicht der SIM die volle Kontrolle über die Position des oberen Rahmens, aber es liegt an der SIM, die korrekten Winkel und Versätze zu berechnen. | Für Anwendungen, die eine bessere Kontrolle über die Rahmenposition haben möchten | SDK – Positioning |
| Präzise Tischposition | Dieses Modul verwendet die von der SIM gelieferte Transformationsmatrix des oberen Rahmens und berechnet die Positionen aller Arme/Aktuatoren in realen Einheiten. | Anwendungen zum Testen von Ausrüstung | SDK – Positioning |
structSize ist ein Pflichtfeld, das ausgefüllt werden MUSS. Es wird verwendet, um Rückwärts-/Vorwärtskompatibilität zwischen DLL und SIM zu handhaben.
telemetry.structSize = sizeof(ForceSeatMI_Telemetry);
mask gibt an, welche anderen Felder gesetzt sind. Wenn die SIM beispielsweise roll in der Struktur FSMI_TopTablePositionLogical bereitstellt, muss das Feld mask das Bit FSMI_POS_BIT_POSITION enthalten. Es ist erforderlich, das Feld state immer in die Maske einzubeziehen (FSMI_POS_BIT_STATE oder 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 ...
Wenn ForceSeatMI in der SIM verwendet wird, muss die SIM mindestens einmal ForceSeatMI_BeginMotionControl aufrufen, andernfalls ist die ganze Zeit der Zustand Pause aktiv. Nach dem ersten Aufruf kannst du wählen, wie du mit der Pause umgehst. Eine Option ist, ForceSeatMI_EndMotionControl aufzurufen, eine andere Option ist, das Bit state zu setzen. Unsere Empfehlung lautet wie folgt:
Mit anderen Worten, es wird empfohlen, ForceSeatMI_BeginMotionControl/ForceSeatMI_EndMotionControl zu verwenden, um Übergänge zwischen Laufzeit und Hauptmenü zu handhaben, und state, um kurze Pausenereignisse zu handhaben.
Das Feld state besteht aus 8 Bits, aber in der aktuellen Version wird nur das erste Bit verwendet.
| Denk daran, FSMI_POS_BIT_STATE oder FSMI_TEL_BIT_STATE zur mask hinzuzufügen, wenn das Feld state gesetzt werden soll. Stelle sicher, dass state mindestens einmal gesetzt wird, um die Bewegungsplattform nach dem Aufruf von ForceSeatMI_BeginMotionControl aus der Pause zu holen. |
Folgende Beispiele werden zusammen mit dem SDK bereitgestellt. Stelle bitte sicher, dass du das richtige Profil für jedes Beispiel verwendest.
| Beispiel | Beschreibung | Erforderliches Profil |
| TableLogPos_CPP TableLogPos_CS TableLogPos_Unity TableLogPos_Unreal | Zeigt, wie die Position des oberen Tisches gesteuert wird, indem Rollen, Nicken, Gieren, Heben, Schwanken und Schub in Prozent der maximalen Bewegungen angegeben werden. Kann zur Steuerung aller Arten von Bewegungsplattformen verwendet werden. | SDK – Positioning |
| TablePhyPos_CPP TablePhyPos_CS TablePhyPos_Unity TablePhyPos_Unreal | Zeigt, wie eine präzise Position des oberen Tisches angegeben wird, indem Rollen, Nicken, Gieren, Heben, Schwanken und Schub in realen Einheiten bereitgestellt werden. Funktioniert nur mit 3DoF- und 6DoF-Maschinen. | SDK – Positioning |
| TableMatrixPos_CPP TableMatrixPos_CS | Zeigt, wie eine präzise Position des oberen Tisches angegeben wird, indem eine Transformationsmatrix bereitgestellt wird. Wird nur für 6DoF-Maschinen empfohlen. | SDK – Positioning |
| Telemetry_Veh_Unity Telemetry_Veh_Unreal | Zeigt, wie Fahrzeugtelemetriedaten von der SIM an ForceSeatPM gesendet werden. | SDK – Vehicle Telemetry |
| Telemetry_Fly_Unity Telemetry_Fly_Unreal | Zeigt, wie Flugzeugtelemetriedaten von der SIM an ForceSeatPM gesendet werden. | SDK – Plane Telemetry |
