SkillsMemory.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 RobotAPI::ArmarXObjects::SkillsMemory
17  * @author Rainer Kartmann ( rainer dot kartmann at kit dot edu )
18  * @date 2020
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #include "SkillsMemory.h"
24 
25 #include <SimoxUtility/algorithm/string.h>
26 
32 
38 
39 namespace armarx
40 {
41 
43  ReadWritePluginUser(),
46  statechartListenerProviderSegment(iceAdapter()),
47  executableSkillCoreSegment(iceAdapter()),
48  skillEventCoreSegment(iceAdapter()),
49  skillExecutionRequestCoreSegment(iceAdapter())
50  {
51  }
52 
55  {
58 
59  const std::string prefix = "mem.";
60  statechartListenerProviderSegment.defineProperties(defs, prefix + "statechartlistener.");
61  executableSkillCoreSegment.defineProperties(defs, prefix + "executableskill.");
62  skillExecutionRequestCoreSegment.defineProperties(defs, prefix + "executionrequest.");
63 
64  setMemoryName(MemoryName);
65  return defs;
66  }
67 
68  std::string
70  {
71  return "SkillMemory";
72  }
73 
74  void
76  {
77  statechartListenerProviderSegment.init();
78  executableSkillCoreSegment.init();
79  skillExecutionRequestCoreSegment.init();
80  skillEventCoreSegment.init();
81  }
82 
83  void
85  {
86  }
87 
88  void
90  {
91  }
92 
93  void
95  {
96  }
97 
98  armem::data::CommitResult
99  SkillsMemory::commit(const armem::data::Commit& commit, const Ice::Current& current)
100  {
101  // This function is overloaded to check for skill executions
102  // First pass arg to parent func to ensure that data is written into memory and that clients are notified
103  armem::data::CommitResult result = ReadWritePluginUser::commit(commit);
104 
105  skills::callback::dti::SkillProviderCallbackInterfacePrx myPrx;
106  getProxy(myPrx, -1);
107 
108  for (const auto& up : commit.updates)
109  {
110  if (up.entityID.coreSegmentName ==
112  {
113  for (const auto& instance : up.instancesData)
114  {
115  ARMARX_CHECK_NOT_NULL(instance);
116 
118  skillExecutionRequestCoreSegment.convertCommit(instance);
120  }
121  }
122  }
123 
124  return result;
125  }
126 
127  void
128  SkillsMemory::addProvider(const skills::manager::dto::ProviderInfo& info,
129  const Ice::Current& current)
130  {
131  ARMARX_INFO << "Adding provider to skill memory: " << info.providerId.providerName;
133 
134  // log skills to memory
135  auto p = skills::ProviderInfo::FromIce(info);
136  executableSkillCoreSegment.addSkillProvider(p);
137  }
138 
139  void
140  SkillsMemory::removeProvider(const skills::manager::dto::ProviderID& provider,
141  const Ice::Current& current)
142  {
143  executableSkillCoreSegment.removeSkillProvider(provider.providerName);
144 
145  // remove skills from memory
147  }
148 
149  skills::manager::dto::SkillStatusUpdate
150  SkillsMemory::executeSkill(const skills::manager::dto::SkillExecutionRequest& info,
151  const Ice::Current& current)
152  {
154  skillExecutionRequestCoreSegment.addSkillExecutionRequest(e);
155 
156  return SkillManagerComponentPluginUser::executeSkill(info, current);
157  }
158 
159  skills::manager::dto::SkillExecutionID
160  SkillsMemory::executeSkillAsync(const skills::manager::dto::SkillExecutionRequest& info,
161  const Ice::Current& current)
162  {
164  skillExecutionRequestCoreSegment.addSkillExecutionRequest(e);
165 
167  }
168 
169  void
170  SkillsMemory::updateStatusForSkill(const skills::provider::dto::SkillStatusUpdate& update,
171  const skills::callback::dto::ProviderID& providerId,
172  const Ice::Current& current)
173  {
174  auto p = skills::ProviderID::FromIce(providerId);
176  skillEventCoreSegment.addSkillUpdateEvent(u);
177  }
178 
179  IceUtil::Optional<skills::manager::dto::SkillStatusUpdate>
180  SkillsMemory::getSkillExecutionStatus(const skills::manager::dto::SkillExecutionID& executionId,
181  const Ice::Current& current)
182  {
183  auto eid = skills::SkillExecutionID::FromIce(executionId);
184  auto op = this->skillEventCoreSegment.getSkillStatusUpdate(eid);
185  if (op.has_value())
186  {
187  return op->toManagerIce();
188  }
189  return {};
190  }
191 
192  skills::manager::dto::SkillStatusUpdateMap
193  SkillsMemory::getSkillExecutionStatuses(const Ice::Current& current)
194  {
195  skills::manager::dto::SkillStatusUpdateMap ret;
196  auto updates = this->skillEventCoreSegment.getSkillStatusUpdates();
197  for (const auto& [k, v] : updates)
198  {
199  ret.insert({k.toManagerIce(), v.toManagerIce()});
200  }
201  return ret;
202  }
203 
204  /*
205  * Statechart stuff
206  */
207  void
209  const ProfilerStatechartTransitionWithParameters& x,
210  const Ice::Current&)
211  {
212  statechartListenerProviderSegment.reportStatechartTransitionWithParameters(x);
213  }
214 
215  void
217  const ProfilerStatechartTransitionWithParametersList& x,
218  const Ice::Current&)
219  {
220  statechartListenerProviderSegment.reportStatechartTransitionWithParametersList(x);
221  }
222 } // namespace armarx
armarx::skills::segment::StatechartListenerProviderSegment::defineProperties
void defineProperties(PropertyDefinitionsPtr defs, const std::string &prefix)
Definition: StatechartListenerSegment.cpp:13
armarx::SkillsMemory::removeProvider
void removeProvider(const skills::manager::dto::ProviderID &provider, const Ice::Current &current) override
Definition: SkillsMemory.cpp:140
armarx::aron::ret
ReaderT::InputType T & ret
Definition: rw.h:21
armarx::SkillsMemory::onExitComponent
void onExitComponent() override
Definition: SkillsMemory.cpp:94
armarx::SkillsMemory::addProvider
void addProvider(const skills::manager::dto::ProviderInfo &info, const Ice::Current &current) override
Definition: SkillsMemory.cpp:128
armarx::skills::SkillStatusUpdate::FromIce
static SkillStatusUpdate FromIce(const provider::dto::SkillStatusUpdate &update, const std::optional< skills::ProviderID > &providerId=std::nullopt)
Definition: SkillStatusUpdate.cpp:367
armarx::SkillsMemory::getSkillExecutionStatus
IceUtil::Optional< skills::manager::dto::SkillStatusUpdate > getSkillExecutionStatus(const skills::manager::dto::SkillExecutionID &executionId, const Ice::Current &current) override
Definition: SkillsMemory.cpp:180
armarx::SkillManagerComponentPluginUser::executeSkill
skills::manager::dto::SkillStatusUpdate executeSkill(const skills::manager::dto::SkillExecutionRequest &info, const Ice::Current &current) override
Definition: SkillManagerComponentPlugin.cpp:589
armarx::skills::segment::ExecutableSkillLibraryCoreSegment::init
void init()
Definition: ExecutableSkillLibrarySegment.cpp:29
ArmarXManager.h
armarx::SkillsMemory::onDisconnectComponent
void onDisconnectComponent() override
Definition: SkillsMemory.cpp:89
armarx::SkillsMemory::createPropertyDefinitions
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: SkillsMemory.cpp:54
ARMARX_CHECK_NOT_NULL
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Definition: ExpressionException.h:206
armarx::skills::segment::ExecutableSkillLibraryCoreSegment::removeSkillProvider
void removeSkillProvider(const std::string &providerName)
Definition: ExecutableSkillLibrarySegment.cpp:61
armarx::skills::segment::SkillExecutionRequestCoreSegment::convertCommit
skills::SkillExecutionRequest convertCommit(const aron::data::dto::DictPtr &commitData)
Definition: SkillExecutionRequestSegment.cpp:33
armarx::skills::SkillExecutionRequest::FromIce
static SkillExecutionRequest FromIce(const manager::dto::SkillExecutionRequest &)
Definition: SkillExecutionRequest.cpp:29
armarx::SkillsMemory::getDefaultName
std::string getDefaultName() const override
Definition: SkillsMemory.cpp:69
armarx::SkillsMemory::onConnectComponent
void onConnectComponent() override
Definition: SkillsMemory.cpp:84
armarx::armem::server::plugins::ReadWritePluginUser::setMemoryName
void setMemoryName(const std::string &memoryName)
Definition: ReadWritePluginUser.cpp:25
armarx::skills::segment::SkillEventCoreSegment::init
void init()
Definition: SkillEventSegment.cpp:27
armarx::skills::ProviderInfo::FromIce
static ProviderInfo FromIce(const manager::dto::ProviderInfo &)
Definition: ProviderInfo.cpp:22
armarx::skills::segment::StatechartListenerProviderSegment::init
void init()
Definition: StatechartListenerSegment.cpp:21
armarx::SkillsMemory::reportStatechartTransitionWithParametersList
void reportStatechartTransitionWithParametersList(const ProfilerStatechartTransitionWithParametersList &, const Ice::Current &) override
Definition: SkillsMemory.cpp:216
armarx::SkillsMemory::commit
armem::data::CommitResult commit(const armem::data::Commit &commit, const Ice::Current &) override
Definition: SkillsMemory.cpp:99
armarx::SkillManagerComponentPluginUser::executeSkillAsync
skills::manager::dto::SkillExecutionID executeSkillAsync(const skills::manager::dto::SkillExecutionRequest &skillExecutionRequest, const Ice::Current &current) override
Definition: SkillManagerComponentPlugin.cpp:598
armarx::skills::segment::SkillExecutionRequestCoreSegment::init
void init()
Definition: SkillExecutionRequestSegment.cpp:27
armarx::skills::segment::SkillExecutionRequestCoreSegment::defineProperties
void defineProperties(PropertyDefinitionsPtr defs, const std::string &prefix)
Definition: SkillExecutionRequestSegment.cpp:20
armarx::skills::SkillExecutionRequest
Definition: SkillExecutionRequest.h:21
armarx::skills::segment::StatechartListenerProviderSegment::reportStatechartTransitionWithParametersList
void reportStatechartTransitionWithParametersList(const ProfilerStatechartTransitionWithParametersList &)
Definition: StatechartListenerSegment.cpp:49
memory_definitions.h
armarx::SkillsMemory::reportStatechartTransitionWithParameters
void reportStatechartTransitionWithParameters(const ProfilerStatechartTransitionWithParameters &, const Ice::Current &) override
Definition: SkillsMemory.cpp:208
armarx::SkillsMemory::updateStatusForSkill
void updateStatusForSkill(const skills::provider::dto::SkillStatusUpdate &update, const skills::callback::dto::ProviderID &id, const Ice::Current &current) override
Definition: SkillsMemory.cpp:170
SkillsMemory.h
aron_conversions.h
armarx::skills::segment::SkillExecutionRequestCoreSegment::CoreSegmentName
static constexpr const char * CoreSegmentName
Definition: SkillExecutionRequestSegment.h:22
error.h
armarx::SkillsMemory::executeSkillAsync
skills::manager::dto::SkillExecutionID executeSkillAsync(const skills::manager::dto::SkillExecutionRequest &info, const Ice::Current &current) override
Definition: SkillsMemory.cpp:160
armarx::SkillsMemory::SkillsMemory
SkillsMemory()
Definition: SkillsMemory.cpp:42
ArmarXObjectScheduler.h
armarx::SkillManagerComponentPluginUser
Definition: SkillManagerComponentPlugin.h:71
armarx::SkillManagerComponentPluginUser::removeProvider
void removeProvider(const skills::manager::dto::ProviderID &provider, const Ice::Current &current) override
Definition: SkillManagerComponentPlugin.cpp:580
armarx::SkillsMemory::onInitComponent
void onInitComponent() override
Definition: SkillsMemory.cpp:75
armarx::skills::segment::StatechartListenerProviderSegment::reportStatechartTransitionWithParameters
void reportStatechartTransitionWithParameters(const ProfilerStatechartTransitionWithParameters &)
Definition: StatechartListenerSegment.cpp:26
armarx::armem::server::ltm::util::mongodb::detail::update
bool update(mongocxx::collection &coll, const nlohmann::json &query, const nlohmann::json &update)
Definition: mongodb.cpp:67
armarx::skills::SkillExecutionRequest::toManagerIce
manager::dto::SkillExecutionRequest toManagerIce() const
Definition: SkillExecutionRequest.cpp:8
MemoryToIceAdapter.h
memory_definitions.h
ExpressionException.h
armarx::Component::getConfigIdentifier
std::string getConfigIdentifier()
Retrieve config identifier for this component as set in constructor.
Definition: Component.cpp:74
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
armarx::ComponentPropertyDefinitions
Default component property definition container.
Definition: Component.h:70
TimeUtil.h
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:174
armarx::skills::segment::SkillEventCoreSegment::getSkillStatusUpdates
std::map< skills::SkillExecutionID, skills::SkillStatusUpdate > getSkillStatusUpdates()
Definition: SkillEventSegment.cpp:56
armarx::SkillManagerComponentPluginUser::addProvider
void addProvider(const skills::manager::dto::ProviderInfo &providerInfo, const Ice::Current &current) override
Definition: SkillManagerComponentPlugin.cpp:572
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::skills::segment::SkillEventCoreSegment::addSkillUpdateEvent
void addSkillUpdateEvent(const skills::SkillStatusUpdate &update)
Definition: SkillEventSegment.cpp:33
armarx::skills::SkillExecutionID::FromIce
static SkillExecutionID FromIce(const skills::manager::dto::SkillExecutionID &)
Definition: SkillExecutionID.cpp:29
armarx::StatechartListenerComponentPluginUser
Definition: StatechartListenerComponentPlugin.h:26
armarx::SkillsMemory::getSkillExecutionStatuses
skills::manager::dto::SkillStatusUpdateMap getSkillExecutionStatuses(const Ice::Current &current) override
Definition: SkillsMemory.cpp:193
Logging.h
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:393
armarx::skills::segment::ExecutableSkillLibraryCoreSegment::defineProperties
void defineProperties(PropertyDefinitionsPtr defs, const std::string &prefix)
Definition: ExecutableSkillLibrarySegment.cpp:22
armarx::SkillsMemory::executeSkill
skills::manager::dto::SkillStatusUpdate executeSkill(const skills::manager::dto::SkillExecutionRequest &info, const Ice::Current &current) override
Definition: SkillsMemory.cpp:150
armarx::skills::segment::SkillEventCoreSegment::getSkillStatusUpdate
std::optional< skills::SkillStatusUpdate > getSkillStatusUpdate(const skills::SkillExecutionID &id)
Definition: SkillEventSegment.cpp:87
armarx::skills::segment::SkillExecutionRequestCoreSegment::addSkillExecutionRequest
void addSkillExecutionRequest(const skills::SkillExecutionRequest &info)
Definition: SkillExecutionRequestSegment.cpp:50
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::skills::ProviderID::FromIce
static ProviderID FromIce(const manager::dto::ProviderID &)
Definition: ProviderID.cpp:32
armarx::skills::segment::ExecutableSkillLibraryCoreSegment::addSkillProvider
void addSkillProvider(const skills::ProviderInfo &info)
Definition: ExecutableSkillLibrarySegment.cpp:35