CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

model

SLAM.Examples.InertialOnly

Inertial navigation with filtered airframe IMU measurements

Public declarations

Explicit source declarations; dimensions, modifications and defaults are shown as written, without evaluation.

RoleNameTypeDimensions / attributes / defaultDescription
parameteraccelTimeConstantReal(unit="s", min=1e-6) = 0.03Accelerometer filter time constant
parametergyroTimeConstantReal(unit="s", min=1e-6) = 0.02Gyroscope filter time constant
inputaccelReal[3](each unit="m/s2", start={0, 0, 9.81})Specific force in body FLU coordinates
inputgyroReal[3](each unit="rad/s", each start=0)Angular velocity in body FLU coordinates
outputpositionReal[3](each unit="m")Position in world ENU coordinates
outputvelocityReal[3](each unit="m/s")Velocity in world ENU coordinates
outputquaternionReal[4]Unit quaternion {w,x,y,z}, body to world
outputfilteredAccelReal[3](each unit="m/s2")Filtered specific force
outputfilteredGyroReal[3](each unit="rad/s")Filtered angular velocity

Modelica declarations and implementation

Show parameters, interfaces and source

Parameters, inputs, outputs, defaults and equations from the source file.

model InertialOnly "Inertial navigation with filtered airframe IMU measurements"
  import ModelicaInertial = SLAM.Inertial.ModelicaInertial;

  parameter Real accelTimeConstant(unit="s", min=1e-6) = 0.03
    "Accelerometer filter time constant";
  parameter Real gyroTimeConstant(unit="s", min=1e-6) = 0.02
    "Gyroscope filter time constant";

  input Real accel[3](each unit="m/s2", start={0, 0, 9.81})
    "Specific force in body FLU coordinates";
  input Real gyro[3](each unit="rad/s", each start=0)
    "Angular velocity in body FLU coordinates";

  output Real position[3](each unit="m") "Position in world ENU coordinates";
  output Real velocity[3](each unit="m/s") "Velocity in world ENU coordinates";
  output Real quaternion[4] "Unit quaternion {w,x,y,z}, body to world";
  output Real filteredAccel[3](each unit="m/s2") "Filtered specific force";
  output Real filteredGyro[3](each unit="rad/s") "Filtered angular velocity";

  ModelicaInertial estimator(
    accel_tau=accelTimeConstant,
    gyro_tau=gyroTimeConstant,
    accel=accel,
    gyro=gyro);
equation
  position = estimator.position;
  velocity = estimator.velocity;
  quaternion = estimator.quaternion;
  filteredAccel = estimator.filteredAccel;
  filteredGyro = estimator.filteredGyro;

  annotation (experiment(StopTime=10, Interval=0.01, Tolerance=1e-8));
end InertialOnly;