32#include <MemoryX/interface/memorytypes/MemoryEntities.h>
47 def->topic<WorkingMemoryListenerInterface>(
"WorkingMemory",
"WorkingMemoryName");
48 def->optional(minOrientationDistance,
49 "MinOrientationDistance",
50 "Min Distance an object has to rotate until the memory receives an update");
51 def->optional(minPositionDistance,
52 "MinPositrionDistance",
53 "Min Distance an object has to move until the memory receives an update");
58 minOrientationDistance(0.25 *
M_PI), minPositionDistance(100)
65 return "SimpleEpisodicMemoryWorkingMemoryConnector";
71 return "SimpleEpisodicMemoryWorkingMemoryConnector";
101 const std::string& segmentName,
102 const memoryx::EntityBasePtr& newEntity,
105 if (segmentName !=
"objectInstances")
110 EntityPtr entity = EntityPtr::dynamicCast(newEntity);
113 std::map<int, memoryx::EntityBasePtr> entitiesForSegment = entityMap[segmentName];
114 entitiesForSegment[std::stoi(entity->getId())] = entity;
116 EntityAttributePtr pos = EntityAttributePtr::dynamicCast(entity->getAttribute(
"position"));
118 auto framedPos = posValue->getClass<armarx::FramedPositionBase>();
120 memoryx::ObjectPoseEvent o;
121 o.objectName = entity->getName();
125 o.frame = framedPos->frame;
126 o.type = memoryx::ObjectPoseEventType::NEW_OBJECT_RECOGNIZED;
127 o.receivedInMs = IceUtil::Time::now().toMilliSecondsDouble();
133 const std::string& segmentName,
134 const memoryx::EntityBasePtr& entityOld,
135 const memoryx::EntityBasePtr& entityNew,
141 if (segmentName !=
"objectInstances")
146 EntityPtr prevEntity = EntityPtr::dynamicCast(entityOld);
147 EntityPtr currEntity = EntityPtr::dynamicCast(entityNew);
150 EntityAttributePtr::dynamicCast(prevEntity->getAttribute(
"position"));
151 armarx::VariantPtr prevPosValue = armarx::VariantPtr::dynamicCast(prevPos->getValue());
152 auto prevFramedPos = prevPosValue->getClass<armarx::FramedPositionBase>();
155 EntityAttributePtr::dynamicCast(currEntity->getAttribute(
"position"));
156 armarx::VariantPtr currPosValue = armarx::VariantPtr::dynamicCast(currPos->getValue());
157 auto currFramedPos = currPosValue->getClass<armarx::FramedPositionBase>();
159 Eigen::Vector3f prevPosVector(prevFramedPos->x, prevFramedPos->y, prevFramedPos->z);
160 Eigen::Vector3f currPosVector(currFramedPos->x, currFramedPos->y, currFramedPos->z);
162 float distance = (currPosVector - prevPosVector).
norm();
164 if (
distance > minPositionDistance )
167 std::map<int, memoryx::EntityBasePtr> entitiesForSegment = entityMap[segmentName];
168 entitiesForSegment[std::stoi(currEntity->getId())] = currEntity;
170 memoryx::ObjectPoseEvent o;
171 o.objectName = currEntity->getName();
172 o.x = currPosVector(0);
173 o.y = currPosVector(1);
174 o.z = currPosVector(2);
175 o.type = memoryx::ObjectPoseEventType::OBJECT_POSE_UPDATE;
176 o.receivedInMs = IceUtil::Time::now().toMilliSecondsDouble();
183 const std::string& segmentName,
184 const memoryx::EntityBasePtr& entity,
187 ARMARX_DEBUG <<
"Entity removed: id = " << entity->getId();
199 const Ice::Current&
c)
#define ARMARX_REGISTER_COMPONENT_EXECUTABLE(ComponentT, applicationName)
Default component property definition container.
std::string getConfigIdentifier()
Retrieve config identifier for this component as set in constructor.
bool usingProxy(const std::string &name, const std::string &endpoints="")
Registers a proxy for retrieval after initialization and adds it to the dependency list.
Ice::ObjectPrx getProxy(long timeoutMs=0, bool waitForScheduler=true) const
Returns the proxy of this object (optionally it waits for the proxy)
std::string m_simple_episodic_memory_proxy_name
memoryx::SimpleEpisodicMemoryInterface::ProxyType m_simple_episodic_memory
void onInitComponent() override
void reportEntityUpdated(const std::string &, const EntityBasePtr &, const EntityBasePtr &, const Ice::Current &) override
SimpleEpisodicMemoryWorkingMemoryConnector()
void onDisconnectComponent() override
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
void reportEntityRemoved(const std::string &, const EntityBasePtr &, const Ice::Current &) override
void reportSnapshotCompletelyLoaded(const Ice::Current &) override
void onConnectComponent() override
void reportSnapshotLoaded(const std::string &, const Ice::Current &) override
static std::string GetDefaultName()
void reportEntityCreated(const std::string &, const EntityBasePtr &, const Ice::Current &) override
void onExitComponent() override
void reportMemoryCleared(const std::string &, const Ice::Current &) override
std::string getDefaultName() const override
#define ARMARX_DEBUG
The logging level for output that is only interesting while debugging.
IceInternal::Handle< Variant > VariantPtr
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.
IceInternal::Handle< EntityAttribute > EntityAttributePtr
Typedef of EntityAttributePtr as IceInternal::Handle<EntityAttribute> for convenience.
IceInternal::Handle< Entity > EntityPtr
Typedef of EntityPtr as IceInternal::Handle<Entity> for convenience.
double norm(const Point &a)
double distance(const Point &a, const Point &b)