ForceSeatMI est une interface facile Ă  utiliser mais puissante, qui permet d’ajouter la prise en charge d’une plateforme de mouvement Ă  n’importe quelle application ou jeu (appelĂ© SIM dans les sections suivantes). Dans la plupart des applications, il n’est pas nĂ©cessaire de contrĂŽler le matĂ©riel directement depuis le SIM. C’est pourquoi ForceSeatMI sert uniquement Ă  envoyer des donnĂ©es de tĂ©lĂ©mĂ©trie ou des demandes de positionnement Ă  ForceSeatPM. Cette approche dĂ©lĂšgue au ForceSeatPM la responsabilitĂ© de transformer les donnĂ©es de tĂ©lĂ©mĂ©trie en mouvements rĂ©els de la plateforme, au lieu de le faire dans le SIM. Elle simplifie aussi la gestion des erreurs que le SIM doit implĂ©menter.

Avec la derniĂšre version de ForceSeatMI, il est possible de contrĂŽler le matĂ©riel en utilisant la cinĂ©matique inverse. Le SIM envoie la position requise du chĂąssis supĂ©rieur et ForceSeatPM calcule les positions nĂ©cessaires des bras (ou des actionneurs). Cette fonctionnalitĂ© peut ĂȘtre utilisĂ©e dans une application oĂč un positionnement prĂ©cis est requis, plutĂŽt qu’une simulation des forces.

Schéma Fsmi (1)

Cette documentation s’applique uniquement Ă  ForceSeatMI 2.63 ou plus rĂ©cent. Les anciennes versions de l’API ne sont pas couvertes par ce document. ForceSeatMI 2.63+ n’est pas non plus rĂ©trocompatible, au niveau de l’interface et du binaire, avec les versions 2.61 et antĂ©rieures. Passer d’une ancienne version de ForceSeatMI Ă  2.63+ nĂ©cessitera des modifications dans le code source de ton application.

Fonctionnalités

  • Le SIM peut choisir entre des modes de fonctionnement : simulation des forces (tĂ©lĂ©mĂ©trie), positionnement rapide du chĂąssis supĂ©rieur et positionnement prĂ©cis du chĂąssis supĂ©rieur
  • Le SIM n’a pas Ă  traduire les donnĂ©es de tĂ©lĂ©mĂ©trie en positions rĂ©elles des moteurs : c’est ForceSeatPM qui s’en charge
  • Le SIM ne dĂ©pend pas d’un matĂ©riel de plateforme de mouvement spĂ©cifique ; les ajustements liĂ©s au matĂ©riel se font dans ForceSeatPM
  • Toutes les fonctionnalitĂ©s de diagnostic et de traitement de ForceSeatPM restent disponibles et peuvent ĂȘtre utilisĂ©es

Contenu du package

  • ForceSeatMI_Loader.c – un wrapper qui redirige les appels de fonctions vers la DLL rĂ©elle (la DLL est installĂ©e par ForceSeatPM)
  • ForceSeatMI_Common.h, ForceSeatMI_Common.cs – en-tĂȘte avec les types et les Ă©numĂ©rations
  • ForceSeatMI_Functions.h – API C/C++ pure
  • ForceSeatMI.cs – API C#
  • ForceSeatMI_Telemetry.h, ForceSeatMI_Telemetry.cs – structures pour les donnĂ©es de tĂ©lĂ©mĂ©trie
  • ForceSeatMI_Positioning.h, ForceSeatMI_Positioning.cs – structures pour les donnĂ©es de positionnement
  • ForceSeatMI_TactileTransducers.h, ForceSeatMI_TactileTransducers.cs – structures pour les effets des transducteurs tactiles
  • ForceSeatMI_Status.h, ForceSeatMI_Status.cs – structures pour les donnĂ©es d’état actuel de la plateforme de mouvement
  • Unity/*.cs – API C# Unity 3D
  • Plugins/UnrealEngine – plug-in dĂ©diĂ© Unreal Engine avec une classe d’aide pour l’extraction de la tĂ©lĂ©mĂ©trie des vĂ©hicules et des avions
  • Examples – exemples
ForceSeatMI utilise une DLL installĂ©e dans le cadre du logiciel ForceSeatPM. Assure-toi d’avoir ForceSeatPM installĂ© sur ton ordinateur.

Configuration requise

  • Les langages et frameworks suivants sont pris en charge nativement : C, C++, C#, Unity 3D (C#), Unreal Engine (C++)
  • La DLL de l’API native est compilĂ©e avec Visual Studio 2015 : un lien statique avec MSVC est utilisĂ©.
  • Les exemples Unity 3D nĂ©cessitent Unity 5.x ou plus rĂ©cent
  • Les exemples Unreal Engine nĂ©cessitent Unreal Engine 4.14 ou plus rĂ©cent
  • Les exemples C# nĂ©cessitent au moins Visual Studio 2013 Express pour Windows Desktop et .NET Framework 4.0.
  • Les exemples C/C++ nĂ©cessitent au moins Visual Studio 2013 Express pour Windows Desktop.
  • Compatible uniquement avec Windows PC

Modes de fonctionnement

ForceSeatMI fonctionne dans l’un des modes dĂ©crits ci-dessous. Pour une premiĂšre utilisation, il est recommandĂ© de commencer par Logical Table Position, car c’est l’exemple le plus simple et il fonctionne avec le profil intĂ©grĂ© SDK – Positioning.

ModeDescriptionApplicationsProfil recommandé
DonnĂ©es de tĂ©lĂ©mĂ©trieDans ce mode, le SIM envoie directement Ă  ForceSeatPM des informations sur la position du vĂ©hicule, les forces g et les accĂ©lĂ©rations dans le systĂšme de coordonnĂ©es du vĂ©hicule. Toute la transformation des forces en mouvements du chĂąssis supĂ©rieur est effectuĂ©e dans le moteur de scripts de ForceSeatPM. Cela permet de modifier facilement le mapping et les paramĂštres de filtrage sans avoir Ă  changer quoi que ce soit dans le SIM. Jeux et simulations de physique de vĂ©hiculesSDK – Vehicle Telemetry
SDK – Plane Telemetry
Position logique de la tableDans ce mode, le SIM envoie la position du chĂąssis supĂ©rieur (lacet, tangage, roulis, heave, sway et surge) en unitĂ©s abstraites (pourcentages de la rotation/translation maximale). Cela permet au SIM de prendre le contrĂŽle total de la position du chĂąssis supĂ©rieur, mais c’est au SIM de calculer les angles et dĂ©calages corrects. Pour les applications qui veulent mieux contrĂŽler la position du chĂąssisSDK – Positioning
Position prĂ©cise de la tableCe module utilise la matrice de transformation du chĂąssis supĂ©rieur fournie par le SIM et calcule les positions de tous les bras/actionneurs en unitĂ©s rĂ©elles.Applications de test d’équipementSDK – Positioning

DĂ©tails d’implĂ©mentation

structSize est un champ obligatoire qui DOIT ĂȘtre renseignĂ©. Il sert Ă  gĂ©rer la compatibilitĂ© ascendante/descendante entre la DLL et le SIM.

télémétrie.structSize = sizeof(ForceSeatMI_Telemetry);

mask indique quels autres champs sont dĂ©finis. Par exemple, si le SIM fournit roll dans la structure FSMI_TopTablePositionLogical, alors le champ mask doit contenir le bit FSMI_POS_BIT_POSITION. Il est nĂ©cessaire d’inclure toujours le champ state dans le mask (FSMI_POS_BIT_STATE ou 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 ...

Si ForceSeatMI est utilisĂ© dans le SIM, le SIM doit appeler ForceSeatMI_BeginMotionControl au moins une fois, sinon l’état pause sera prĂ©sent en permanence. AprĂšs le premier appel, tu peux choisir comment gĂ©rer la pause. Une option consiste Ă  appeler ForceSeatMI_EndMotionControl et une autre consiste Ă  dĂ©finir le bit state. Notre recommandation est la suivante :

  1. Quand le SIM passe en mode d’exĂ©cution (il va envoyer des donnĂ©es de tĂ©lĂ©mĂ©trie), il appelle ForceSeatMI_BeginMotionControl
  2. Quand le SIM quitte le mode d’exĂ©cution (il ne va pas envoyer de donnĂ©es de tĂ©lĂ©mĂ©trie pendant un moment), il appelle ForceSeatMI_EndMotionControl
  3. Quand, pendant l’exĂ©cution, il y a un court Ă©vĂ©nement de pause (par ex. l’utilisateur appuie sur pause au clavier), le SIM doit utiliser le champ state

Autrement dit, il est recommandĂ© d’utiliser ForceSeatMI_BeginMotionControl/ForceSeatMI_EndMotionControl pour gĂ©rer les transitions exĂ©cution – menu principal, et state pour gĂ©rer les Ă©vĂ©nements de pause de courte durĂ©e.

Les champs state se composent de 8 bits, mais dans la version actuelle seul le premier bit est utilisé.

  • BIT n° 0 — 1 (FSMI_STATE_PAUSE) signifie que le mode d’exĂ©cution dans le SIM est en pause ; 0 (FSMI_STATE_NO_PAUSE) signifie que le mode d’exĂ©cution dans le SIM est en cours d’exĂ©cution.
Pense Ă  ajouter FSMI_POS_BIT_STATE ou FSMI_TEL_BIT_STATE au mask si le champ state doit ĂȘtre dĂ©fini. Assure-toi de dĂ©finir state au moins une fois pour sortir la plateforme de mouvement de la pause aprĂšs l’appel Ă  ForceSeatMI_BeginMotionControl.

Exemples

Les exemples suivants sont fournis avec le SDK. Assure-toi d’utiliser le bon profil pour chaque exemple.

ExempleDescriptionProfil requis
TableLogPos_CPP
TableLogPos_CS
TableLogPos_Unity
TableLogPos_Unreal
Montre comment contrĂŽler la position de la table supĂ©rieure en spĂ©cifiant le roulis, le tangage, le lacet, le heave, le sway et le surge en pourcentage des mouvements maximum. Peut ĂȘtre utilisĂ© pour contrĂŽler tous types de plateformes de mouvement. SDK – Positioning
TablePhyPos_CPP
TablePhyPos_CS
TablePhyPos_Unity
TablePhyPos_Unreal
Montre comment spĂ©cifier une position prĂ©cise de la table supĂ©rieure en fournissant le roulis, le tangage, le lacet, le heave, le sway et le surge en unitĂ©s rĂ©elles. Fonctionne uniquement avec les machines 3DoF et 6DoF. SDK – Positioning
TableMatrixPos_CPP
TableMatrixPos_CS
Montre comment spĂ©cifier une position prĂ©cise de la table supĂ©rieure en fournissant une matrice de transformation. RecommandĂ© uniquement pour les machines 6DoF. SDK – Positioning
Telemetry_Veh_Unity
Telemetry_Veh_Unreal
Montre comment envoyer des donnĂ©es de tĂ©lĂ©mĂ©trie vĂ©hicule du SIM vers ForceSeatPM.SDK – Vehicle Telemetry
Telemetry_Fly_Unity
Telemetry_Fly_Unreal
Montre comment envoyer des donnĂ©es de tĂ©lĂ©mĂ©trie avion du SIM vers ForceSeatPM.SDK – Plane Telemetry

DerniĂšres remarques

  • Quand la plateforme ne bouge pas ou que le systĂšme est en pause :
    • VĂ©rifie que le bon profil est actif dans ForceSeatPM
    • VĂ©rifie que le bon profil a Ă©tĂ© importĂ© dans ForceSeatPM (les diffĂ©rents modes de fonctionnement nĂ©cessitent des profils diffĂ©rents)
    • VĂ©rifie le diagnostic ForceSeatMI pour voir si ForceSeatPM reçoit des donnĂ©es du SIM.
    • VĂ©rifie si l’indicateur paused est activĂ© ou non
    • Pense Ă  configurer le champ mask
    • Pense Ă  dĂ©finir la bonne valeur state pour quitter le mode pause.
  • ForceSeatMI32.dll/ForceSeatMI64.dll ont Ă©tĂ© conçues pour des performances Ă©levĂ©es ; il n’y a donc pas de journalisation disponible et la DLL n’effectue que les vĂ©rifications de cohĂ©rence des donnĂ©es strictement nĂ©cessaires.
Sign up to our newsletter
Always be the first to know about new products, updates and company news
  • Ce champ n’est utilisĂ© qu’à des fins de validation et devrait rester inchangĂ©.