Skip to content
Snippets Groups Projects
Commit e1549595 authored by Patrick Hegemann's avatar Patrick Hegemann
Browse files

SkillsMemory Review

parent 5fdce554
No related branches found
No related tags found
No related merge requests found
......@@ -151,6 +151,22 @@
# ArmarX.SkillsMemory.ObjectName = ""
# ArmarX.SkillsMemory.StatechartCoreSegmentName: Name of the core segment for statecharts.
# Attributes:
# - Default: Statechart
# - Case sensitivity: yes
# - Required: no
# ArmarX.SkillsMemory.StatechartCoreSegmentName = Statechart
# ArmarX.SkillsMemory.TransitionsProviderSegmentName: Name of the provider segment for statechart transitions.
# Attributes:
# - Default: Transitions
# - Case sensitivity: yes
# - Required: no
# ArmarX.SkillsMemory.TransitionsProviderSegmentName = Transitions
# ArmarX.SkillsMemory.mem.MemoryName: Name of this memory server.
# Attributes:
# - Default: Skills
......
......@@ -47,7 +47,9 @@ namespace armarx
// Publish
defs->topic(debugObserver);
// Subscribe
// Statechart Logging
defs->optional(p.statechartCoreSegmentName, "StatechartCoreSegmentName", "Name of the core segment for statecharts.");
defs->optional(p.statechartTransitionsProviderSegmentName, "TransitionsProviderSegmentName", "Name of the provider segment for statechart transitions.");
defs->optional(p.statechartTransitionsTopicName, "tpc.sub.ProfilerListener", "Name of the ProfilerListenerInterface topics to subscribe.");
const std::string prefix = "mem.";
......@@ -68,7 +70,7 @@ namespace armarx
workingMemory.name() = p.memoryName;
{
armarx::armem::wm::CoreSegment& c = workingMemory.addCoreSegment(statechartCoreSegmentName, armarx::armem::arondto::Statechart::Transition::toInitialAronType());
armarx::armem::wm::CoreSegment& c = workingMemory.addCoreSegment(p.statechartCoreSegmentName, armarx::armem::arondto::Statechart::Transition::toInitialAronType());
c.addProviderSegment("Transitions", armarx::armem::arondto::Statechart::Transition::toInitialAronType());
}
}
......@@ -115,13 +117,13 @@ namespace armarx
IceInternal::Handle<StatechartListener>
SkillsMemory::createStatechartListener(const std::string& topicName, const std::string& _name)
SkillsMemory::createStatechartListener(const std::string& topicName, const std::string& name)
{
const std::string name = _name.empty() ? topicName + ".Listener" : _name;
ARMARX_DEBUG << "Registering StatechartListener '" << name << "' listening to topic '" << topicName << "'.";
const std::string name_ = name.empty() ? topicName + ".Listener" : name;
ARMARX_DEBUG << "Registering StatechartListener '" << name_ << "' listening to topic '" << topicName << "'.";
IceInternal::Handle<armarx::StatechartListener> listener = Component::create<armarx::StatechartListener>();
listener->setName(name);
listener->setName(name_);
listener->setTopicName(topicName);
// Callback for the transition listener
......@@ -138,9 +140,9 @@ namespace armarx
}
catch (const Ice::AlreadyRegisteredException& e)
{
ARMARX_ERROR << "The name '" << name << "' is already used. Please choose another one.\n"
ARMARX_ERROR << "The name '" << name_ << "' is already used. Please choose another one.\n"
<< "Reason: " << e.what();
getArmarXManager()->removeObjectBlocking(name);
getArmarXManager()->removeObjectBlocking(name_);
}
listener->getObjectScheduler()->waitForObjectState(armarx::ManagedIceObjectState::eManagedIceObjectStarted);
......@@ -158,8 +160,8 @@ namespace armarx
armem::EntityUpdate update;
update.entityID = armem::MemoryID()
.withMemoryName(p.memoryName)
.withCoreSegmentName(statechartCoreSegmentName)
.withProviderSegmentName(statechartTransitionsProviderSegmentName)
.withCoreSegmentName(p.statechartCoreSegmentName)
.withProviderSegmentName(p.statechartTransitionsProviderSegmentName)
.withEntityName(entityName);
update.timeCreated = transitionTime;
......
......@@ -88,6 +88,9 @@ namespace armarx
{
std::string memoryName = "Skills";
// Statechart transition logging
std::string statechartCoreSegmentName = "Statechart";
std::string statechartTransitionsProviderSegmentName = "Transitions";
std::string statechartTransitionsTopicName = "StateReportingTopic";
struct CoreSegments
......@@ -98,12 +101,10 @@ namespace armarx
};
Properties p;
// Statechart transition logging
const std::string statechartCoreSegmentName = "Statechart";
const std::string statechartTransitionsProviderSegmentName = "Transitions";
IceInternal::Handle<StatechartListener> createStatechartListener(const std::string& topicName,
const std::string& _name = "");
const std::string& name = "");
IceInternal::Handle<armarx::StatechartListener> statechartListener;
void reportTransitions(const std::vector<StatechartListener::Transition>& transitions);
......
<?xml version="1.0" encoding="UTF-8" ?>
<AronTypeDefinition>
<CodeIncludes>
</CodeIncludes>
<GenerateTypes>
<IntEnum name="armarx::statechart::aron::StateType">
<EnumValue key="NORMAL" value="0" />
<EnumValue key="FINAL" value="1" />
<EnumValue key="REMOTE" value="2" />
<EnumValue key="DYNAMIC_REMOTE" value="3" />
<EnumValue key="UNDEFINED" value="4" />
</IntEnum>
<Object name='armarx::statechart::aron::ParameterMap'>
<ObjectChild key='parameters'>
<dict>
<String />
</dict>
</ObjectChild>
</Object>
<Object name='armarx::statechart::aron::Transition'>
<ObjectChild key='processId'>
<int />
</ObjectChild>
<ObjectChild key="sourceStateIdentifier">
<String />
</ObjectChild>
<ObjectChild key="targetStateIdentifier">
<String />
</ObjectChild>
<ObjectChild key="eventName">
<String />
</ObjectChild>
<ObjectChild key="targetStateType">
<armarx::statechart::aron::StateType />
</ObjectChild>
<ObjectChild key="inputParameters">
<armarx::statechart::aron::ParameterMap />
</ObjectChild>
<ObjectChild key="localParameters">
<armarx::statechart::aron::ParameterMap />
</ObjectChild>
<ObjectChild key="outputParameters">
<armarx::statechart::aron::ParameterMap />
</ObjectChild>
</Object>
</GenerateTypes>
</AronTypeDefinition>
......@@ -10,7 +10,7 @@ armarx_add_library(
ArmarXCoreObservers
RobotAPI::Core
RobotAPI::libraries::armem
RobotAPI::armem
SOURCES
./aron_conversions.cpp
./StatechartListener.cpp
......
......@@ -5,12 +5,26 @@ namespace armarx::armem
void fromAron(const arondto::Statechart::StateType& dto, eStateType& bo)
{
bo = fromAronStateTypeMap[dto];
if (fromAronStateTypeMap.find(dto) != fromAronStateTypeMap.end())
{
bo = fromAronStateTypeMap[dto];
}
else
{
bo = eStateType::eUndefined;
}
}
void toAron(arondto::Statechart::StateType& dto, const eStateType& bo)
{
dto.value = toAronStateTypeMap[bo].value;
if (toAronStateTypeMap.find(bo) != toAronStateTypeMap.end())
{
dto.value = toAronStateTypeMap[bo].value;
}
else
{
dto.value = arondto::Statechart::StateType::UNDEFINED;
}
}
void fromAron(const arondto::Statechart::ParameterMap& dto, StateParameterMap& bo)
......@@ -49,7 +63,6 @@ namespace armarx::armem
dto.sourceStateIdentifier = bo.sourceStateIdentifier;
dto.targetStateIdentifier = bo.targetStateIdentifier;
dto.eventName = bo.eventName;
dto.targetStateType.initialize();
toAron(dto.targetStateType, bo.targetStateType);
toAron(dto.inputParameters, bo.inputParameters);
toAron(dto.localParameters, bo.localParameters);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment