CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

function

SLAM.Inertial.SchmidtImagePairEligibility

Public declarations

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

RoleNameTypeDimensions / attributes / defaultDescription
inputreferenceAvailableReal= 0.0
inputreferenceUsedReal= 0.0
inputreferenceEpochReal= 0.0
inputcurrentEpochReal= 0.0
inputlastUsedEpochReal= -1.0
outputvalidReal
outputeligibleReal
outputcaptureFreshReal

Modelica declarations and implementation

Show parameters, interfaces and source

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

function SchmidtImagePairEligibility
  import SLAMExactRealEqual = SLAM.Inertial.SLAMExactRealEqual;

  input Real referenceAvailable = 0.0;
  input Real referenceUsed = 0.0;
  input Real referenceEpoch = 0.0;
  input Real currentEpoch = 0.0;
  input Real lastUsedEpoch = -1.0;
  output Real valid;
  output Real eligible;
  output Real captureFresh;
algorithm
  valid := if noEvent((SLAMExactRealEqual(referenceAvailable,0.0) or SLAMExactRealEqual(referenceAvailable,1.0))
    and (SLAMExactRealEqual(referenceUsed,0.0) or SLAMExactRealEqual(referenceUsed,1.0))
    and currentEpoch >= 0.0 and currentEpoch <= 9007199254740991.0
    and SLAMExactRealEqual(currentEpoch,floor(currentEpoch))
    and lastUsedEpoch >= -1.0 and lastUsedEpoch <= 9007199254740991.0
    and SLAMExactRealEqual(lastUsedEpoch,floor(lastUsedEpoch))
    and (SLAMExactRealEqual(referenceAvailable,0.0) and SLAMExactRealEqual(referenceUsed,0.0)
      or SLAMExactRealEqual(referenceAvailable,1.0) and referenceEpoch >= 0.0
        and referenceEpoch <= 9007199254740991.0 and SLAMExactRealEqual(referenceEpoch,floor(referenceEpoch))
        and (SLAMExactRealEqual(referenceUsed,0.0) and referenceEpoch > lastUsedEpoch
          or SLAMExactRealEqual(referenceUsed,1.0) and referenceEpoch <= lastUsedEpoch))) then 1.0 else 0.0;
  eligible := if noEvent(valid > 0.5 and SLAMExactRealEqual(referenceAvailable,1.0)
    and SLAMExactRealEqual(referenceUsed,0.0) and currentEpoch > referenceEpoch) then 1.0 else 0.0;
  captureFresh := if noEvent(valid > 0.5 and currentEpoch > lastUsedEpoch
    and (SLAMExactRealEqual(referenceAvailable,0.0) or currentEpoch > referenceEpoch)) then 1.0 else 0.0;
end SchmidtImagePairEligibility;