ForceSeatMI è un’interfaccia facile da usare ma potente che consente di aggiungere il supporto per piattaforme di movimento a qualsiasi applicazione o gioco (indicato come SIM nelle sezioni successive). Nella maggior parte delle applicazioni non è necessario controllare l’hardware direttamente dal SIM. Per questo motivo ForceSeatMI viene utilizzato solo per inviare telemetria o richieste di posizionamento a ForceSeatPM. Questo approccio delega la responsabilità di trasformare i dati di telemetria in un effettivo movimento della piattaforma dal SIM a ForceSeatPM. Semplifica inoltre la gestione degli errori che il SIM deve implementare.
Con l’ultima versione di ForceSeatMI, è possibile controllare l’hardware utilizzando la cinematica inversa. Il SIM invia la posizione richiesta del telaio superiore e ForceSeatPM calcola le posizioni richieste dei bracci (o attuatori). Questa funzione può essere utilizzata in applicazioni dove è richiesto un posizionamento preciso invece della simulazione di forze.

| Questa documentazione si applica solo a ForceSeatMI 2.63 o versioni successive. Le versioni precedenti dell’API non sono coperte da questo documento. ForceSeatMI 2.63+ non è inoltre retrocompatibile a livello di interfaccia e binario con le versioni 2.61 e precedenti. Il passaggio da una versione precedente di ForceSeatMI alla 2.63+ richiederà modifiche nel codice sorgente della tua applicazione. |
| ForceSeatMI utilizza una DLL che viene installata come parte del software ForceSeatPM. Assicurati di avere ForceSeatPM installato sul tuo computer. |
ForceSeatMI funziona in una delle modalità descritte di seguito. Per gli utenti alle prime armi si consiglia di iniziare da Logical Table Position in quanto è l’esempio più semplice e funziona con il profilo integrato SDK – Positioning.
| Modalità | Descrizione | Applicazioni | Profilo consigliato |
| Dati di telemetria | In questa modalità il SIM invia informazioni sulla posizione del veicolo, forze g e accelerazioni nel sistema di coordinate del veicolo direttamente a ForceSeatPM. L’intera trasformazione dalle forze ai movimenti del telaio superiore viene eseguita all’interno del motore di scripting di ForceSeatPM. Ciò consente di modificare facilmente i parametri di mappatura e filtro senza la necessità di cambiare nulla nel SIM. | Giochi e simulazioni di fisica dei veicoli | SDK – Vehicle Telemetry SDK – Plane Telemetry |
| Posizione logica della tavola | In questa modalità il SIM invia la posizione del telaio superiore (imbardata, beccheggio, rollio, sollevamento, oscillazione laterale e longitudinale) in unità astratte (percentuali di rotazione/traslazione massima). Ciò consente al SIM di assumere il pieno controllo sulla posizione del telaio superiore, ma spetta al SIM calcolare angoli e offset corretti. | Per applicazioni che desiderano avere un migliore controllo sulla posizione del telaio | SDK – Positioning |
| Posizione precisa della tavola | Questo modulo utilizza la matrice di trasformazione del telaio superiore fornita dal SIM e calcola le posizioni di tutti i bracci/attuatori in unità del mondo reale. | Applicazioni di test delle attrezzature | SDK – Positioning |
structSize è un campo obbligatorio che DEVE essere compilato. Viene utilizzato per gestire la compatibilità retroattiva/futura tra la DLL e il SIM.
telemetry.structSize = sizeof(ForceSeatMI_Telemetry);
mask indica quali altri campi sono impostati. Ad esempio, se il SIM fornisce roll nella struttura FSMI_TopTablePositionLogical, allora il campo mask deve contenere il bit FSMI_POS_BIT_POSITION. È necessario includere sempre il campo state nella mask (FSMI_POS_BIT_STATE o 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 ...
Se ForceSeatMI viene utilizzato nel SIM, il SIM deve chiamare ForceSeatMI_BeginMotionControl almeno una volta, altrimenti sarà sempre presente lo stato di pausa. Dopo la prima chiamata, puoi scegliere come gestire la pausa. Un’opzione è chiamare ForceSeatMI_EndMotionControl e un’altra opzione è impostare il bit state. La nostra raccomandazione è la seguente:
In altre parole, si consiglia di utilizzare ForceSeatMI_BeginMotionControl/ForceSeatMI_EndMotionControl per gestire le transizioni runtime – menu principale e state per gestire eventi di pausa di breve durata.
Il campo state è composto da 8 bit, ma nella versione corrente viene utilizzato solo il primo bit.
| Ricorda di aggiungere FSMI_POS_BIT_STATE o FSMI_TEL_BIT_STATE a mask se il campo state verrà impostato. Assicurati di impostare state almeno una volta per togliere la pausa alla piattaforma di movimento dopo che ForceSeatMI_BeginMotionControl è stato chiamato. |
I seguenti esempi sono forniti insieme all’SDK. Assicurati di utilizzare il profilo corretto per ogni esempio.
| Esempio | Descrizione | Profilo richiesto |
| TableLogPos_CPP TableLogPos_CS TableLogPos_Unity TableLogPos_Unreal | Mostra come controllare la posizione della tavola superiore specificando rollio, beccheggio, imbardata, sollevamento, oscillazione laterale e longitudinale in percentuale dei movimenti massimi. Può essere utilizzato per controllare tutti i tipi di piattaforme di movimento. | SDK – Positioning |
| TablePhyPos_CPP TablePhyPos_CS TablePhyPos_Unity TablePhyPos_Unreal | Mostra come specificare la posizione precisa della tavola superiore fornendo rollio, beccheggio, imbardata, sollevamento, oscillazione laterale e longitudinale in unità del mondo reale. Funziona solo con macchine 3DoF e 6DoF. | SDK – Positioning |
| TableMatrixPos_CPP TableMatrixPos_CS | Mostra come specificare la posizione precisa della tavola superiore fornendo una matrice di trasformazione. È consigliato solo per macchine 6DoF. | SDK – Positioning |
| Telemetry_Veh_Unity Telemetry_Veh_Unreal | Mostra come inviare dati di telemetria del veicolo dal SIM a ForceSeatPM. | SDK – Vehicle Telemetry |
| Telemetry_Fly_Unity Telemetry_Fly_Unreal | Mostra come inviare dati di telemetria dell’aereo dal SIM a ForceSeatPM. | SDK – Plane Telemetry |
