CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

SLAM/Localization/RGBDInertialLocalizationInterface.mo

Download original .moGitHub source

Documentation: SLAM.Localization.RGBDInertialLocalizationInterface

within SLAM.Localization;
// Concrete carried-state localization transaction. Persistence copies these
// inputs/outputs verbatim; all image, pose, covariance and commit math is Modelica.
// Image dimensions are structural parameters;350 selected slots remain bounded.
// Pixel selection is a source-owned
// upstream stage (see RGBDFastInertialLocalizationStep). No loop closure here.
partial model RGBDInertialLocalizationInterface
  import RGBDNominalCalibration = Vision.Matching.RGBDNominalCalibration;

  parameter Integer imageHeight(min=1) = 90;
  parameter Integer imageWidth(min=1) = 160;
  constant Integer featureCapacity = 350;
  constant Integer descriptorSize = 49;
  parameter Real initialPositionVariance = 0.25;
  parameter Real initialVelocityVariance = 0.04;
  parameter Real initialAttitudeVariance = 0.01;
  parameter Real initialAccelBiasVariance = 0.0004;
  parameter Real initialGyroBiasVariance = 0.000025;
  final parameter Real defaultRgbCalibration[4] = RGBDNominalCalibration({imageHeight,imageWidth},{69.0,42.0});
  final parameter Real defaultDepthCalibration[4] = RGBDNominalCalibration({imageHeight,imageWidth},{87.0,58.0});
  constant Real defaultNoiseReferenceFx = 848.0/(2.0*tan(87.0*3.141592653589793/360.0));
  parameter Integer channelCount(min=3,max=4) = 4 "RGB or historical RGBA storage";
  input Real rgb[imageHeight,imageWidth,channelCount];
  input Real depth[imageHeight,imageWidth];
  input Real depthUnits = 1.0 "Meters per depth sample";
  input Real rgbCalibration[4] = defaultRgbCalibration;
  input Real depthCalibration[4] = defaultDepthCalibration;
  input Real disparityNoise = 0.08;
  input Real noiseReferenceFx = defaultNoiseReferenceFx;
  input Real baseline = 0.05;
  input Real opticalToBody[3,3] = [0.0,0.0,1.0;-1.0,0.0,0.0;0.0,-1.0,0.0];
  input Real cameraOriginBody[3] = {0.18,0.0,-0.04};
  input Real frameEnabled = 0.0 "Exactly1 only on final held-IMU interval for this image";
  input Real imageCaptureRequested = 0.0;
  input Real position[3] = zeros(3);
  input Real velocity[3] = zeros(3);
  input Real rotation[3,3] = identity(3);
  input Real accelBias[3] = zeros(3);
  input Real gyroBias[3] = zeros(3);
  // Estimated level origin, zero velocity/bias, gravity as declared below.
  // These tunable prior variances are initialization hypotheses, not truth or
  // registration noise. Relative corrections use the actual sandwich output.
  input Real covariance[15,15] = diagonal({initialPositionVariance,initialPositionVariance,initialPositionVariance,
    initialVelocityVariance,initialVelocityVariance,initialVelocityVariance,
    initialAttitudeVariance,initialAttitudeVariance,initialAttitudeVariance,
    initialAccelBiasVariance,initialAccelBiasVariance,initialAccelBiasVariance,
    initialGyroBiasVariance,initialGyroBiasVariance,initialGyroBiasVariance});
  input Real crossCovariance[15,6] = zeros(15,6);
  input Real referenceCovariance[6,6] = zeros(6,6);
  input Real referencePosition[3] = zeros(3);
  input Real referenceRotation[3,3] = identity(3);
  input Real referenceAvailable = 0.0;
  input Real referenceEpoch = 0.0;
  input Real currentEpoch = 0.0;
  input Real referenceUsed = 0.0;
  input Real lastUsedEpoch = -1.0;
  input Real referenceDescriptor[featureCapacity,descriptorSize] = zeros(featureCapacity,descriptorSize);
  input Real referencePoint[featureCapacity,3] = zeros(featureCapacity,3);
  input Real referenceEnabled[featureCapacity] = zeros(featureCapacity);
  input Real referencePixels[featureCapacity,2] = zeros(featureCapacity,2);
  input Real referenceCount = 0.0;
  input Real referenceRgbCalibration[4] = defaultRgbCalibration;
  input Real referenceDepthCalibration[4] = defaultDepthCalibration;
  input Real referenceNoiseReferenceFx = defaultNoiseReferenceFx;
  input Real referenceDisparityNoise = 0.08;
  input Real referenceBaseline = 0.05;
  input Real referenceOpticalToBody[3,3] = [0.0,0.0,1.0;-1.0,0.0,0.0;0.0,-1.0,0.0];
  input Real referenceCameraOriginBody[3] = {0.18,0.0,-0.04};
  input Real accel[3] = {0.0,0.0,9.81};
  input Real gyro[3] = zeros(3);
  input Real gravity[3] = {0.0,0.0,-9.81};
  input Real h = 1.0/90.0;
  input Real density[12] = {0.06,0.06,0.06,0.006,0.006,0.006,0.002,0.002,0.002,0.0002,0.0002,0.0002};
  output Real nextPosition[3]; output Real nextVelocity[3];
  output Real nextRotation[3,3]; output Real nextAccelBias[3]; output Real nextGyroBias[3];
  output Real nextCovariance[15,15]; output Real nextCrossCovariance[15,6];
  output Real nextReferenceCovariance[6,6]; output Real nextReferencePosition[3];
  output Real nextReferenceRotation[3,3]; output Real nextReferenceAvailable;
  output Real nextReferenceEpoch; output Real nextReferenceUsed; output Real nextLastUsedEpoch;
  output Real nextReferenceDescriptor[featureCapacity,descriptorSize];
  output Real nextReferencePoint[featureCapacity,3]; output Real nextReferenceEnabled[featureCapacity];
  output Real nextReferencePixels[featureCapacity,2];
  output Real nextReferenceCount; output Real nextReferenceRgbCalibration[4];
  output Real nextReferenceDepthCalibration[4]; output Real nextReferenceNoiseReferenceFx;
  output Real nextReferenceDisparityNoise; output Real nextReferenceBaseline;
  output Real nextReferenceOpticalToBody[3,3]; output Real nextReferenceCameraOriginBody[3];
  output Real predictionAccepted; output Real observationAccepted; output Real observationRejected;
  output Real captureAccepted; output Real captureRejected; output Real imageReuseRejected;
  output Real imagePairEligible; output Real frameValid; output Real referenceGeometryCompatible;
  output Real visualValid; output Real matchCount; output Real uncertaintyRejectionReason;
  output Real currentDescriptor[featureCapacity,descriptorSize];
  output Real currentPoint[featureCapacity,3]; output Real currentEnabled[featureCapacity];
  output Real currentCount "Selected feature domain extent, including disabled slots; not a valid-point count";
  output Real currentFromReference[3,3]; output Real currentFromReferenceTranslation[3];
  output Real relativeCovariance[6,6];
  output Real mapCandidatePoint[featureCapacity,3]; output Real mapCandidateEnabled[featureCapacity];
  output Real mapCandidateCount;
  output Real nextQuaternion[4] "Normalized w,x,y,z; body FLU to world ENU";
  output Real positionCovariance[3,3]; output Real attitudeCovariance[3,3];
  output Real confidence "Binary accepted relative correction indicator; not posterior probability";
  output Real features[featureCapacity,3]; output Real featureEnabled[featureCapacity];
  output Real trackingCurrentPixel[featureCapacity,2];
  output Real trackingReferencePixel[featureCapacity,2]; output Real trackingEnabled[featureCapacity];
end RGBDInertialLocalizationInterface;