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.

| 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. |
| ForceSeatMI utilise une DLL installée dans le cadre du logiciel ForceSeatPM. Assure-toi d’avoir ForceSeatPM installé sur ton ordinateur. |
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.
| Mode | Description | Applications | Profil recommandé |
| Données de télémétrie | Dans 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éhicules | SDK – Vehicle Telemetry SDK – Plane Telemetry |
| Position logique de la table | Dans 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âssis | SDK – Positioning |
| Position précise de la table | Ce 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’équipement | SDK – Positioning |
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 :
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é.
| 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. |
Les exemples suivants sont fournis avec le SDK. Assure-toi d’utiliser le bon profil pour chaque exemple.
| Exemple | Description | Profil 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 |
