WorkingMemory.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 MemoryX::WorkingMemory
17* @author Kai Welke ( welke at kit dot edu)
18* @date 2012
19* @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20* GNU General Public License
21*/
22
23#include "WorkingMemory.h"
24
31#include <MemoryX/interface/memorytypes/MemorySegments.h>
44
45namespace memoryx
46{
47 const std::string OBJ_INSTANCES_SEGMENT_NAME = "objectInstances";
48 const std::string OBJ_CLASSES_SEGMENT_NAME = "objectClasses";
49 const std::string OBJ_RELATIONS_SEGMENT_NAME = "objectRelations";
50 const std::string ACTIVE_OAC_SEGMENT_NAME = "activeOac";
51 const std::string AGENT_INSTANCES_SEGMENT_NAME = "agentInstances";
52 const std::string WORLD_STATE_SEGMENT_NAME = "worldState";
53 const std::string AFFORDANCE_SEGMENT_NAME = "affordances";
54 const std::string ENVIRONMENTAL_PRIMITIVE_SEGMENT_NAME = "environmentalPrimitives";
55 const std::string DMP_SEGMENT_NAME = "dmpEntity";
56
57 const std::string OBJ_LOCALIZATION_UPDATER_NAME = "objectLocalization";
58
59 std::string
61 {
62 return "WorkingMemory";
63 }
64
65 void
69
70 void
72 {
73 if (!usePriorMemory)
74 {
75 ARMARX_FATAL << "WorkingMemory will not work when started UsePriorMemory=no";
76 return;
77 }
78
79 float matchThreshold = getProperty<float>("MatchThreshold").getValue();
80 bool matchByClassName = getProperty<bool>("MatchByClassName").getValue();
81
82 // create object instances segment
83 ObjectInstanceMemorySegmentPtr objectInstancesSegment =
84 new ObjectInstanceMemorySegment(matchThreshold, matchByClassName);
85 // objectInstancesSegment->addFusionMethod(new MissingAttributeFusion());
86 // objectInstancesSegment->addFusionMethod(new AttributeReplacementFusion());
87 objectInstancesSegment->addFusionMethod(new MotionModelRestoreFusion());
88
89 bool useKalmanFilter = getProperty<bool>("UseKalmanFilter").getValue();
90
91 if (useKalmanFilter)
92 {
93 objectInstancesSegment->addFusionMethod(new KalmanFilterFusion());
94 }
95 objectInstancesSegment->addFusionMethod(
97
98
99 // create object instances segment
100 addSegment(OBJ_INSTANCES_SEGMENT_NAME, objectInstancesSegment);
101
102 // create object classes segment
103 ObjectClassMemorySegmentPtr objectClassesSegment =
105 addSegment(OBJ_CLASSES_SEGMENT_NAME, objectClassesSegment);
106
107 // create object relations segment
109
110 // Create agent entities segment.
112
113 // Create world state segment.
115
116 // Create affordance segment
118
119 // Create Environmental Primitive segment
121
123 {
124 // create active oac segment
127 }
128
129 // create updater required for object localization
130 if (locUpdater)
131 {
132 locUpdater->setSegmentNames(OBJ_CLASSES_SEGMENT_NAME, OBJ_INSTANCES_SEGMENT_NAME);
134 }
135 else
136 {
137 ARMARX_WARNING << "No Location Updater set!";
138 }
139 }
140
141 void
143 {
144 this->locUpdater = updater;
145 }
146
147 ObjectInstanceMemorySegmentBasePrx
149 {
150 return ObjectInstanceMemorySegmentBasePrx::uncheckedCast(
152 }
153
154 ObjectClassMemorySegmentBasePrx
156 {
157 return ObjectClassMemorySegmentBasePrx::uncheckedCast(getSegment(OBJ_CLASSES_SEGMENT_NAME));
158 }
159
160 RelationMemorySegmentBasePrx
162 {
163 return RelationMemorySegmentBasePrx::uncheckedCast(getSegment(OBJ_RELATIONS_SEGMENT_NAME));
164 }
165
166 ActiveOacMemorySegmentBasePrx
168 {
169 return ActiveOacMemorySegmentBasePrx::uncheckedCast(getSegment(ACTIVE_OAC_SEGMENT_NAME));
170 }
171
172 AgentInstancesSegmentBasePrx
174 {
175 return AgentInstancesSegmentBasePrx::uncheckedCast(
177 }
178
179 WorldStateSegmentBasePrx
181 {
182 return WorldStateSegmentBasePrx::uncheckedCast(getSegment(WORLD_STATE_SEGMENT_NAME));
183 }
184
185 AffordanceSegmentBasePrx
187 {
188 return AffordanceSegmentBasePrx::uncheckedCast(getSegment(AFFORDANCE_SEGMENT_NAME));
189 }
190
191 EnvironmentalPrimitiveSegmentBasePrx
193 {
194 return EnvironmentalPrimitiveSegmentBasePrx::uncheckedCast(
196 }
197
198 std::string
199 WorkingMemory::getMemoryName(const Ice::Current&) const
200 {
201 return getName();
202 }
203
204 ObjectLocalizationMemoryUpdaterBasePrx
206 {
207 return ObjectLocalizationMemoryUpdaterBasePrx::uncheckedCast(
209 }
210
211 CommonStorageInterfacePrx
212 WorkingMemory::getCommonStorage(const ::Ice::Current&) const
213 {
214 return dataBasePrx;
215 }
216
217 PriorKnowledgeInterfacePrx
218 WorkingMemory::getPriorKnowledge(const ::Ice::Current&) const
219 {
220 return priorKnowledgePrx;
221 }
222
223 OacMemorySegmentBasePrx
224 WorkingMemory::getOacSegment(const ::Ice::Current&)
225 {
226 return longtermMemoryPrx->getOacSegment();
227 }
228} // namespace memoryx
229
#define ARMARX_REGISTER_COMPONENT_EXECUTABLE(ComponentT, applicationName)
Definition Decoupled.h:29
Property< PropertyType > getProperty(const std::string &name)
std::string getName() const
Retrieve name of object.
IceManagerPtr getIceManager() const
Returns the IceManager.
AbstractMemorySegmentPrx addSegment(const std::string &segmentName, const AbstractMemorySegmentPtr &segment, const ::Ice::Current &=Ice::emptyCurrent) override
CommonStorageInterfacePrx dataBasePrx
WorkingMemoryUpdaterBasePrx getUpdater(const std::string &updaterName, const ::Ice::Current &=Ice::emptyCurrent) override
WorkingMemoryUpdaterBasePrx registerUpdater(const std::string &updaterName, const WorkingMemoryUpdaterBasePtr &updater, const ::Ice::Current &=Ice::emptyCurrent) override
PriorKnowledgeInterfacePrx priorKnowledgePrx
LongtermMemoryInterfacePrx longtermMemoryPrx
The object class segment is a specialized segment of the SegmentedMemory.
AbstractMemorySegmentPrx getSegment(const std::string &segmentName, const ::Ice::Current &=Ice::emptyCurrent) const override
The WorkingMemory class provides methods for storing runtime information. The data is stored in segme...
ActiveOacMemorySegmentBasePrx getActiveOacSegment(const ::Ice::Current &=Ice::emptyCurrent) override
PriorKnowledgeInterfacePrx getPriorKnowledge(const ::Ice::Current &=Ice::emptyCurrent) const override
void setUpdater(ObjectLocalizationMemoryUpdaterPtr locUpdater)
virtual OacMemorySegmentBasePrx getOacSegment(const ::Ice::Current &=Ice::emptyCurrent)
CommonStorageInterfacePrx getCommonStorage(const ::Ice::Current &=Ice::emptyCurrent) const override
AffordanceSegmentBasePrx getAffordanceSegment(const ::Ice::Current &=Ice::emptyCurrent) override
WorldStateSegmentBasePrx getWorldStateSegment(const ::Ice::Current &=Ice::emptyCurrent) override
AgentInstancesSegmentBasePrx getAgentInstancesSegment(const ::Ice::Current &=Ice::emptyCurrent) override
RelationMemorySegmentBasePrx getRelationsSegment(const ::Ice::Current &=Ice::emptyCurrent) override
void onInitWorkingMemory() override
ObjectInstanceMemorySegmentBasePrx getObjectInstancesSegment(const ::Ice::Current &=Ice::emptyCurrent) override
getObjectInstancesSegment Get the segment where all object instances are stored.
static std::string GetDefaultName()
std::string getMemoryName(const Ice::Current &) const override
ObjectLocalizationMemoryUpdaterBasePrx getObjectLocalizationUpdater(const ::Ice::Current &=Ice::emptyCurrent) override
EnvironmentalPrimitiveSegmentBasePrx getEnvironmentalPrimitiveSegment(const ::Ice::Current &=Ice::emptyCurrent) override
ObjectClassMemorySegmentBasePrx getObjectClassesSegment(const ::Ice::Current &=Ice::emptyCurrent) override
getObjectClassesSegment Get the segment where all used object classes are stored.
void onConnectWorkingMemory() override
#define ARMARX_FATAL
The logging level for unexpected behaviour, that will lead to a seriously malfunctioning program and ...
Definition Logging.h:199
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
Definition Logging.h:193
VirtualRobot headers.
const std::string OBJ_LOCALIZATION_UPDATER_NAME
IceInternal::Handle< ObjectInstanceMemorySegment > ObjectInstanceMemorySegmentPtr
const std::string ACTIVE_OAC_SEGMENT_NAME
IceInternal::Handle< ObjectClassMemorySegment > ObjectClassMemorySegmentPtr
const std::string OBJ_RELATIONS_SEGMENT_NAME
IceInternal::Handle< ObjectLocalizationMemoryUpdater > ObjectLocalizationMemoryUpdaterPtr
const std::string WORLD_STATE_SEGMENT_NAME
const std::string OBJ_CLASSES_SEGMENT_NAME
const std::string ENVIRONMENTAL_PRIMITIVE_SEGMENT_NAME
const std::string AFFORDANCE_SEGMENT_NAME
const std::string DMP_SEGMENT_NAME
const std::string AGENT_INSTANCES_SEGMENT_NAME
const std::string OBJ_INSTANCES_SEGMENT_NAME