CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

block

Tests.VisualCouplingReplay

Matched Modelica fixed-map loose and tight visual updates

Public declarations

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

RoleNameTypeDimensions / attributes / defaultDescription
inputquaternionWorldBodyReal[4] = {1.0, 0.0, 0.0, 0.0}
inputpositionWorld_mReal[3] = zeros(3)
inputpriorCovarianceReal[15, 15] = 0.001 * identity(15)
inputlandmarksWorld_mReal[4, 3] = [-1.0, -1.0, 4.0; 1.0, -1.0, 5.0; -1.0, 1.0, 6.0; 1.0, 1.0, 7.0]
inputobservationsReal[4, 3] = [220.0, 140.0, 4.0; 400.0, 160.0, 5.0; 253.333333, 306.666667, 6.0; 377.142857, 297.142857, 7.0]
inputmeasurementCovarianceReal[12, 12] = 0.01 * identity(12)
inputrotationBodyCameraReal[3, 3] = 1.0 * identity(3)
inputcameraPositionBody_mReal[3] = zeros(3)
inputintrinsicsReal[4] = {400.0, 400.0, 320.0, 240.0}
outputlooseStateReal[16]
outputtightStateReal[16]
outputlooseCovarianceReal[15, 15]
outputtightCovarianceReal[15, 15]
outputlooseAcceptedBoolean
outputtightAcceptedBoolean
outputlooseNisReal
outputtightNisReal

Modelica declarations and implementation

Show parameters, interfaces and source

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

block VisualCouplingReplay "Matched Modelica fixed-map loose and tight visual updates"
  input Real quaternionWorldBody[4] = {1.0, 0.0, 0.0, 0.0};
  input Real positionWorld_m[3] = zeros(3);
  input Real priorCovariance[15, 15] = 0.001 * identity(15);
  input Real landmarksWorld_m[4, 3] = [-1.0, -1.0, 4.0; 1.0, -1.0, 5.0;
    -1.0, 1.0, 6.0; 1.0, 1.0, 7.0];
  input Real observations[4, 3] = [220.0, 140.0, 4.0; 400.0, 160.0, 5.0;
    253.333333, 306.666667, 6.0; 377.142857, 297.142857, 7.0];
  input Real measurementCovariance[12, 12] = 0.01 * identity(12);
  input Real rotationBodyCamera[3, 3] = 1.0 * identity(3);
  input Real cameraPositionBody_m[3] = zeros(3);
  input Real intrinsics[4] = {400.0, 400.0, 320.0, 240.0};
  output Real looseState[16];
  output Real tightState[16];
  output Real looseCovariance[15, 15];
  output Real tightCovariance[15, 15];
  output Boolean looseAccepted;
  output Boolean tightAccepted;
  output Real looseNis;
  output Real tightNis;
protected
  Estimation.StrapdownINS.ESKF.State predicted(
    positionWorldEnu_m=positionWorld_m, velocityWorldEnu_m_s=zeros(3),
    quaternionWorldBody=quaternionWorldBody,
    gyroscopeBiasBodyFlu_rad_s=zeros(3), accelerometerBiasBodyFlu_m_s2=zeros(3),
    covariance=priorCovariance, useSquareRootCovariance=false, covarianceRoot=zeros(15, 15),
    barometerBiasCrossCovariance=zeros(15), barometerBias_m=0.0,
    barometerBiasVariance_m2=0.0, useJointBarometerBias=false);
  Estimation.StrapdownINS.ESKF.State loose;
  Estimation.StrapdownINS.ESKF.State tight;
algorithm
  when sample(0.0, 0.01) then
    (loose, looseAccepted, looseNis) := SLAM.Fusion.correctMappedLandmarksLoose(
      predicted, landmarksWorld_m, observations, measurementCovariance,
      rotationBodyCamera, cameraPositionBody_m, intrinsics);
    (tight, tightAccepted, tightNis) := SLAM.Fusion.correctMappedLandmarksTight(
      predicted, landmarksWorld_m, observations, measurementCovariance,
      rotationBodyCamera, cameraPositionBody_m, intrinsics);
    looseState := cat(1, loose.positionWorldEnu_m, loose.velocityWorldEnu_m_s,
      loose.quaternionWorldBody, loose.gyroscopeBiasBodyFlu_rad_s, loose.accelerometerBiasBodyFlu_m_s2);
    tightState := cat(1, tight.positionWorldEnu_m, tight.velocityWorldEnu_m_s,
      tight.quaternionWorldBody, tight.gyroscopeBiasBodyFlu_rad_s, tight.accelerometerBiasBodyFlu_m_s2);
    looseCovariance := loose.covariance;
    tightCovariance := tight.covariance;
  end when;
end VisualCouplingReplay;