27#include <SimoxUtility/algorithm/string.h>
39#include <RobotAPI/interface/skills/SkillManagerInterface.h>
45#include <RobotAPI/libraries/skills/core/aron/FluxioSkill.aron.generated.h>
58 statechartListenerProviderSegment(
iceAdapter()),
73 const std::string prefix =
"mem.";
74 statechartListenerProviderSegment.defineProperties(defs, prefix +
"statechartlistener.");
75 executableSkillCoreSegment.defineProperties(defs, prefix +
"executableskill.");
76 composedSkillCoreSegment.defineProperties(defs, prefix +
"composedskill.");
77 profileCoreSegment.defineProperties(defs, prefix +
"profile.");
78 skillExecutionRequestCoreSegment.defineProperties(defs, prefix +
"executionrequest.");
79 skillEventCoreSegment.defineProperties(defs, prefix +
"event.");
84 defs->topic(debugObserver);
86 p.useDebugObserver,
"useDebugObserver",
"Enable debug observer timing measurements");
100 statechartListenerProviderSegment.init();
101 executableSkillCoreSegment.init();
102 composedSkillCoreSegment.init();
103 profileCoreSegment.init();
104 skillExecutionRequestCoreSegment.init();
105 skillEventCoreSegment.init();
107 ARMARX_INFO <<
"Using debug observer: " << p.useDebugObserver;
114 if (p.useDebugObserver && debugObserver)
117 ARMARX_INFO <<
"Debug observer set for LTM timing measurements";
121 createRemoteGuiTab();
135 armem::data::CommitResult
140 IceUtil::Time startTime = IceUtil::Time::now();
142 armem::data::CommitResult result = ReadWritePluginUser::commit(
commit);
144 skills::callback::dti::SkillProviderCallbackInterfacePrx myPrx;
147 for (
const auto& up :
commit.updates)
149 if (up.entityID.coreSegmentName ==
152 for (
const auto& instance : up.instancesData)
164 skillExecutionRequestCoreSegment.convertCommit(instance);
168 catch (
const std::exception& e)
172 <<
". The local memory commit still proceeds.";
178 if (p.useDebugObserver and debugObserver)
180 debugObserver->setDebugChannel(
183 {
"Memory | t commit [ms]",
184 new Variant((IceUtil::Time::now() - startTime).toMilliSecondsDouble())},
193 const Ice::Current& current)
195 ARMARX_INFO <<
"Adding provider to skill memory: " << info.providerId.providerName;
200 executableSkillCoreSegment.addSkillProvider(p);
205 const Ice::Current& current)
207 executableSkillCoreSegment.removeSkillProvider(provider.providerName);
213 skills::manager::dto::SkillStatusUpdate
215 const Ice::Current& current)
217 IceUtil::Time startTime = IceUtil::Time::now();
220 skillExecutionRequestCoreSegment.addSkillExecutionRequest(e);
222 skills::manager::dto::SkillStatusUpdate result =
225 if (p.useDebugObserver and debugObserver)
227 debugObserver->setDebugChannel(
230 {
"Memory | t executeSkill [ms]",
231 new Variant((IceUtil::Time::now() - startTime).toMilliSecondsDouble())},
238 skills::manager::dto::SkillExecutionID
240 const Ice::Current& current)
242 IceUtil::Time startTime = IceUtil::Time::now();
245 skillExecutionRequestCoreSegment.addSkillExecutionRequest(e);
247 skills::manager::dto::SkillExecutionID result =
250 if (p.useDebugObserver and debugObserver)
252 debugObserver->setDebugChannel(
255 {
"Memory | t executeSkillAsync [ms]",
256 new Variant((IceUtil::Time::now() - startTime).toMilliSecondsDouble())},
265 const skills::callback::dto::ProviderID& providerId,
266 const Ice::Current& current)
268 IceUtil::Time startTime = IceUtil::Time::now();
273 skillEventCoreSegment.addSkillUpdateEvent(u);
276 if (p.useDebugObserver and debugObserver)
278 debugObserver->setDebugChannel(
281 {
"Memory | t updateStatusForSkill [ms]",
282 new Variant((IceUtil::Time::now() - startTime).toMilliSecondsDouble())},
287 IceUtil::Optional<skills::manager::dto::SkillStatusUpdate>
289 const Ice::Current& current)
291 IceUtil::Time startTime = IceUtil::Time::now();
294 auto op = this->skillEventCoreSegment.getSkillStatusUpdate(eid);
296 if (p.useDebugObserver and debugObserver)
298 debugObserver->setDebugChannel(
301 {
"Memory | t getSkillStatusUpdate(eid) [ms]",
302 new Variant((IceUtil::Time::now() - startTime).toMilliSecondsDouble())},
308 return op->toManagerIce();
313 skills::manager::dto::SkillStatusUpdateMap
316 IceUtil::Time startTime = IceUtil::Time::now();
318 skills::manager::dto::SkillStatusUpdateMap ret;
319 auto updates = this->skillEventCoreSegment.getSkillStatusUpdates();
321 if (p.useDebugObserver and debugObserver)
323 debugObserver->setDebugChannel(
326 {
"Memory | t getSkillStatusUpdates [ms]",
327 new Variant((IceUtil::Time::now() - startTime).toMilliSecondsDouble())},
330 startTime = IceUtil::Time::now();
333 for (
const auto& [k, v] : updates)
335 ret.insert({k.toManagerIce(), v.toManagerIce()});
338 if (p.useDebugObserver and debugObserver)
340 debugObserver->setDebugChannel(
343 {
"Memory | t getSkillStatusUpdates.toManagerIce [ms]",
344 new Variant((IceUtil::Time::now() - startTime).toMilliSecondsDouble())},
356 const ProfilerStatechartTransitionWithParameters&
x,
359 statechartListenerProviderSegment.reportStatechartTransitionWithParameters(
x);
364 const ProfilerStatechartTransitionWithParametersList&
x,
367 statechartListenerProviderSegment.reportStatechartTransitionWithParametersList(
x);
372 SkillsMemory::createRemoteGuiTab()
378 tab.clearSkillEventsButton.
setLabel(
"Clear Skill Events WM");
379 root.
addChild(tab.clearSkillEventsButton);
381 tab.clearSkillExecutionRequestsButton.
setLabel(
"Clear Skill Execution Requests WM");
382 root.
addChild(tab.clearSkillExecutionRequestsButton);
388 SkillsMemory::RemoteGui_update()
392 clearSkillEventsWorkingMemory();
394 if (tab.clearSkillExecutionRequestsButton.wasClicked())
396 clearSkillExecutionRequestsWorkingMemory();
401 SkillsMemory::clearSkillEventsWorkingMemory()
403 bool consolidated =
false;
404 const std::size_t snapshotCount = skillEventCoreSegment.clearAndConsolidate(
407 ARMARX_IMPORTANT <<
"Cleared SkillEvent working memory: removed " << snapshotCount
408 <<
" snapshot(s). Consolidated to LTM: "
409 << (consolidated ?
"yes" :
"no (recording disabled)") <<
".";
413 SkillsMemory::clearSkillExecutionRequestsWorkingMemory()
415 bool consolidated =
false;
416 const std::size_t snapshotCount = skillExecutionRequestCoreSegment.clearAndConsolidate(
419 ARMARX_IMPORTANT <<
"Cleared SkillExecutionRequest working memory: removed "
420 << snapshotCount <<
" snapshot(s). Consolidated to LTM: "
421 << (consolidated ?
"yes" :
"no (recording disabled)") <<
".";
431 composedSkillCoreSegment.addSkill(skill);
434 std::optional<std::vector<skills::manager::arondto::FluxioSkill>>
437 return composedSkillCoreSegment.getSkills();
440 std::optional<std::vector<skills::manager::arondto::FluxioSkill>>
443 return composedSkillCoreSegment.getSkillsOfProvider(providerId);
449 profileCoreSegment.addProfile(profile);
452 std::optional<std::vector<skills::manager::arondto::FluxioProfile>>
455 return profileCoreSegment.getProfiles();
#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.
std::string getName() const
Retrieve name of object.
Ice::ObjectPrx getProxy(long timeoutMs=0, bool waitForScheduler=true) const
Returns the proxy of this object (optionally it waits for the proxy)
void removeProvider(const skills::manager::dto::ProviderID &provider, const Ice::Current ¤t) override
void addProvider(const skills::manager::dto::ProviderInfo &providerInfo, const Ice::Current ¤t) override
skills::manager::dto::SkillExecutionID executeSkillAsync(const skills::manager::dto::SkillExecutionRequest &skillExecutionRequest, const Ice::Current ¤t) override
SkillManagerComponentPluginUser()
skills::manager::dto::SkillStatusUpdate executeSkill(const skills::manager::dto::SkillExecutionRequest &info, const Ice::Current ¤t) override
Brief description of class SkillsMemory.
void onInitComponent() override
void addProvider(const skills::manager::dto::ProviderInfo &info, const Ice::Current ¤t) override
void removeProvider(const skills::manager::dto::ProviderID &provider, const Ice::Current ¤t) override
armem::data::CommitResult commit(const armem::data::Commit &commit, const Ice::Current &) override
skills::manager::dto::SkillStatusUpdateMap getSkillExecutionStatuses(const Ice::Current ¤t) override
std::optional< std::vector< skills::manager::arondto::FluxioProfile > > loadProfiles() override
std::optional< std::vector< skills::manager::arondto::FluxioSkill > > loadCompositeSkillsOfProvider(const std::string &providerId) override
void onDisconnectComponent() override
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
void updateStatusForSkill(const skills::provider::dto::SkillStatusUpdate &update, const skills::callback::dto::ProviderID &id, const Ice::Current ¤t) override
void reportStatechartTransitionWithParameters(const ProfilerStatechartTransitionWithParameters &, const Ice::Current &) override
void addProfile(const skills::manager::arondto::FluxioProfile &profile) override
skills::manager::dto::SkillStatusUpdate executeSkill(const skills::manager::dto::SkillExecutionRequest &info, const Ice::Current ¤t) override
void onConnectComponent() override
IceUtil::Optional< skills::manager::dto::SkillStatusUpdate > getSkillExecutionStatus(const skills::manager::dto::SkillExecutionID &executionId, const Ice::Current ¤t) override
void reportStatechartTransitionWithParametersList(const ProfilerStatechartTransitionWithParametersList &, const Ice::Current &) override
void onExitComponent() override
skills::manager::dto::SkillExecutionID executeSkillAsync(const skills::manager::dto::SkillExecutionRequest &info, const Ice::Current ¤t) override
std::optional< std::vector< skills::manager::arondto::FluxioSkill > > loadCompositeSkills() override
void saveSkill(const skills::manager::arondto::FluxioSkill &skillt) override
std::string getDefaultName() const override
StatechartListenerComponentPluginUser()
The Variant class is described here: Variants.
void setDebugObserver(DebugObserverInterfacePrx observer)
Set an optional debug observer for timing measurements.
server::ltm::Memory & longtermMemory()
void setMemoryName(const std::string &memoryName)
server::wm::Memory & workingMemory()
MemoryToIceAdapter & iceAdapter()
static ProviderID FromIce(const manager::dto::ProviderID &)
static ProviderInfo FromIce(const manager::dto::ProviderInfo &)
manager::dto::SkillExecutionRequest toManagerIce() const
static SkillExecutionRequest FromIce(const manager::dto::SkillExecutionRequest &)
static constexpr const char * CoreSegmentName
#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...
#define ARMARX_INFO
The normal logging level.
#define ARMARX_IMPORTANT
The logging level for always important information, but expected behaviour (in contrast to ARMARX_WAR...
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
This file offers overloads of toIce() and fromIce() functions for STL container types.
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.
void RemoteGui_startRunningTask()
void RemoteGui_createTab(std::string const &name, RemoteGui::Client::Widget const &rootWidget, RemoteGui::Client::Tab *tab)
static SkillExecutionID FromIce(const skills::manager::dto::SkillExecutionID &)
static SkillStatusUpdate FromIce(const provider::dto::SkillStatusUpdate &update, const std::optional< skills::ProviderID > &providerId=std::nullopt)