CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

function

Estimation.StrapdownINS.ESKF.initialize

Initialize the geometric error-state filter

Initial state and uncertainty

Supply world ENU position and velocity, a body-FLU-to-world quaternion and body-frame IMU biases. The quaternion is normalized. The initial covariance uses the {position, velocity, attitude, gyro bias, accelerometer bias} tangent ordering; variance inputs are squared physical units, not standard deviations.

If an aiding position seeds the state, supply its world-frame covariance. The initializer rotates it to the local tangent and retains conservative configured variance floors. Zero optional seed covariance keeps the configured prior. Initialization does not itself execute prediction or sensor fusion.

Use Estimator for sampled lifecycle handling or carry the returned State explicitly between prediction and correction calls.

Public declarations

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

RoleNameTypeDimensions / attributes / defaultDescription
inputpositionWorldEnu_mReal[3]
inputquaternionWorldBodyReal[4]
inputvariancesEstimation.StrapdownINS.InitialVariances
inputinitialVelocityWorldEnu_m_sReal[3] = zeros(3)
inputinitialGyroscopeBiasBodyFlu_rad_sReal[3] = zeros(3)
inputinitialAccelerometerBiasBodyFlu_m_s2Real[3] = zeros(3)
inputinitialPositionCovarianceWorld_m2Real[3, 3] = zeros(3, 3)Covariance of an aiding position used as the seed; zero keeps configured priors
inputuseSquareRootCovarianceBoolean= false
inputbarometerBias_mReal= 0.0
inputbarometerBiasVariance_m2Real= 0.0
inputuseJointBarometerBiasBoolean= false
outputstateState

Modelica declarations and implementation

Show parameters, interfaces and source

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

function initialize "Initialize the geometric error-state filter"
  input Real positionWorldEnu_m[3];
  input Real quaternionWorldBody[4];
  input Estimation.StrapdownINS.InitialVariances variances;
  input Real initialVelocityWorldEnu_m_s[3] = zeros(3);
  input Real initialGyroscopeBiasBodyFlu_rad_s[3] = zeros(3);
  input Real initialAccelerometerBiasBodyFlu_m_s2[3] = zeros(3);
  input Real initialPositionCovarianceWorld_m2[3, 3] = zeros(3, 3)
    "Covariance of an aiding position used as the seed; zero keeps configured priors";
  input Boolean useSquareRootCovariance = false;
  input Real barometerBias_m = 0.0;
  input Real barometerBiasVariance_m2 = 0.0;
  input Boolean useJointBarometerBias = false;
  output State state;
protected
  Covariance initialCovariance;
algorithm
  initialCovariance := diagonal(cat(1,
    seedPositionVariances(initialPositionCovarianceWorld_m2,
      quaternionWorldBody, variances.position_m2),
    variances.velocity_m2_s2,
    variances.attitude_rad2,
    variances.gyroscopeBias_rad2_s2,
    variances.accelerometerBias_m2_s4));
  state := State(
    positionWorldEnu_m=positionWorldEnu_m,
    velocityWorldEnu_m_s=initialVelocityWorldEnu_m_s,
    quaternionWorldBody=LieGroups.SO3.Quat.normalize(quaternionWorldBody),
    gyroscopeBiasBodyFlu_rad_s=initialGyroscopeBiasBodyFlu_rad_s,
    accelerometerBiasBodyFlu_m_s2=initialAccelerometerBiasBodyFlu_m_s2,
    covariance=initialCovariance,
    useSquareRootCovariance=useSquareRootCovariance,
    barometerBiasCrossCovariance=zeros(TangentLength),
    barometerBias_m=barometerBias_m,
    barometerBiasVariance_m2=barometerBiasVariance_m2,
    useJointBarometerBias=useJointBarometerBias,
    covarianceRoot=if useSquareRootCovariance then diagonal(
      {sqrt(initialCovariance[axis, axis]) for axis in 1:TangentLength})
      else zeros(TangentLength, TangentLength));
  annotation(Documentation(info = "<html>
    <h4>Initial state and uncertainty</h4>
<p>Supply world ENU position and velocity, a body-FLU-to-world quaternion and
body-frame IMU biases. The quaternion is normalized. The initial covariance
uses the {position, velocity, attitude, gyro bias, accelerometer bias} tangent
ordering; variance inputs are squared physical units, not standard deviations.</p>
<p>If an aiding position seeds the state, supply its world-frame covariance.
The initializer rotates it to the local tangent and retains conservative
configured variance floors. Zero optional seed covariance keeps the configured
prior. Initialization does not itself execute prediction or sensor fusion.</p>
<p>Use <a href=\"modelica://Estimation.StrapdownINS.ESKF.Estimator\">Estimator</a>
for sampled lifecycle handling or carry the returned
<a href=\"modelica://Estimation.StrapdownINS.ESKF.State\">State</a> explicitly
between prediction and correction calls.</p>
    </html>"));
end initialize;