CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

function

Tests.RuleChecks.fdRetrodictJacobian

Central difference of retrodict in the ESKF tangent, right-trivialized pose

Public declarations

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

RoleNameTypeDimensions / attributes / defaultDescription
inputcurrentEstimation.StrapdownINS.ESKF.State
inputangularVelocityMeasuredBodyFlu_rad_sReal[3]
inputspecificForceMeasuredBodyFlu_m_s2Real[3]
inputgravityWorldEnu_m_s2Real[3]
inputage_sReal(unit = "s")
inputstepRealCentral-difference step
outputJReal[15, 15]

Modelica declarations and implementation

Show parameters, interfaces and source

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

function fdRetrodictJacobian
  "Central difference of retrodict in the ESKF tangent, right-trivialized pose"
  input Estimation.StrapdownINS.ESKF.State current;
  input Real angularVelocityMeasuredBodyFlu_rad_s[3];
  input Real specificForceMeasuredBodyFlu_m_s2[3];
  input Real gravityWorldEnu_m_s2[3];
  input Real age_s(unit = "s");
  input Real step "Central-difference step";
  output Real J[15, 15];
protected
  Real baseVector[16];
  Real baseInverse[10];
  Real baseBiases[6];
  Real basis[15, 15];
  Real forwardError[15];
  Real backwardError[15];
algorithm
  baseVector := Estimation.StrapdownINS.ESKF.retrodict(current,
    angularVelocityMeasuredBodyFlu_rad_s,
    specificForceMeasuredBodyFlu_m_s2, gravityWorldEnu_m_s2, age_s);
  baseInverse := LieGroups.SE23.Quat.inverse(baseVector[1:10]);
  baseBiases := baseVector[11:16];
  basis := identity(15);
  for j in 1:15 loop
    forwardError := Tests.RuleChecks.retrodictTangentError(current,
      angularVelocityMeasuredBodyFlu_rad_s,
      specificForceMeasuredBodyFlu_m_s2, gravityWorldEnu_m_s2, age_s,
      step * basis[:, j], baseInverse, baseBiases);
    backwardError := Tests.RuleChecks.retrodictTangentError(current,
      angularVelocityMeasuredBodyFlu_rad_s,
      specificForceMeasuredBodyFlu_m_s2, gravityWorldEnu_m_s2, age_s,
      -step * basis[:, j], baseInverse, baseBiases);
    J[:, j] := (forwardError - backwardError) / (2.0 * step);
  end for;
end fdRetrodictJacobian;