CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

Estimation/StrapdownINS/ESKF/inflateStateCovariance.mo

Download original .moGitHub source

Documentation: Estimation.StrapdownINS.ESKF.inflateStateCovariance

within Estimation.StrapdownINS.ESKF;

function inflateStateCovariance "Inflate covariance in its selected representation"
  input State previous;
  input VarianceLimits limits;
  input Real dt;
  input Real timeConstant_s;
  output State inflated;
protected
  Covariance addendRoot;
  Covariance inflatedCovariance;
algorithm
  inflatedCovariance := inflateCovariance(previous.covariance, limits,
    dt, timeConstant_s);
  if previous.useSquareRootCovariance then
    addendRoot := zeros(TangentLength, TangentLength);
    for row in 1:TangentLength loop
      addendRoot[row, row] := sqrt(max(inflatedCovariance[row, row]
        - previous.covariance[row, row], 0.0));
    end for;
    inflated := withCovarianceRoot(previous, LinearAlgebra.covarianceRoot(
      cat(2, previous.covarianceRoot, addendRoot)),
      previous.barometerBiasCrossCovariance);
  else
    inflated := withDenseCovariance(previous, inflatedCovariance,
      previous.barometerBiasCrossCovariance);
  end if;
end inflateStateCovariance;