ForceSeatMI es una interfaz fácil de usar pero potente que permite añadir soporte para plataformas de movimiento a cualquier aplicación o juego (denominado SIM en las siguientes secciones). En la mayoría de las aplicaciones no es necesario controlar el hardware directamente desde el SIM. Por ello, ForceSeatMI se utiliza únicamente para enviar telemetría o solicitudes de posicionamiento a ForceSeatPM. Este enfoque delega la responsabilidad de transformar los datos de telemetría en un movimiento real de la plataforma del SIM a ForceSeatPM. También simplifica el manejo de errores que el SIM debe implementar.
Con la última versión de ForceSeatMI, es posible controlar el hardware mediante el uso de Cinemática Inversa. El SIM envía la posición requerida del bastidor superior y ForceSeatPM calcula las posiciones requeridas de los brazos (o actuadores). Esta característica se puede utilizar en aplicaciones donde se requiere un posicionamiento preciso en lugar de la simulación de fuerzas.

| Esta documentación se aplica únicamente a ForceSeatMI 2.63 o posterior. Las versiones anteriores de la API no están cubiertas por este documento. ForceSeatMI 2.63+ tampoco es compatible con versiones anteriores en los niveles de interfaz y binario con 2.61 y versiones anteriores. El cambio de una versión anterior de ForceSeatMI a 2.63+ requerirá cambios en el código fuente de tu aplicación. |
| ForceSeatMI utiliza una DLL que se instala como parte del software ForceSeatPM. Asegúrate de tener ForceSeatPM instalado en tu ordenador. |
ForceSeatMI funciona en uno de los modos descritos a continuación. Para los usuarios primerizos, se recomienda empezar por Logical Table Position, ya que es el ejemplo más sencillo y funciona con el perfil integrado SDK – Positioning.
| Modo | Descripción | Aplicaciones | Perfil recomendado |
| Datos de telemetría | En este modo, el SIM envía información sobre la posición del vehículo, las fuerzas G y las aceleraciones en el sistema de coordenadas del vehículo directamente a ForceSeatPM. Toda la transformación de las fuerzas a los movimientos del bastidor superior se realiza dentro del motor de scripting de ForceSeatPM. Esto permite cambiar fácilmente los parámetros de mapeo y filtro sin necesidad de cambiar nada en el SIM. | Juegos y simulaciones de física de vehículos | SDK – Telemetría de vehículos SDK – Telemetría de aviones |
| Posición lógica de la mesa | En este modo, el SIM envía la posición del bastidor superior (guiñada, cabeceo, balanceo, elevación, balanceo lateral y avance) en unidades abstractas (porcentajes de rotación/traslación máxima). Esto permite al SIM tomar el control total sobre la posición del bastidor superior, pero depende del SIM calcular los ángulos y desplazamientos correctos. | Para aplicaciones que desean tener un mayor control sobre la posición del bastidor | SDK – Posicionamiento |
| Posición precisa de la mesa | Este módulo utiliza la matriz de transformación del bastidor superior entregada por el SIM y calcula las posiciones de todos los brazos/actuadores en unidades del mundo real. | Aplicaciones de prueba de equipos | SDK – Posicionamiento |
structSize es un campo obligatorio que DEBE rellenarse. Se utiliza para manejar la compatibilidad hacia atrás/adelante entre la DLL y el SIM.
telemetría.structSize = sizeof(ForceSeatMI_Telemetry);
mask indica qué otros campos están configurados. Por ejemplo, si el SIM proporciona roll en la estructura FSMI_TopTablePositionLogical, entonces el campo mask debe contener el bit FSMI_POS_BIT_POSITION. Es necesario incluir siempre el campo state en la máscara (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 ...
Si ForceSeatMI se utiliza en el SIM, el SIM debe llamar a ForceSeatMI_BeginMotionControl al menos una vez, de lo contrario, el estado de pausa estará presente todo el tiempo. Después de la primera llamada, puedes elegir cómo manejar la pausa. Una opción es llamar a ForceSeatMI_EndMotionControl y otra opción es establecer el bit state. Nuestra recomendación es la siguiente:
En otras palabras, se recomienda usar ForceSeatMI_BeginMotionControl/ForceSeatMI_EndMotionControl para manejar las transiciones de ejecución – menú principal y state para manejar eventos de pausa de corta duración.
Los campos state constan de 8 bits, pero en la versión actual solo se utiliza el primer bit.
| Recuerda añadir FSMI_POS_BIT_STATE o FSMI_TEL_BIT_STATE a mask si se va a establecer el campo state. Asegúrate de establecer state al menos una vez para reanudar la plataforma de movimiento después de llamar a ForceSeatMI_BeginMotionControl. |
Los siguientes ejemplos se proporcionan junto con el SDK. Asegúrate de utilizar el perfil correcto para cada ejemplo.
| Ejemplo | Descripción | Perfil requerido |
| TableLogPos_CPP TableLogPos_CS TableLogPos_Unity TableLogPos_Unreal | Muestra cómo controlar la posición de la mesa superior especificando el balanceo, cabeceo, guiñada, elevación, balanceo lateral y avance en porcentaje de los movimientos máximos. Se puede utilizar para controlar todo tipo de plataformas de movimiento. | SDK – Posicionamiento |
| TablePhyPos_CPP TablePhyPos_CS TablePhyPos_Unity TablePhyPos_Unreal | Muestra cómo especificar la posición precisa de la mesa superior proporcionando el balanceo, cabeceo, guiñada, elevación, balanceo lateral y avance en unidades del mundo real. Solo funciona con máquinas de 3 y 6 grados de libertad. | SDK – Posicionamiento |
| TableMatrixPos_CPP TableMatrixPos_CS | Muestra cómo especificar la posición precisa de la mesa superior proporcionando la matriz de transformación. Se recomienda solo para máquinas de 6 grados de libertad. | SDK – Posicionamiento |
| Telemetry_Veh_Unity Telemetry_Veh_Unreal | Muestra cómo enviar datos de telemetría de vehículos desde el SIM a ForceSeatPM. | SDK – Telemetría de vehículos |
| Telemetry_Fly_Unity Telemetry_Fly_Unreal | Muestra cómo enviar datos de telemetría de aviones desde el SIM a ForceSeatPM. | SDK – Telemetría de aviones |
