function
SLAM.PoseGraph.RGBDGraphProcessing.Valid
Public declarations
Explicit source declarations; dimensions, modifications and defaults are shown as written, without evaluation.
| Role | Name | Type | Dimensions / attributes / default | Description |
|---|---|---|---|---|
| input | state | State | | |
| output | valid | Boolean | |
Modelica declarations and implementation
Show parameters, interfaces and source
Parameters, inputs, outputs, defaults and equations from the source file.
function Valid
input State state;
output Boolean valid;
algorithm
valid := RGBDLocalizationCatalog.ValidHeader(state.estimator.localization)
and RGBDLocalizationCatalog.ValidEstimator(state.estimator.localization.estimator)
and RGBDVisualVocabulary.Valid(state.vocabulary)
and state.vocabulary.generation == state.estimator.localization.generation
and state.vocabulary.sourceRevision == state.estimator.localization.sourceRevision
and state.vocabulary.version == state.estimator.localization.catalog.vocabularyVersion
and (state.estimator.localization.catalog.nextId == 1 or state.vocabulary.ready)
and RGBDGraphEstimatorCommit.ValidView(state.estimator.localization.catalog,
state.estimator.poses,state.estimator.localization.sourceRevision)
and RGBDGraphCaptureLedger.Valid(state.captures,state.estimator.localization.catalog,
state.estimator.localization.sourceRevision,state.estimator.localization.steps)
and state.estimator.correctionRevision >= 0 and state.estimator.correctionRevision < identifierLimit
and state.estimator.graphRevisionUsed >= 0
and state.estimator.graphRevisionUsed <= state.estimator.localization.graph.revision
and state.estimator.correctionRevision <= state.estimator.graphRevisionUsed
and ((state.estimator.correctionRevision == 0) == (state.estimator.graphRevisionUsed == 0))
and state.attempt.generation == state.estimator.localization.generation
and state.attempt.graphRevision >= state.estimator.graphRevisionUsed
and state.attempt.graphRevision <= state.estimator.localization.graph.revision
and state.attempt.factorProvenance == state.attempt.graphRevision
and state.anchor.binding.generation == state.estimator.localization.generation
and state.anchor.binding.sourceRevision == state.estimator.localization.sourceRevision
and state.selected.binding.generation == state.estimator.localization.generation
and state.selected.binding.sourceRevision == state.estimator.localization.sourceRevision;
// These are receipts of the last ACCEPTED correction. Ordinary capture
// may advance graph/pose revisions or evict their anchor. Never treat a
// historical receipt as a bound on today's graph: Correct regenerates it.
if state.estimator.correctionRevision == 0 then
valid := valid and state.anchor.binding.provenance == 0
and state.selected.binding.graphRevision == 0;
else
valid := valid and GraphGaugeUncertainty.ValidBinding(state.selected.binding)
and state.selected.binding.graphRevision == state.estimator.graphRevisionUsed
and state.selected.binding.factorProvenance == state.estimator.graphRevisionUsed
and state.selected.binding.anchorBoundProvenance == state.anchor.binding.provenance
and state.anchor.binding.provenance == state.estimator.graphRevisionUsed
and state.anchor.binding.id == state.selected.binding.anchorId
and state.anchor.binding.id <= identifierLimit
and state.anchor.binding.slot >= 1 and state.anchor.binding.slot <= nodeCapacity
and state.anchor.binding.slot == mod(state.anchor.binding.id-1,nodeCapacity)+1
and state.anchor.binding.epoch == state.selected.binding.anchorEpoch
and state.anchor.binding.sequence == state.selected.binding.anchorCaptureSequence
and state.anchor.binding.imageTime == state.selected.binding.anchorTime
and state.anchor.binding.catalogPoseRevision == state.selected.binding.catalogPoseRevision
and state.anchor.binding.catalogPoseRevision <= state.estimator.poses.revision;
end if;
end Valid;