Volg de onderstaande stappen om ForceSeatMI aan je project toe te voegen.
  1. Maak een Unity 3D-project aan
  2. Maak in de Assets-map van je project een ForceSeatMI-map aan
  3. Kopieer de volgende bestanden naar de ForceSeatMI-map (ter referentie kun je een van onze Unity 3D-voorbeelden bekijken)
    • ForceSeatMI.cs
    • ForceSeatMI_Common.cs
    • ForceSeatMI_Positioning.cs
    • ForceSeatMI_Status.cs
    • ForceSeatMI_TactileTranscuders.cs
    • ForceSeatMI_Telemetry.cs
    • ForceSeatMi_UnityAeroplane.cs
    • ForceSeatMi_UnityVehicle.cs
De ForceSeatMI API maakt gebruik van een DLL die wordt geïnstalleerd als onderdeel van de ForceSeatPM-software. Zorg ervoor dat ForceSeatPM op je computer is geïnstalleerd.

Applicatie: positiecontrole

Voorbeelden:
  • TableLogPos_Unity toont positionering in abstracte (logische, procentuele) eenheden
  • TablePhyPos_Unity toont positionering in fysieke eenheden (Inverse Kinematics)
Gebruik voor beide voorbeelden het ingebouwde ForceSeatPM-profiel SDK – Positioning. Voor de positioneringsapplicatie is het gebruik van de ruwe ForceSeatMI API vereist. Een typische routine bestaat uit de volgende stappen:
  1. Importeer ForceSeatMI
    using MotionSystems;
  2. Maak een API-objectvariabele aan in je class:
    private  ForceSeatMI m_fsmi;
  3. Initialiseer deze in de Start-methode:
    m_fsmi  = new  ForceSeatMI();
  4. Als alles is geladen, roep dan het volgende aan:
    if (m_fsmi.IsLoaded())
    {
      m_fsmi.BeginMotionControl();
    }
  5. De simulator moet met constante intervallen positioneringsgegevens verzenden via een van de volgende functies:
    m_fsmi.SendTopTablePosLog(...);
    m_fsmi.SendTopTablePosPhy(...);
    m_fsmi.SendTopTableMatrixPhy(...);
  6. Roep aan het einde van de simulatie het volgende aan:
    if (m_fsmi.IsLoaded())
    {
      m_fsmi.EndMotionControl();
      m_fsmi.Dispose();
    }
Unity Editor Pos

Code

De onderstaande code is afkomstig uit het voorbeeld TableLogPos_Unity.
// FSMI-api
private  ForceSeatMI m_fsmi;
 
// Positie in logische coördinaten die naar het platform wordt verzonden
private  FSMI_TopTablePositionLogical m_platformPosition  = new  FSMI_TopTablePositionLogical();
 
void  Start  ()
{
  // Laad de ForceSeatMI-bibliotheek uit de installatiemap van ForceSeatPM
  // ForceSeatMI - BEGIN
  m_fsmi  = new  ForceSeatMI();
 
  if (m_fsmi.IsLoaded())
  {
    // Zoek de componenten van het platform
  m_shaft  =  GameObject.Find("Shaft");
  m_board  =  GameObject.Find("Board");
 
  SaveOriginPosition();
  SaveOriginRotation();
 
    // Bereid de datastructuur voor door deze te wissen en de juiste grootte in te stellen
  m_platformPosition.mask = 0;
  m_platformPosition.structSize = (byte)Marshal.SizeOf(m_platformPosition);
 
  m_platformPosition.state =  FSMI_State.NO_PAUSE;
 
    // Stel velden in die door de demo-applicatie kunnen worden gewijzigd
  m_platformPosition.mask =  FSMI_POS_BIT.STATE |  FSMI_POS_BIT.POSITION;
 
  m_fsmi.BeginMotionControl();
 
  SendDataToPlatform();
    // ForceSeatMI - END
  }
  else
  {
  Debug.LogError("ForceSeatMI-bibliotheek niet gevonden! Installeer ForceSeatPM.");
  }
}
 
void  OnDestroy()
{
  // ForceSeatMI - BEGIN
  if (m_fsmi.IsLoaded())
  {
  m_fsmi.EndMotionControl();
  m_fsmi.Dispose();
  }
  // ForceSeatMI - END
}
 
private void  SendDataToPlatform()
{
  // Converteer parameters naar logische eenheden
  // ForceSeatMI - BEGIN
  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);
 
  // Verzend gegevens naar het platform
  m_fsmi.SendTopTablePosLog(ref  m_platformPosition);
  // ForceSeatMI - END
}

Applicatie: voertuigsimulatie

Voorbeelden: Telemetry_Veh_Unity (gebruik het ingebouwde ForceSeatPM-profiel SDK – Vehicle Telemetry) Voor voertuigsimulatie-applicaties kan de ForceSeatMI_UnityVehicle helper-interface worden gebruikt. Een typische routine bestaat uit de volgende stappen:
  1. Maak een API-objectvariabele aan in je class:
    private  ForceSeatMI_UnityVehicle m_Api;
  2. Initialiseer deze in de Start-methode:
    m_Api  = new  ForceSeatMI_UnityVehicle();
  3. Roep aan:
    m_Api.Begin();
  4. De simulator moet met constante intervallen telemetriegegevens verzenden via de volgende functie:
      m_Api.Tick(...);
  5. Roep aan het einde van de simulatie het volgende aan:
    m_Api.End();
Unity Editor Veh

Code

De onderstaande code is afkomstig uit het voorbeeld Telemetry_Veh_Unity.
private void  Start()
{
  m_Rigidbody  =  GetComponent();
 
  // ForceSeatMI - BEGIN
  m_Api  = new  ForceSeatMI_UnityVehicle();
  m_Api.Begin();
  // ForceSeatMI - END
}
 
private void  OnDestroy()
{
  // ForceSeatMI - BEGIN
  m_Api.End();
  // ForceSeatMI - END
}
 
private void  Move(float  steering,  float  accel,  float  footbrake,  float  handbrake)
{
  ...
 
  // ForceSeatMI - BEGIN
  m_Api.Tick(m_Rigidbody, Time.deltaTime,  false,  0,  0, m_CurrentGearNumber);
  // ForceSeatMI - END
}

Applicatie: vluchtsimulatie

Voorbeelden: Telemetry_Fly_Unity (gebruik het ingebouwde ForceSeatPM-profiel SDK – Plane Telemetry) Voor vluchtsimulatie-applicaties kan de ForceSeatMi_UnityAeroplane helper-interface worden gebruikt. Een typische routine bestaat uit de volgende stappen:
  1. Maak een API-objectvariabele aan in je class:
    private  ForceSeatMi_UnityAeroplane m_Api;
  2. Initialiseer deze in de Start-methode:
    m_Api  = new  ForceSeatMi_UnityAeroplane();
  3. Roep aan:
    m_Api.Begin();
  4. De simulator moet met constante intervallen telemetriegegevens verzenden via de volgende functie:
      m_Api.Tick(...);
  5. Roep aan het einde van de simulatie het volgende aan:
    m_Api.End();
Unity Editor Fly

Code

De onderstaande code is afkomstig uit het voorbeeld Telemetry_Fly_Unity.
private void  Start()
{
  m_Rigidbody  =  GetComponent();
  m_OriginalDrag  =  m_Rigidbody.drag;
  m_OriginalAngularDrag  =  m_Rigidbody.angularDrag;
 
  // ForceSeatMI - BEGIN
  m_Api  = new  ForceSeatMI_UnityAeroplane();
  m_Api.Begin();
  // ForceSeatMI - END
}
 
private void  OnDestroy()
{
  // ForceSeatMI - BEGIN
  m_Api.End();
  // ForceSeatMI - END
}
 
private void  FixedUpdate()
{
  ...
 
  // ForceSeatMI - BEGIN
  m_Api.Tick(m_Rigidbody, Time.deltaTime,  false);
  // ForceSeatMI - END
}
Sign up to our newsletter
Always be the first to know about new products, updates and company news
  • Dit veld is bedoeld voor validatiedoeleinden en moet niet worden gewijzigd.