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.

Fsmi Diagram (1)

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.

Funktionen

  • Die SIM kann zwischen Betriebsmodi wählen: Kräftesimulation (Telemetrie), schnelle Positionierung des oberen Rahmens und präzise Positionierung des oberen Rahmens
  • Die SIM muss Telemetriedaten nicht in tatsächliche Motorpositionen umwandeln – das wird von ForceSeatPM erledigt
  • Die SIM ist nicht von spezifischer Hardware der Bewegungsplattform abhängig, hardwarebezogene Anpassungen werden innerhalb von ForceSeatPM vorgenommen
  • Alle Diagnose- und Verarbeitungsfunktionen von ForceSeatPM sind weiterhin verfügbar und können verwendet werden

Paketinhalt

  • ForceSeatMI_Loader.c – ein Wrapper, der Funktionsaufrufe an die echte DLL weiterleitet (DLL wird von ForceSeatPM installiert)
  • ForceSeatMI_Common.h, ForceSeatMI_Common.cs – Header mit Typen und Enums
  • ForceSeatMI_Functions.h – reine C/C++-API
  • ForceSeatMI.cs – C#-API
  • ForceSeatMI_Telemetry.h, ForceSeatMI_Telemetry.cs – Strukturen für Telemetriedaten
  • ForceSeatMI_Positioning.h, ForceSeatMI_Positioning.cs – Strukturen für Positionierungsdaten
  • ForceSeatMI_TactileTransducers.h, ForceSeatMI_TactileTransducers.cs – Strukturen für taktile Wandlereffekte
  • ForceSeatMI_Status.h, ForceSeatMI_Status.cs – Strukturen für aktuelle Statusdaten der Bewegungsplattform
  • Unity/*.cs – Unity 3D C#-API
  • Plugins/UnrealEngine – dediziertes Unreal Engine Plug-in mit Hilfsklasse für Fahrzeug- und Flugzeugtelemetrieextraktion
  • Examples – Beispiele
ForceSeatMI verwendet eine DLL, die als Teil der ForceSeatPM-Software installiert wird. Stelle sicher, dass ForceSeatPM auf deinem Computer installiert ist.

Anforderungen

  • Folgende Sprachen und Frameworks werden standardmäßig unterstützt: C, C++, C#, Unity 3D (C#), Unreal Engine (C++)
  • Die native API-DLL ist mit Visual Studio 2015 kompiliert – statisches Linking mit MSVC wird verwendet.
  • Unity 3D-Beispiele erfordern Unity 5.x oder neuer
  • Unreal Engine-Beispiele erfordern Unreal Engine 4.14 oder neuer
  • C#-Beispiele erfordern mindestens Visual Studio 2013 Express für Windows Desktop und das .NET Framework 4.0.
  • C/C++-Beispiele erfordern mindestens Visual Studio 2013 Express für Windows Desktop.
  • Es unterstützt nur Windows PC

Betriebsmodi

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.

ModusBeschreibungAnwendungenEmpfohlenes Profil
TelemetriedatenIn 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 FahrzeugphysiksimulationenSDK – Vehicle Telemetry
SDK – Plane Telemetry
Logische TischpositionIn 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öchtenSDK – Positioning
Präzise TischpositionDieses 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üstungSDK – Positioning

Implementierungsdetails

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:

  1. Wenn die SIM in den Laufzeitmodus wechselt (sie wird Telemetriedaten senden), ruft sie ForceSeatMI_BeginMotionControl auf
  2. Wenn die SIM den Laufzeitmodus verlässt (sie wird für eine Weile keine Telemetriedaten senden), ruft sie ForceSeatMI_EndMotionControl auf
  3. Wenn während der Laufzeit ein kurzes Pausenereignis auftritt (z. B. der Benutzer drückt Pause auf der Tastatur), sollte die SIM das Feld state verwenden

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.

  • BIT Nr. 0 – 1 (FSMI_STATE_PAUSE) bedeutet, dass der Laufzeitmodus in der SIM pausiert ist, 0 (FSMI_STATE_NO_PAUSE) bedeutet, dass der Laufzeitmodus in der SIM läuft.
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.

Beispiele

Folgende Beispiele werden zusammen mit dem SDK bereitgestellt. Stelle bitte sicher, dass du das richtige Profil für jedes Beispiel verwendest.

BeispielBeschreibungErforderliches 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

Abschließende Gedanken

  • Wenn sich die Plattform nicht bewegt oder das System im Pausenzustand ist, dann:
    • Überprüfe, ob das richtige Profil in ForceSeatPM aktiv ist
    • Überprüfe, ob das richtige Profil in ForceSeatPM importiert wurde (verschiedene Betriebsmodi erfordern unterschiedliche Profile)
    • Überprüfe die ForceSeatMI-Diagnose, um zu sehen, ob ForceSeatPM Daten von der SIM empfängt.
    • Überprüfe, ob die Anzeige pausiert ein- oder ausgeschaltet ist
    • Denk daran, das Feld mask zu konfigurieren
    • Denk daran, den richtigen Wert für state zu setzen, um den Pausenmodus zu verlassen.
  • ForceSeatMI32.dll/ForceSeatMI64.dll wurden für hohe Leistung entwickelt, daher ist keine Protokollierung verfügbar und die DLL führt nur minimal notwendige Datenkonsistenzprüfungen durch.
Sign up to our newsletter
Always be the first to know about new products, updates and company news
  • Dieses Feld dient zur Validierung und sollte nicht verändert werden.