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.