CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

Estimation/StrapdownINS/UKF/predictNominalVector.mo

Download original .moGitHub source

Documentation: Estimation.StrapdownINS.UKF.predictNominalVector

within Estimation.StrapdownINS.UKF;

function predictNominalVector
  "Propagate a flattened nominal state through the strapdown mechanization"
  input NominalVector previous;
  input Real angularVelocityMeasuredBodyFlu_rad_s[3];
  input Real specificForceMeasuredBodyFlu_m_s2[3];
  input Real gravityWorldEnu_m_s2[3];
  input Real dt(unit = "s");
  output NominalVector predicted;
protected
  Real correctedAngularVelocity[3];
  Real correctedSpecificForce[3];
  Real leftIncrement[9];
  Real rightIncrement[9];
  Real predictedExtendedPose[10];
algorithm
  correctedAngularVelocity := angularVelocityMeasuredBodyFlu_rad_s
    - previous[11:13];
  correctedSpecificForce := specificForceMeasuredBodyFlu_m_s2
    - previous[14:16];
  leftIncrement := cat(1, zeros(3), correctedSpecificForce * dt,
    correctedAngularVelocity * dt);
  rightIncrement := cat(1, zeros(3), gravityWorldEnu_m_s2 * dt, zeros(3));
  predictedExtendedPose := LieGroups.SE23.Quat.exp_mixed(
    previous[1:10], leftIncrement, rightIncrement,
    [0.0, dt; 0.0, 0.0]);
  predicted := cat(1, predictedExtendedPose[1:6],
    LieGroups.SO3.Quat.normalize(predictedExtendedPose[7:10]),
    previous[11:16]);
end predictNominalVector;