ObjectMemoryObserver.cpp
Go to the documentation of this file.
1 /*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @package VisionX::Observers
17 * @author Kai Welke (welke at kit dot edu), David Schiebener (david dot schiebener at kit dot edu)
18 * @copyright 2012 Humanoids Group, HIS, KIT
19 * @license http://www.gnu.org/licenses/gpl-2.0.txt
20 * GNU General Public License
21 */
22 
23 #include "ObjectMemoryObserver.h"
24 
26 
27 #include <RobotAPI/interface/components/ViewSelectionInterface.h>
28 
35 
36 // checks
42 
43 namespace memoryx
44 {
45  // ********************************************************************
46  // observer framework hooks
47  // ********************************************************************
48  void
50  {
51  usingProxy(getProperty<std::string>("WorkingMemoryProxy").getValue());
52  usingProxy(getProperty<std::string>("PriorKnowledgeProxy").getValue());
53 
54  uniqueId = 0;
55 
56  // register all checks
62 
63  // use working memory update topic
64  usingTopic(getProperty<std::string>("WorkingMemoryListenerTopic").getValue());
65  }
66 
67  void
69  {
70  // retrieve object memory proxy
71  proxyWorkingMemory = getProxy<AbstractWorkingMemoryInterfacePrx>(
72  getProperty<std::string>("WorkingMemoryProxy").getValue());
73  getProxy(priorKnowledge, getProperty<std::string>("PriorKnowledgeProxy").getValue());
74  priorObjectClassesSegment = priorKnowledge->getObjectClassesSegment();
75  // retrieve required segments of memory
76  objectInstancesSegment = ObjectInstanceMemorySegmentBasePrx::checkedCast(
77  proxyWorkingMemory->getSegment("objectInstances"));
78  objectClassesSegment = ObjectClassMemorySegmentBasePrx::checkedCast(
79  proxyWorkingMemory->getSegment("objectClasses"));
80  }
81 
82  // ********************************************************************
83  // ObjectMemoryObserverInterface implementation
84  // ********************************************************************
85 
86  armarx::ChannelRefBasePtr
87  ObjectMemoryObserver::requestObjectClassOnce(const std::string& objectClassName,
88  const IceUtil::Optional<Ice::Int>& priority,
89  const ::Ice::Current& c)
90  {
91  return requestObjectClassRepeated(objectClassName, -1, priority, c);
92  }
93 
94  armarx::ChannelRefBasePtr
95  ObjectMemoryObserver::requestObjectClassRepeated(const std::string& objectClassName,
96  int cycleTimeMS,
97  const IceUtil::Optional<Ice::Int>& priority,
98  const ::Ice::Current& c)
99  {
100  ARMARX_IMPORTANT << "attending to objects of class: " << objectClassName
101  << " with cycle time " << cycleTimeMS;
102 
103  // assure complete ontology tree is in object classes segment
104  ObjectClassList classes =
105  objectClassesSegment->addPriorClassWithSubclasses(objectClassName);
106 
107  if (classes.size() == 0)
108  {
109  ARMARX_WARNING_S << "Class " << objectClassName << " not found ";
110  return NULL;
111  }
112 
113  // create name for query
114  std::stringstream ss;
115  ss << objectClassName << "_query_" << getUniqueId();
116  std::string queryName = ss.str();
117 
118  // update requested entity with query
119  ObjectClassPtr objectClass = ObjectClassPtr::dynamicCast(
120  objectClassesSegment->getEntityByName(objectClassName)->ice_clone());
122  objectClass->addWrapper(new EntityWrappers::ObjectRecognitionWrapper());
123 
124  int localizationPriority = armarx::DEFAULT_VIEWTARGET_PRIORITY;
125  if (priority)
126  {
127  localizationPriority = priority.get();
128  }
129  LocalizationQueryPtr query =
130  new LocalizationQuery(queryName, objectClassName, cycleTimeMS, localizationPriority);
131  recognitionWrapper->addLocalizationQuery(query);
132 
133  // create channel
134  armarx::ChannelRefBasePtr queryChannel = createObjectLocalizationQueryChannel(query);
135 
136  // update class segment
137  objectClassesSegment->updateEntity(objectClass->getId(), objectClass);
138 
139  return queryChannel;
140  }
141 
142  void
143  ObjectMemoryObserver::releaseObjectClass(const armarx::ChannelRefBasePtr& objectClassChannel,
144  const ::Ice::Current& c)
145  {
146  armarx::ChannelRefPtr channelRef = armarx::ChannelRefPtr::dynamicCast(objectClassChannel);
147  if (!existsChannel(objectClassChannel->channelName))
148  {
149  ARMARX_INFO << "Object class query channel " << objectClassChannel->channelName
150  << "does not exist - skipping removal";
151  return;
152  }
153  std::string objectClassName = channelRef->getDataField("className")->getString();
154 
155  ARMARX_IMPORTANT << "releasing objects of class " << objectClassName;
156 
157  // remove query requested entity with query
158  auto entity = objectClassesSegment->getEntityByName(objectClassName);
159  ObjectClassPtr objectClass = ObjectClassPtr::dynamicCast(entity);
160  if (objectClass)
161  {
163  objectClass->addWrapper(new EntityWrappers::ObjectRecognitionWrapper());
164 
165  recognitionWrapper->removeLocalizationQuery(objectClassChannel->channelName);
166 
167  // update the entity
168  objectClassesSegment->updateEntity(objectClass->getId(), objectClass);
169 
170  // remove reference to the class
171  objectClassesSegment->removePriorClassWithSubclasses(objectClassName);
172  }
173 
174  // remove channel
175  removeChannel(objectClassChannel->channelName);
176  }
177 
178  memoryx::ChannelRefBaseSequence
179  ObjectMemoryObserver::getObjectInstancesByClass(const std::string& objectClassName,
180  const ::Ice::Current& c)
181  {
182  memoryx::ChannelRefBaseSequence channels;
183 
184  // retrieve all subclasses of the object class
185  ObjectClassList relevantClasses =
186  priorObjectClassesSegment->getClassWithSubclasses(objectClassName);
187  for (ObjectClassBasePtr& objClass : relevantClasses)
188  {
189  ARMARX_DEBUG << "relevant class: " << objClass->getName();
190  }
191  // go through channels
192  armarx::ChannelRegistry registry = getAvailableChannels(false);
193 
194  for (armarx::ChannelRegistry::iterator iter = registry.begin(); iter != registry.end();
195  iter++)
196  {
197  // check whether channel is instances channel
198  armarx::ChannelRegistryEntry channelEntry = iter->second;
199  ARMARX_DEBUG << "Checking " << channelEntry.name;
200 
201  if (channelEntry.dataFields.find("instanceName") == channelEntry.dataFields.end())
202  {
203  ARMARX_DEBUG << "No instance name for " << channelEntry.name;
204  continue;
205  }
206 
207  // check whether channel belongs to requested class
208  armarx::DataFieldRegistry dataFields = channelEntry.dataFields;
209  armarx::DataFieldRegistry::const_iterator iterDataFields = dataFields.find("className");
210 
211  if (iterDataFields == dataFields.end())
212  {
213  ARMARX_DEBUG << "No class name for " << channelEntry.name;
214  continue;
215  }
216 
217  armarx::DataFieldRegistryEntry dataField = iterDataFields->second;
218  if (!dataField.value->getInitialized())
219  {
220  ARMARX_DEBUG << "className not init. for " << channelEntry.name;
221 
222  continue;
223  }
224  std::string channelObjectClassName = dataField.value->getString();
225 
226  bool relevant = false;
227 
228  for (ObjectClassList::iterator iterClasses = relevantClasses.begin();
229  iterClasses != relevantClasses.end();
230  iterClasses++)
231  {
232  ObjectClassBasePtr objectClass = *iterClasses;
233 
234  if (objectClass->getName() == channelObjectClassName)
235  {
236  relevant = true;
237  }
238  }
239 
240  if (relevant)
241  {
242  ARMARX_DEBUG << "Adding instance " << iter->first << " to result";
243  channels.push_back(new armarx::ChannelRef(this, iter->first));
244  }
245  else
246  {
247  ARMARX_DEBUG << "No relevant class found";
248  }
249  }
250 
251  return channels;
252  }
253 
254  armarx::ChannelRefBasePtr
256  const armarx::ChannelRefBasePtr& objectClassChannel,
257  const Ice::Current& c)
258  {
259  auto instances = getObjectInstances(objectClassChannel, c);
260 
261  if (instances.size() > 0)
262  {
263  return instances.front();
264  }
265  else
266  {
267  return armarx::ChannelRefBasePtr();
268  }
269  }
270 
271  armarx::ChannelRefBasePtr
272  ObjectMemoryObserver::getFirstObjectInstanceByClass(const std::string& objectClassName,
273  const Ice::Current& c)
274  {
275  auto instances = getObjectInstancesByClass(objectClassName, c);
276 
277  if (instances.size() > 0)
278  {
279  return instances.front();
280  }
281  else
282  {
283  return armarx::ChannelRefBasePtr();
284  }
285  }
286 
287  memoryx::ChannelRefBaseSequence
288  ObjectMemoryObserver::getObjectInstances(const armarx::ChannelRefBasePtr& objectClassChannel,
289  const ::Ice::Current& c)
290  {
291  armarx::ChannelRefPtr channelRef = armarx::ChannelRefPtr::dynamicCast(objectClassChannel);
292  return getObjectInstancesByClass(channelRef->getDataField("className")->getString(), c);
293  }
294 
295  void
296  ObjectMemoryObserver::reportEntityCreated(const std::string& segmentName,
297  const EntityBasePtr& entity,
298  const ::Ice::Current& c)
299  {
300  ARMARX_VERBOSE << "reportEntityCreated(): " << entity->getName()
301  << ", segmentName: " << segmentName;
302 
303  ObjectInstancePtr instance = ObjectInstancePtr::dynamicCast(entity);
304 
305  // check whether this is the correct type of entity
306  if (!instance)
307  {
308  return;
309  }
310 
311  // check whether entity is in channel list -> error
312  if (existsChannel(getInstanceChannelName(instance)))
313  {
314  ARMARX_ERROR << "Object instance " << instance->getName() << " already in channel list";
315  return;
316  }
317 
318  // create and update channel
319  createObjectInstanceChannel(instance);
320  updateObjectInstanceChannel(instance);
321  }
322 
323  void
324  ObjectMemoryObserver::reportEntityUpdated(const std::string& segmentName,
325  const EntityBasePtr& entityOld,
326  const EntityBasePtr& entityNew,
327  const ::Ice::Current& c)
328  {
329  ARMARX_DEBUG << deactivateSpam(5, entityNew->getName())
330  << "ObjectMemoryObserver::reportEntityUpdated(): " << entityNew->getName()
331  << ", segmentName: " << segmentName;
332  try
333  {
334  if (segmentName == "objectClasses")
335  {
336  ObjectClassPtr objectClass = ObjectClassPtr::dynamicCast(entityNew);
338  objectClass->addWrapper(new EntityWrappers::ObjectRecognitionWrapper());
339 
340  LocalizationQueryList queries = recognitionWrapper->getLocalizationQueries();
341 
342  for (LocalizationQueryList::iterator iter = queries.begin(); iter != queries.end();
343  iter++)
344  {
345  try
346  {
347  updateObjectLocalizationQueryChannel(
348  LocalizationQueryPtr::dynamicCast(*iter));
349  }
351  {
352  createObjectLocalizationQueryChannel(
353  LocalizationQueryPtr::dynamicCast(*iter));
354  }
355  }
356 
357  return;
358  }
359 
360  if (segmentName == "objectInstances")
361  {
362  ObjectInstancePtr instance = ObjectInstancePtr::dynamicCast(entityNew);
363 
364  // check whether this is the correct type of entity
365  if (!instance)
366  {
367  return;
368  }
369 
370  // check if instance has associated channel
371  if (!existsChannel(getInstanceChannelName(instance)))
372  {
373 
374  ARMARX_INFO << "Object instance " << instance->getName()
375  << " not in channel list - creating it";
376 
377 
378  createObjectInstanceChannel(instance);
379  }
380 
381  // update instance channel
382  updateObjectInstanceChannel(instance);
383  }
384  }
385  catch (...)
386  {
388  }
389  }
390 
391  void
392  ObjectMemoryObserver::reportEntityRemoved(const std::string& segmentName,
393  const EntityBasePtr& entity,
394  const ::Ice::Current& c)
395  {
396  ARMARX_VERBOSE << "reportEntityRemoved(): " << entity->getName()
397  << ", segmentName: " << segmentName;
398 
399  ObjectInstancePtr instance = ObjectInstancePtr::dynamicCast(entity);
400  ObjectClassPtr objClass = ObjectClassPtr::dynamicCast(entity);
401 
402  // check whether this is the correct type of entity
403  if (instance)
404  {
405 
406  // check whether entity is in channel list -> error
407  if (!existsChannel(getInstanceChannelName(instance)))
408  {
409  ARMARX_ERROR << "Object instance " << instance->getName() << " not in channel list";
410  return;
411  }
412 
413  // remove channel
414  removeChannel(getInstanceChannelName(instance));
415  }
416  else if (objClass)
417  {
418  auto channels = getObjectClassQueries(objClass->getName());
419  for (auto& channel : channels)
420  {
421  releaseObjectClass(channel);
422  }
423  }
424  }
425 
426  // Should this really be in the observer interface??? At least all other report methods should be called accordingly
427  void
428  ObjectMemoryObserver::reportSnapshotLoaded(const std::string& segmentName,
429  const ::Ice::Current& c)
430  {
431  }
432 
433  void
434  ObjectMemoryObserver::reportMemoryCleared(const std::string& segmentName,
435  const ::Ice::Current& c)
436  {
437  std::scoped_lock lock(channelsMutex);
438 
439  if (segmentName == "objectClasses" || segmentName == "objectInstances")
440  {
441  ARMARX_IMPORTANT << "Working memory was cleared! deleting all channels";
442  auto channels = getAvailableChannels(false);
443 
444  for (auto& channel : channels)
445  {
446  removeChannel(channel.first);
447  }
448  }
449  }
450 
451  // ********************************************************************
452  // utility methods
453  // ********************************************************************
455  ObjectMemoryObserver::createObjectLocalizationQueryChannel(const LocalizationQueryPtr& query)
456  {
457  ARMARX_INFO << "Creating channel for object class: " << query->className;
458  std::string channelName = query->queryName;
459 
460  // offer the channel
461  offerChannel(channelName, "object class information for " + query->className);
462 
463  // set datafields
465  channelName, "className", query->className, "name of object class");
466  offerDataFieldWithDefault(channelName,
467  "localizationFinished",
468  bool(false),
469  "has the localization query finished yet?");
470 
471  return new armarx::ChannelRef(this, channelName);
472  }
473 
474  void
475  ObjectMemoryObserver::updateObjectLocalizationQueryChannel(const LocalizationQueryPtr& query)
476  {
477  ARMARX_DEBUG << "updateObjectLocalizationQueryChannel()";
478 
479  // create unique channel name
480  std::string channelName = query->queryName;
481 
482  setDataField(channelName, "localizationFinished", query->getFinished());
483 
484  updateChannel(channelName);
485  }
486 
487  std::vector<armarx::ChannelRefPtr>
488  ObjectMemoryObserver::getObjectClassQueries(const std::string& objectClassName)
489  {
490  std::vector<armarx::ChannelRefPtr> result;
491  armarx::ChannelRegistry registry = getAvailableChannels(false);
492  for (auto& pair : registry)
493  {
494  armarx::ChannelRegistryEntry& entry = pair.second;
495  auto it = entry.dataFields.find("className");
496  if (entry.name.find("_query_") != std::string::npos && it != entry.dataFields.end() &&
497  it->second.value->getType() == armarx::VariantType::String &&
498  it->second.value->getString() == objectClassName)
499  {
500  result.push_back(new armarx::ChannelRef(this, entry.name));
501  }
502  }
503  return result;
504  }
505 
506  void
507  ObjectMemoryObserver::createObjectInstanceChannel(const ObjectInstancePtr& instance)
508  {
509  // create unique channel name
510  std::string channelName = getInstanceChannelName(instance);
511  std::string objectInstanceName = instance->getName();
512 
513  ARMARX_INFO << "Creating channel " << channelName
514  << " for instance: " << objectInstanceName;
515 
516  // offer the channel
517  offerChannel(channelName, "object instance information for " + objectInstanceName);
518 
519  // set datafields
520  offerDataField(channelName,
521  "id",
523  "id of the object instance in the working memory");
525  channelName, "className", armarx::VariantType::String, "name of object class");
527  channelName, "instanceName", armarx::VariantType::String, "name of object instance");
529  channelName, "position", armarx::VariantType::FramedPosition, "object position");
530  offerDataField(channelName,
531  "orientation",
533  "quaternion for object orientation");
534  offerDataField(channelName, "pose", armarx::VariantType::FramedPose, "object pose");
535  offerDataField(channelName, "priority", armarx::VariantType::Int, "localization priority");
536  offerDataField(channelName,
537  "existenceCertainty",
539  "Existence certainty of this object");
540  offerDataField(channelName,
541  "uncertaintyOfPosition",
543  "Std deviation of the position uncertainty");
544  offerDataField(channelName,
545  "timestamp",
547  "timestamp of last localization");
548  }
549 
550  void
551  ObjectMemoryObserver::updateObjectInstanceChannel(const ObjectInstancePtr& instance)
552  {
553  ARMARX_DEBUG << deactivateSpam(5) << "updateObjectInstanceChannel()";
554 
555  std::string channelName = getInstanceChannelName(instance);
556 
557  // set datafields
558  setDataField(channelName, "id", armarx::Variant(instance->getId()));
559  setDataField(channelName, "className", armarx::Variant(instance->getMostProbableClass()));
560  setDataField(channelName, "instanceName", armarx::Variant(instance->getName()));
561  setDataField(channelName, "position", armarx::Variant(instance->getPosition()));
562  setDataField(channelName, "priority", armarx::Variant(instance->getLocalizationPriority()));
563  setDataField(channelName, "orientation", armarx::Variant(instance->getOrientation()));
564  setDataField(channelName, "pose", armarx::Variant(instance->getPose()));
565  setDataField(
566  channelName, "existenceCertainty", armarx::Variant(instance->getExistenceCertainty()));
567  float stdDeviation = std::numeric_limits<float>::max();
568 
569  if (instance->getPositionUncertainty())
570  {
571  Gaussian posUncertaintyDistribution =
572  EarlyVisionConverters::convertToGaussian(instance->getPositionUncertainty());
573  stdDeviation = pow(posUncertaintyDistribution.getCovariance().determinant(),
574  0.5 / posUncertaintyDistribution.getDimensions());
575  }
576 
577  setDataField(channelName, "uncertaintyOfPosition", armarx::Variant(stdDeviation));
578  setDataField(
579  channelName,
580  "timestamp",
581  armarx::Variant(instance->hasLocalizationTimestamp()
582  ? new armarx::TimestampVariant(instance->getLocalizationTimestamp())
584 
585  // update the channel
586  updateChannel(channelName);
587  }
588 
589  std::string
590  ObjectMemoryObserver::getInstanceChannelName(const EntityBasePtr& instance,
591  const ::Ice::Current& c) const
592  {
593  std::string channelName = instance->getName() + instance->getId();
594  return channelName;
595  }
596 
597  armarx::ChannelRefBasePtr
598  memoryx::ObjectMemoryObserver::getObjectInstanceById(const std::string& id, const Ice::Current&)
599  {
600  armarx::ChannelRegistry registry = getAvailableChannels(false);
601 
602  for (armarx::ChannelRegistry::iterator iter = registry.begin(); iter != registry.end();
603  iter++)
604  {
605  armarx::ChannelRegistryEntry channelEntry = iter->second;
606  ARMARX_DEBUG << "Checking " << channelEntry.name;
607 
608  if (channelEntry.dataFields.find("instanceName") == channelEntry.dataFields.end())
609  {
610  // ARMARX_DEBUG << "No instance name for " << channelEntry.name;
611  continue;
612  }
613  auto it = channelEntry.dataFields.find("id");
614  if (it == channelEntry.dataFields.end())
615  {
616  // ARMARX_DEBUG << "No id for " << channelEntry.name;
617  continue;
618  }
619  if (it->second.value->getString() == id)
620  {
621  return new armarx::ChannelRef(this, iter->first);
622  }
623  }
624  return NULL;
625  }
626 } // namespace memoryx
armarx::Observer::updateChannel
void updateChannel(const std::string &channelName, const std::set< std::string > &updatedDatafields=std::set< std::string >())
Update all conditions for a channel.
Definition: Observer.cpp:788
Gaussian::getCovariance
const covariance_type & getCovariance() const
Definition: Gaussian.h:82
armarx::Variant
The Variant class is described here: Variants.
Definition: Variant.h:223
memoryx::ObjectMemoryObserver::getFirstObjectInstance
armarx::ChannelRefBasePtr getFirstObjectInstance(const armarx::ChannelRefBasePtr &objectClassChannel, const Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:255
ARMARX_VERBOSE
#define ARMARX_VERBOSE
Definition: Logging.h:187
armarx::VariantType::Float
const VariantTypeId Float
Definition: Variant.h:919
ARMARX_IMPORTANT
#define ARMARX_IMPORTANT
Definition: Logging.h:190
ConditionCheckEquals.h
armarx::VariantType::FramedPose
const VariantTypeId FramedPose
Definition: FramedPose.h:36
memoryx::ObjectMemoryObserver::requestObjectClassOnce
armarx::ChannelRefBasePtr requestObjectClassOnce(const std::string &objectClassName, const IceUtil::Optional< Ice::Int > &priority, const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:87
memoryx::ObjectMemoryObserver::requestObjectClassRepeated
armarx::ChannelRefBasePtr requestObjectClassRepeated(const std::string &objectClassName, int cycleTimeMS, const IceUtil::Optional< Ice::Int > &priority, const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:95
armarx::Observer::removeChannel
void removeChannel(std::string channelName)
Remove a channel.
Definition: Observer.cpp:318
ConditionCheckInRange.h
memoryx::ObjectMemoryObserver::getObjectInstanceById
armarx::ChannelRefBasePtr getObjectInstanceById(const std::string &, const ::Ice::Current &c=::Ice::Current()) override
Definition: ObjectMemoryObserver.cpp:598
armarx::ChannelRef
The ChannelRef class is a reference to a channel on an Observer. It is used to access data directly f...
Definition: ChannelRef.h:50
armarx::TimestampVariant
Definition: TimestampVariant.h:54
memoryx::ObjectMemoryObserver::reportEntityUpdated
void reportEntityUpdated(const std::string &segmentName, const EntityBasePtr &entityOld, const EntityBasePtr &entityNew, const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:324
armarx::ConditionCheckSmaller
Definition: ConditionCheckSmaller.h:40
memoryx
VirtualRobot headers.
Definition: CommonPlacesTester.cpp:48
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
ObjectRecognitionWrapper.h
memoryx::ObjectMemoryObserver::reportSnapshotLoaded
void reportSnapshotLoaded(const std::string &segmentName, const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:428
memoryx::LocalizationQueryPtr
IceInternal::Handle< LocalizationQuery > LocalizationQueryPtr
Definition: LocalizationJobContainer.h:39
memoryx::ObjectMemoryObserver::reportMemoryCleared
void reportMemoryCleared(const std::string &segmentName, const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:434
memoryx::ObjectMemoryObserver::getFirstObjectInstanceByClass
armarx::ChannelRefBasePtr getFirstObjectInstanceByClass(const std::string &objectClassName, const Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:272
memoryx::ObjectMemoryObserver::reportEntityCreated
void reportEntityCreated(const std::string &segmentName, const EntityBasePtr &entity, const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:296
armarx::Observer::existsChannel
bool existsChannel(const std::string &channelName) const
Definition: Observer.cpp:1552
Gaussian::getDimensions
int getDimensions() const
Definition: Gaussian.h:94
armarx::TimestampVariant::nowPtr
static TimestampVariantPtr nowPtr()
Definition: TimestampVariant.h:126
memoryx::ObjectMemoryObserver::onInitObserver
void onInitObserver() override
Framework hook.
Definition: ObjectMemoryObserver.cpp:49
IceInternal::Handle< ObjectClass >
ObjectMemoryObserver.h
memoryx::EarlyVisionConverters::convertToGaussian
Gaussian convertToGaussian(const NormalDistributionBasePtr &normalDistribution)
Definition: EarlyVisionConverters.cpp:30
armarx::ConditionCheckUpdated
Definition: ConditionCheckUpdated.h:41
ARMARX_DEBUG
#define ARMARX_DEBUG
Definition: Logging.h:184
armarx::VariantType::ChannelRef
const VariantTypeId ChannelRef
Definition: ChannelRef.h:169
TimestampVariant.h
memoryx::ObjectInstancePtr
IceInternal::Handle< ObjectInstance > ObjectInstancePtr
Definition: ObjectInstance.h:43
armarx::Observer::setDataField
void setDataField(const std::string &channelName, const std::string &datafieldName, const Variant &value, bool triggerFilterUpdate=true)
set datafield with datafieldName and in channel channelName
Definition: Observer.cpp:508
MemoryXCoreObjectFactories.h
max
T max(T t1, T t2)
Definition: gdiam.h:51
armarx::exceptions::local::InvalidChannelException
Definition: InvalidChannelException.h:33
ARMARX_ERROR
#define ARMARX_ERROR
Definition: Logging.h:196
armarx::VariantType::LocalizationQuery
const armarx::VariantTypeId LocalizationQuery
Definition: LocalizationQuery.h:37
armarx::VariantType::Timestamp
const VariantTypeId Timestamp
Definition: TimestampVariant.h:38
Gaussian.h
memoryx::ObjectMemoryObserver::releaseObjectClass
void releaseObjectClass(const armarx::ChannelRefBasePtr &objectClassChannel, const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:143
memoryx::ObjectMemoryObserver::onConnectObserver
void onConnectObserver() override
Framework hook.
Definition: ObjectMemoryObserver.cpp:68
ARMARX_WARNING_S
#define ARMARX_WARNING_S
Definition: Logging.h:213
armarx::ConditionCheckInRange
Definition: ConditionCheckInRange.h:41
armarx::ManagedIceObject::usingTopic
void usingTopic(const std::string &name, bool orderedPublishing=false)
Registers a proxy for subscription after initialization.
Definition: ManagedIceObject.cpp:254
armarx::Observer::channelsMutex
std::recursive_mutex channelsMutex
Definition: Observer.h:600
armarx::Observer::getAvailableChannels
ChannelRegistry getAvailableChannels(bool includeMetaChannels)
Retrieve information on all sensory data channels available from the observer.
Definition: Observer.cpp:1510
armarx::VariantType::FramedOrientation
const VariantTypeId FramedOrientation
Definition: FramedPose.h:39
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:181
memoryx::ObjectMemoryObserver::reportEntityRemoved
void reportEntityRemoved(const std::string &segmentName, const EntityBasePtr &entity, const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:392
ConditionCheckSmaller.h
EarlyVisionConverters.h
memoryx::ObjectMemoryObserver::getObjectInstances
ChannelRefBaseSequence getObjectInstances(const armarx::ChannelRefBasePtr &objectClassChannel, const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:288
memoryx::EntityWrappers::ObjectRecognitionWrapper
Definition: ObjectRecognitionWrapper.h:40
armarx::VariantType::Int
const VariantTypeId Int
Definition: Variant.h:917
armarx::ConditionCheckEquals
Definition: ConditionCheckEquals.h:46
MemoryXTypesObjectFactories.h
memoryx::ObjectMemoryObserver::getObjectInstancesByClass
ChannelRefBaseSequence getObjectInstancesByClass(const std::string &objectClassName, const ::Ice::Current &c=Ice::emptyCurrent) override
Definition: ObjectMemoryObserver.cpp:179
armarx::Logging::deactivateSpam
SpamFilterDataPtr deactivateSpam(float deactivationDurationSec=10.0f, const std::string &identifier="", bool deactivate=true) const
disables the logging for the current line for the given amount of seconds.
Definition: Logging.cpp:99
armarx::Observer::offerConditionCheck
void offerConditionCheck(std::string checkName, ConditionCheck *conditionCheck)
Offer a condition check.
Definition: Observer.cpp:301
ConditionCheckLarger.h
armarx::ConditionCheckLarger
Definition: ConditionCheckLarger.h:40
armarx::VariantType::FramedPosition
const VariantTypeId FramedPosition
Definition: FramedPose.h:38
armarx::Observer::offerDataFieldWithDefault
void offerDataFieldWithDefault(std::string channelName, std::string datafieldName, const Variant &defaultValue, std::string description)
Offer a datafield with default value.
Definition: Observer.cpp:160
Gaussian
Definition: Gaussian.h:50
armarx::handleExceptions
void handleExceptions()
Definition: Exception.cpp:157
armarx::VariantType::String
const VariantTypeId String
Definition: Variant.h:921
armarx::ManagedIceObject::getProxy
Ice::ObjectPrx getProxy(long timeoutMs=0, bool waitForScheduler=true) const
Returns the proxy of this object (optionally it waits for the proxy)
Definition: ManagedIceObject.cpp:407
armarx::Observer::offerDataField
void offerDataField(std::string channelName, std::string datafieldName, VariantTypeId type, std::string description)
Offer a datafield without default value.
Definition: Observer.cpp:201
MemoryXUpdaterObjectFactories.h
armarx::ManagedIceObject::usingProxy
bool usingProxy(const std::string &name, const std::string &endpoints="")
Registers a proxy for retrieval after initialization and adds it to the dependency list.
Definition: ManagedIceObject.cpp:154
ConditionCheckUpdated.h
armarx::Observer::offerChannel
void offerChannel(std::string channelName, std::string description)
Offer a channel.
Definition: Observer.cpp:131