Sigue los pasos a continuación para incluir ForceSeatMI en tu proyecto.
  1. Crea un proyecto de Unity 3D
  2. Dentro del directorio Assets de tu proyecto, crea el directorio ForceSeatMI
  3. Copia los siguientes archivos en el directorio ForceSeatMI (puedes consultar cualquiera de nuestros ejemplos de Unity 3D como referencia)
    • ForceSeatMI.cs
    • ForceSeatMI_Common.cs
    • ForceSeatMI_Positioning.cs
    • ForceSeatMI_Status.cs
    • ForceSeatMI_TactileTranscuders.cs
    • ForceSeatMI_Telemetry.cs
    • ForceSeatMi_UnityAeroplane.cs
    • ForceSeatMi_UnityVehicle.cs
La API de ForceSeatMI utiliza una DLL que se instala como parte del software ForceSeatPM. Asegúrate de tener ForceSeatPM instalado en tu ordenador.

Aplicación: control de posición

Ejemplos:
  • TableLogPos_Unity muestra el posicionamiento en unidades abstractas (lógicas, porcentajes)
  • TablePhyPos_Unity muestra el posicionamiento en unidades del mundo real (cinemática inversa)
Para ambos ejemplos, utiliza el perfil integrado de ForceSeatPM SDK – Positioning. La aplicación de posicionamiento requiere el uso de la API nativa de ForceSeatMI. La rutina de operación típica consta de los siguientes pasos:
  1. Importar ForceSeatMI
    using MotionSystems;
  2. Crea una variable de objeto de la API dentro de tu clase:
    private  ForceSeatMI m_fsmi;
  3. Inicialízala en el método Start:
    m_fsmi  = new  ForceSeatMI();
  4. Si todo se ha cargado, llama a:
    if (m_fsmi.IsLoaded())
    {
      m_fsmi.BeginMotionControl();
    }
  5. El simulador debe enviar datos de posicionamiento en intervalos constantes utilizando una de las siguientes funciones:
    m_fsmi.SendTopTablePosLog(...);
    m_fsmi.SendTopTablePosPhy(...);
    m_fsmi.SendTopTableMatrixPhy(...);
  6. Al final de la simulación, llama a:
    if (m_fsmi.IsLoaded())
    {
      m_fsmi.EndMotionControl();
      m_fsmi.Dispose();
    }
Posición en el editor de Unity

Código

El siguiente código proviene del ejemplo TableLogPos_Unity.
// API de FSMI
private  ForceSeatMI m_fsmi;
 
// Posición en coordenadas lógicas que se enviará a la plataforma
private  FSMI_TopTablePositionLogical m_platformPosition  = new  FSMI_TopTablePositionLogical();
 
void  Start  ()
{
  // Carga la biblioteca ForceSeatMI desde el directorio de instalación de ForceSeatPM
  // ForceSeatMI - INICIO
  m_fsmi  = new  ForceSeatMI();
 
  if (m_fsmi.IsLoaded())
  {
    // Encuentra los componentes de la plataforma
  m_shaft  =  GameObject.Find("Shaft");
  m_board  =  GameObject.Find("Board");
 
  SaveOriginPosition();
  SaveOriginRotation();
 
    // Prepara la estructura de datos limpiándola y estableciendo el tamaño correcto
  m_platformPosition.mask = 0;
  m_platformPosition.structSize = (byte)Marshal.SizeOf(m_platformPosition);
 
  m_platformPosition.state =  FSMI_State.NO_PAUSE;
 
    // Establece los campos que pueden ser modificados por la aplicación de demostración
  m_platformPosition.mask =  FSMI_POS_BIT.STATE |  FSMI_POS_BIT.POSITION;
 
  m_fsmi.BeginMotionControl();
 
  SendDataToPlatform();
    // ForceSeatMI - FIN
  }
  else
  {
  Debug.LogError("¡No se ha encontrado la biblioteca ForceSeatMI! Por favor, instala ForceSeatPM.");
  }
}
 
void  OnDestroy()
{
  // ForceSeatMI - INICIO
  if (m_fsmi.IsLoaded())
  {
  m_fsmi.EndMotionControl();
  m_fsmi.Dispose();
  }
  // ForceSeatMI - FIN
}
 
private void  SendDataToPlatform()
{
  // Convierte los parámetros a unidades lógicas
  // ForceSeatMI - INICIO
  m_platformPosition.state =  FSMI_State.NO_PAUSE;
  m_platformPosition.roll = (short)Mathf.Clamp(m_roll  /  DRAWING_ROLL_MAX  *  PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX);
  m_platformPosition.pitch = (short)Mathf.Clamp(m_pitch  /  DRAWING_PITCH_MAX  *  PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX);
  m_platformPosition.heave = (short)Mathf.Clamp(m_heave  /  DRAWING_HEAVE_MAX  *  PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX);
 
  // Envía los datos a la plataforma
  m_fsmi.SendTopTablePosLog(ref  m_platformPosition);
  // ForceSeatMI - FIN
}

Aplicación: simulación de vehículos

Ejemplos: Telemetry_Veh_Unity (utiliza el perfil integrado de ForceSeatPM SDK – Vehicle Telemetry) Para aplicaciones de simulación de vehículos, se puede utilizar la interfaz auxiliar ForceSeatMI_UnityVehicle. La rutina de operación típica consta de los siguientes pasos:
  1. Crea una variable de objeto de la API dentro de tu clase:
    private  ForceSeatMI_UnityVehicle m_Api;
  2. Inicialízala en el método Start:
    m_Api  = new  ForceSeatMI_UnityVehicle();
  3. Llama a:
    m_Api.Begin();
  4. El simulador debe enviar datos de telemetría en intervalos constantes utilizando la siguiente función:
      m_Api.Tick(...);
  5. Al final de la simulación, llama a:
    m_Api.End();
Vehículo en el editor de Unity

Código

El siguiente código proviene del ejemplo Telemetry_Veh_Unity.
private void  Start()
{
  m_Rigidbody  =  GetComponent();
 
  // ForceSeatMI - INICIO
  m_Api  = new  ForceSeatMI_UnityVehicle();
  m_Api.Begin();
  // ForceSeatMI - FIN
}
 
private void  OnDestroy()
{
  // ForceSeatMI - INICIO
  m_Api.End();
  // ForceSeatMI - FIN
}
 
private void  Move(float  steering,  float  accel,  float  footbrake,  float  handbrake)
{
  ...
 
  // ForceSeatMI - INICIO
  m_Api.Tick(m_Rigidbody, Time.deltaTime,  false,  0,  0, m_CurrentGearNumber);
  // ForceSeatMI - FIN
}

Aplicación: simulación de vuelo

Ejemplos: Telemetry_Fly_Unity (utiliza el perfil integrado de ForceSeatPM SDK – Plane Telemetry) Para aplicaciones de simulación de vuelo, se puede utilizar la interfaz auxiliar ForceSeatMi_UnityAeroplane. La rutina de operación típica consta de los siguientes pasos:
  1. Crea una variable de objeto de la API dentro de tu clase:
    private  ForceSeatMi_UnityAeroplane m_Api;
  2. Inicialízala en el método Start:
    m_Api  = new  ForceSeatMi_UnityAeroplane();
  3. Llama a:
    m_Api.Begin();
  4. El simulador debe enviar datos de telemetría en intervalos constantes utilizando la siguiente función:
      m_Api.Tick(...);
  5. Al final de la simulación, llama a:
    m_Api.End();
Vuelo en el editor de Unity

Código

El siguiente código proviene del ejemplo Telemetry_Fly_Unity.
private void  Start()
{
  m_Rigidbody  =  GetComponent();
  m_OriginalDrag  =  m_Rigidbody.drag;
  m_OriginalAngularDrag  =  m_Rigidbody.angularDrag;
 
  // ForceSeatMI - INICIO
  m_Api  = new  ForceSeatMI_UnityAeroplane();
  m_Api.Begin();
  // ForceSeatMI - FIN
}
 
private void  OnDestroy()
{
  // ForceSeatMI - INICIO
  m_Api.End();
  // ForceSeatMI - FIN
}
 
private void  FixedUpdate()
{
  ...
 
  // ForceSeatMI - INICIO
  m_Api.Tick(m_Rigidbody, Time.deltaTime,  false);
  // ForceSeatMI - FIN
}
Sign up to our newsletter
Always be the first to know about new products, updates and company news
  • Este campo es un campo de validación y debe quedar sin cambios.