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
30#include <MemoryX/interface/memorytypes/MemorySegments.h>
43
44namespace memoryx
45{
46 const std::string OBJ_INSTANCES_SEGMENT_NAME = "objectInstances";
47 const std::string OBJ_CLASSES_SEGMENT_NAME = "objectClasses";
48 const std::string OBJ_RELATIONS_SEGMENT_NAME = "objectRelations";
49 const std::string ACTIVE_OAC_SEGMENT_NAME = "activeOac";
50 const std::string AGENT_INSTANCES_SEGMENT_NAME = "agentInstances";
51 const std::string WORLD_STATE_SEGMENT_NAME = "worldState";
52 const std::string AFFORDANCE_SEGMENT_NAME = "affordances";
53 const std::string ENVIRONMENTAL_PRIMITIVE_SEGMENT_NAME = "environmentalPrimitives";
54 const std::string DMP_SEGMENT_NAME = "dmpEntity";
55
56 const std::string OBJ_LOCALIZATION_UPDATER_NAME = "objectLocalization";
57
58 void
62
63 void
65 {
66 if (!usePriorMemory)
67 {
68 ARMARX_FATAL << "WorkingMemory will not work when started UsePriorMemory=no";
69 return;
70 }
71
72 float matchThreshold = getProperty<float>("MatchThreshold").getValue();
73 bool matchByClassName = getProperty<bool>("MatchByClassName").getValue();
74
75 // create object instances segment
76 ObjectInstanceMemorySegmentPtr objectInstancesSegment =
77 new ObjectInstanceMemorySegment(matchThreshold, matchByClassName);
78 // objectInstancesSegment->addFusionMethod(new MissingAttributeFusion());
79 // objectInstancesSegment->addFusionMethod(new AttributeReplacementFusion());
80 objectInstancesSegment->addFusionMethod(new MotionModelRestoreFusion());
81
82 bool useKalmanFilter = getProperty<bool>("UseKalmanFilter").getValue();
83
84 if (useKalmanFilter)
85 {
86 objectInstancesSegment->addFusionMethod(new KalmanFilterFusion());
87 }
88 objectInstancesSegment->addFusionMethod(
90
91
92 // create object instances segment
93 addSegment(OBJ_INSTANCES_SEGMENT_NAME, objectInstancesSegment);
94
95 // create object classes segment
96 ObjectClassMemorySegmentPtr objectClassesSegment =
98 addSegment(OBJ_CLASSES_SEGMENT_NAME, objectClassesSegment);
99
100 // create object relations segment
102
103 // Create agent entities segment.
105
106 // Create world state segment.
108
109 // Create affordance segment
111
112 // Create Environmental Primitive segment
114
116 {
117 // create active oac segment
120 }
121
122 // create updater required for object localization
123 if (locUpdater)
124 {
125 locUpdater->setSegmentNames(OBJ_CLASSES_SEGMENT_NAME, OBJ_INSTANCES_SEGMENT_NAME);
127 }
128 else
129 {
130 ARMARX_WARNING << "No Location Updater set!";
131 }
132 }
133
134 void
136 {
137 this->locUpdater = updater;
138 }
139
140 ObjectInstanceMemorySegmentBasePrx
142 {
143 return ObjectInstanceMemorySegmentBasePrx::uncheckedCast(
145 }
146
147 ObjectClassMemorySegmentBasePrx
149 {
150 return ObjectClassMemorySegmentBasePrx::uncheckedCast(getSegment(OBJ_CLASSES_SEGMENT_NAME));
151 }
152
153 RelationMemorySegmentBasePrx
155 {
156 return RelationMemorySegmentBasePrx::uncheckedCast(getSegment(OBJ_RELATIONS_SEGMENT_NAME));
157 }
158
159 ActiveOacMemorySegmentBasePrx
161 {
162 return ActiveOacMemorySegmentBasePrx::uncheckedCast(getSegment(ACTIVE_OAC_SEGMENT_NAME));
163 }
164
165 AgentInstancesSegmentBasePrx
167 {
168 return AgentInstancesSegmentBasePrx::uncheckedCast(
170 }
171
172 WorldStateSegmentBasePrx
174 {
175 return WorldStateSegmentBasePrx::uncheckedCast(getSegment(WORLD_STATE_SEGMENT_NAME));
176 }
177
178 AffordanceSegmentBasePrx
180 {
181 return AffordanceSegmentBasePrx::uncheckedCast(getSegment(AFFORDANCE_SEGMENT_NAME));
182 }
183
184 EnvironmentalPrimitiveSegmentBasePrx
186 {
187 return EnvironmentalPrimitiveSegmentBasePrx::uncheckedCast(
189 }
190
191 std::string
192 WorkingMemory::getMemoryName(const Ice::Current&) const
193 {
194 return getName();
195 }
196
197 ObjectLocalizationMemoryUpdaterBasePrx
199 {
200 return ObjectLocalizationMemoryUpdaterBasePrx::uncheckedCast(
202 }
203
204 CommonStorageInterfacePrx
205 WorkingMemory::getCommonStorage(const ::Ice::Current&) const
206 {
207 return dataBasePrx;
208 }
209
210 PriorKnowledgeInterfacePrx
211 WorkingMemory::getPriorKnowledge(const ::Ice::Current&) const
212 {
213 return priorKnowledgePrx;
214 }
215
216 OacMemorySegmentBasePrx
217 WorkingMemory::getOacSegment(const ::Ice::Current&)
218 {
219 return longtermMemoryPrx->getOacSegment();
220 }
221} // namespace memoryx
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
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.
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