CogniPilot

MODELICA LIBRARY · ENGINEERING REFERENCE

function

SLAM.PoseGraph.PGRun

Public declarations

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

RoleNameTypeDimensions / attributes / defaultDescription
inputpReal[:,3]
inputRReal[size(p,1),3,3]
inputnodeMaskReal[size(p,1)]
inputedgeMaskReal[:]
inputsourceInteger[size(edgeMask,1)]
inputtargetInteger[size(edgeMask,1)]
inputtranslationReal[size(edgeMask,1),3]
inputmeasuredRotationReal[size(edgeMask,1),3,3]
inputinformationReal[size(edgeMask,1),6,6]
inputinitialCostReal
inputinitialDampingReal
inputmaximumPositionStepReal
inputmaximumAngleStepReal
inputpcgToleranceReal
inputmaximumIterationsInteger
inputmaximumPCGInteger
inputmaximumBacktracksInteger
outputnextPReal[size(p,1),3]
outputnextRReal[size(p,1),3,3]
outputcostReal
outputacceptedIterationsReal
outputpcgIterationsReal

Modelica declarations and implementation

Show parameters, interfaces and source

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

function PGRun
  import PGStep = SLAM.PoseGraph.PGStep;

  input Real p[:,3]; input Real R[size(p,1),3,3]; input Real nodeMask[size(p,1)]; input Real edgeMask[:];
  input Integer source[size(edgeMask,1)]; input Integer target[size(edgeMask,1)];
  input Real translation[size(edgeMask,1),3]; input Real measuredRotation[size(edgeMask,1),3,3]; input Real information[size(edgeMask,1),6,6];
  input Real initialCost; input Real initialDamping; input Real maximumPositionStep; input Real maximumAngleStep; input Real pcgTolerance;
  input Integer maximumIterations; input Integer maximumPCG; input Integer maximumBacktracks;
  output Real nextP[size(p,1),3]; output Real nextR[size(p,1),3,3]; output Real cost; output Real acceptedIterations; output Real pcgIterations;
protected Real damping; Real accepted; Real iterations; Boolean running;
algorithm
  nextP := p; nextR := R; cost := initialCost; acceptedIterations := 0.0; pcgIterations := 0.0;
  damping := initialDamping; accepted := 0.0; iterations := 0.0; running := true;
  for iteration in 1:16 loop
    if running and iteration <= maximumIterations then
      (nextP,nextR,cost,damping,accepted,iterations,running) := PGStep(nextP,nextR,nodeMask,edgeMask,source,target,
        translation,measuredRotation,information,cost,damping,maximumPositionStep,maximumAngleStep,pcgTolerance,maximumPCG,maximumBacktracks);
      acceptedIterations := acceptedIterations+accepted; pcgIterations := pcgIterations+iterations;
    end if;
  end for;
end PGRun;