68 const ::Ice::Current& = Ice::emptyCurrent)
override
74 return EntityBasePtr();
77 MultivariateNormalDistributionBasePtr posGaussian = instance->getPositionUncertainty();
82 ObjectInstancePtr::dynamicCast(instance->ice_clone());
85 fusedInstance->setId(
"");
91 fusedInstance->getPositionAttribute()->setValueWithUncertainty(
92 instance->getPositionAttribute()->getValue(), posGM);
110 const EntityBasePtr& newEntity,
111 const ::Ice::Current& = Ice::emptyCurrent)
override
114 ObjectInstancePtr::dynamicCast(oldEntity->ice_clone());
115 EntityAttributeBasePtr posAttr = fusedInstance->getPositionAttribute();
117 GaussianMixtureDistributionPtr::dynamicCast(posAttr->getUncertainty());
124 posGM->scaleComponents(agingFactor);
126 MultivariateNormalDistributionBasePtr newUncertainty =
127 newInstance->getPositionUncertainty();
128 GaussianMixtureComponent newComp;
129 newComp.gaussian = newUncertainty;
133 GaussianMixtureDistributionPtr::dynamicCast(posGM->clone());
135 int associatedCompIndex =
136 associationMethod->getAssociatedComponentIndex(normGM, newComp);
138 if (associatedCompIndex >= 0)
140 GaussianMixtureComponent associatedComp =
141 posGM->getComponent(associatedCompIndex);
142 GaussianMixtureComponent associatedNormComp =
143 normGM->getComponent(associatedCompIndex);
144 GaussianMixtureComponent newNormComp = normGM->getComponent(posGM->size() - 1);
145 GaussianMixtureComponent fusedComp =
146 fuseGaussianComponents(associatedNormComp, newNormComp);
147 fusedComp.weight = newComp.weight + associatedComp.weight;
148 posGM->setComponent(associatedCompIndex, fusedComp);
152 posGM->addComponent(newComp);
156 if (pruningThreshold > 0)
158 posGM->pruneComponents(pruningThreshold);
165 GaussianMixtureComponent modalComp = posGM->getModalComponent();
167 if (modalComp.gaussian)
170 NormalDistributionPtr::dynamicCast(modalComp.gaussian);
173 fusedInstance->getPosition()->getFrame(),
174 fusedInstance->getPosition()->agent);
175 fusedInstance->setPosition(posMean);
176 fusedInstance->getPositionAttribute()->setValueWithUncertainty(
177 fusedInstance->getPositionAttribute()->getValue(), posGM);
178 return fusedInstance;
182 return EntityBasePtr();
187 return EntityBasePtr();