diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp index 57e9e83f81dea648c4ac4b76a3cb61d671455d3b..331d7b35ed6d9720e1436a3776026783caf179b4 100644 --- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp +++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp @@ -26,6 +26,9 @@ namespace armarx::armem::server::obj { + const std::string ObjectMemory::defaultMemoryName = "Object"; + + armarx::PropertyDefinitionsPtr ObjectMemory::createPropertyDefinitions() { armarx::PropertyDefinitionsPtr defs(new ComponentPropertyDefinitions(getConfigIdentifier())); @@ -39,14 +42,20 @@ namespace armarx::armem::server::obj // Use defs->component(kinematicUnitObserver); - instance::SegmentAdapter::defineProperties(defs, "inst."); + + const std::string prefix = "mem."; + + memory.name() = defaultMemoryName; + defs->optional(memory.name(), prefix + "MemoryName", "Name of this memory server."); + + instance::SegmentAdapter::defineProperties(defs, prefix + "inst."); return defs; } ObjectMemory::ObjectMemory() : server::ComponentPluginUser(), - instance::SegmentAdapter(iceMemory, server::ComponentPluginUser::memoryMutex) + instance::SegmentAdapter(server::ComponentPluginUser::iceMemory, server::ComponentPluginUser::memoryMutex) { } @@ -57,6 +66,8 @@ namespace armarx::armem::server::obj void ObjectMemory::onInitComponent() { + memory.name() = defaultMemoryName; + instance::SegmentAdapter::init(); // usingTopicFromProperty("ObjectPoseTopicName"); diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h index 7cb53eb305fe810a89a426cccfaf3f6065ba8aa7..52062816fbdf18079bba724d2a025d9ee0f55e8d 100644 --- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h +++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.h @@ -68,6 +68,10 @@ namespace armarx::armem::server::obj using RobotState = armarx::RobotStateComponentPluginUser; + static const std::string defaultMemoryName; + + + public: ObjectMemory(); @@ -76,7 +80,6 @@ namespace armarx::armem::server::obj std::string getDefaultName() const override; - public: armarx::PropertyDefinitionsPtr createPropertyDefinitions() override; @@ -93,9 +96,6 @@ namespace armarx::armem::server::obj void RemoteGui_update() override; - private: - - private: DebugObserverInterfacePrx debugObserver; diff --git a/source/RobotAPI/libraries/armem_objects/CMakeLists.txt b/source/RobotAPI/libraries/armem_objects/CMakeLists.txt index db06db2f0a9781f03a10e9a9dd7fbd5b20b2b6de..04be23c592090629a5c6ae1bbc5e3308bf77b02a 100644 --- a/source/RobotAPI/libraries/armem_objects/CMakeLists.txt +++ b/source/RobotAPI/libraries/armem_objects/CMakeLists.txt @@ -15,13 +15,13 @@ armarx_add_library( RobotAPI::libraries::armem HEADERS server/instance/SegmentAdapter.h - server/instance/Data.h + server/instance/Segment.h server/instance/Decay.h server/instance/RobotHeadMovement.h server/instance/Visu.h SOURCES server/instance/SegmentAdapter.cpp - server/instance/Data.cpp + server/instance/Segment.cpp server/instance/Decay.cpp server/instance/RobotHeadMovement.cpp server/instance/Visu.cpp diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Data.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp similarity index 87% rename from source/RobotAPI/libraries/armem_objects/server/instance/Data.cpp rename to source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp index 293c00a5e236c9af01832b8470ad1ef9f668b8b8..0e1cc8cf6be52d8865d15ba0ad6886d9886f5729 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/Data.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp @@ -1,4 +1,4 @@ -#include "Data.h" +#include "Segment.h" #include <RobotAPI/libraries/core/Pose.h> #include <RobotAPI/libraries/core/FramedPose.h> @@ -18,14 +18,9 @@ namespace armarx::armem::server::obj::instance { - const std::string Data::defaultMemoryName = "Object"; - - Data::Data(armem::Memory& memory, armem::server::MemoryToIceAdapter& memoryToIceAdapter) : - memory(memory), - memoryToIceAdapter(memoryToIceAdapter) + Segment::Segment(armem::server::MemoryToIceAdapter& memoryToIceAdapter) : + iceMemory(memoryToIceAdapter) { - memory.name() = defaultMemoryName; - oobbCache.setFetchFn([this](const ObjectID & id) -> std::optional<simox::OrientedBoxf> { // Try to get OOBB from repository. @@ -55,9 +50,8 @@ namespace armarx::armem::server::obj::instance }); } - void Data::defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string& prefix) + void Segment::defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string& prefix) { - defs->optional(memory.name(), "mem.MemoryName", "Name of this memory server."); defs->optional(maxHistorySize, "mem.MaxHistorySize", "Maximal size of object poses history (-1 for infinite)."); defs->optional(discardSnapshotsWhileAttached, "mem.DiscardSnapshotsWhileAttached", "If true, no new snapshots are stored while an object is attached to a robot node.\n" @@ -66,14 +60,16 @@ namespace armarx::armem::server::obj::instance decay.defineProperties(defs, prefix + "decay."); } - void Data::init() + void Segment::init() { - coreSegment = &memory.addCoreSegment("ObjectPose", objpose::arondto::ObjectPose::toInitialAronType()); + ARMARX_CHECK_NOT_NULL(iceMemory.memory); + + coreSegment = &iceMemory.memory->addCoreSegment("ObjectPose", objpose::arondto::ObjectPose::toInitialAronType()); coreSegment->setMaxHistorySize(maxHistorySize); } - Data::CommitStats Data::commitObjectPoses( + Segment::CommitStats Segment::commitObjectPoses( const std::string& providerName, const objpose::data::ProvidedObjectPoseSeq& providedPoses, std::optional<armem::Time> discardUpdatesUntil) @@ -92,7 +88,7 @@ namespace armarx::armem::server::obj::instance const armem::Entity* entity = findObjectEntity(armarx::fromIce(provided.objectID), providerName); if (entity) { - const objpose::arondto::ObjectPose data = armem::server::obj::instance::Data::getLatestInstanceData(*entity); + const objpose::arondto::ObjectPose data = getLatestInstanceData(*entity); previousPose = objpose::ObjectPose(); objpose::fromAron(data, *previousPose); @@ -155,7 +151,7 @@ namespace armarx::armem::server::obj::instance return stats; } - void Data::commitObjectPoses(const std::string& providerName, const ObjectPoseSeq& objectPoses) + void Segment::commitObjectPoses(const std::string& providerName, const ObjectPoseSeq& objectPoses) { ARMARX_CHECK_NOT_NULL(coreSegment); @@ -181,24 +177,24 @@ namespace armarx::armem::server::obj::instance update.instancesData.push_back(dto.toAron()); } - memoryToIceAdapter.commit(commit); + iceMemory.commit(commit); } } - armem::CoreSegment& Data::getCoreSegment() + armem::CoreSegment& Segment::getCoreSegment() { ARMARX_CHECK_NOT_NULL(coreSegment); return *coreSegment; } - const armem::CoreSegment& Data::getCoreSegment() const + const armem::CoreSegment& Segment::getCoreSegment() const { ARMARX_CHECK_NOT_NULL(coreSegment); return *coreSegment; } - objpose::ObjectPoseSeq Data::getObjectPoses(IceUtil::Time now) + objpose::ObjectPoseSeq Segment::getObjectPoses(IceUtil::Time now) { ObjectPoseSeq objectPoses = getLatestObjectPoses(); updateObjectPoses(objectPoses, now); @@ -206,7 +202,7 @@ namespace armarx::armem::server::obj::instance } - objpose::ObjectPoseSeq Data::getObjectPosesByProvider( + objpose::ObjectPoseSeq Segment::getObjectPosesByProvider( const std::string& providerName, IceUtil::Time now) { @@ -216,7 +212,7 @@ namespace armarx::armem::server::obj::instance return filterObjectPoses(objectPoses); } - armem::Entity* Data::findObjectEntity(const ObjectID& objectID, const std::string& providerName) + armem::Entity* Segment::findObjectEntity(const ObjectID& objectID, const std::string& providerName) { ARMARX_CHECK_NOT_NULL(coreSegment); armem::MemoryID entityID = armem::MemoryID().withEntityName(objectID.str()); @@ -247,7 +243,7 @@ namespace armarx::armem::server::obj::instance } - void Data::updateObjectPoses(ObjectPoseSeq& objectPoses, IceUtil::Time now) + void Segment::updateObjectPoses(ObjectPoseSeq& objectPoses, IceUtil::Time now) { bool agentSynchronized = false; @@ -258,7 +254,7 @@ namespace armarx::armem::server::obj::instance } - void Data::updateObjectPoses( + void Segment::updateObjectPoses( ObjectPoseSeq& objectPoses, IceUtil::Time now, VirtualRobot::RobotPtr agent, @@ -271,7 +267,7 @@ namespace armarx::armem::server::obj::instance } - void Data::updateObjectPose( + void Segment::updateObjectPose( ObjectPose& objectPose, IceUtil::Time now, VirtualRobot::RobotPtr agent, @@ -286,7 +282,7 @@ namespace armarx::armem::server::obj::instance } - objpose::ObjectPoseSeq Data::filterObjectPoses(const ObjectPoseSeq& objectPoses) const + objpose::ObjectPoseSeq Segment::filterObjectPoses(const ObjectPoseSeq& objectPoses) const { ObjectPoseSeq result; for (const ObjectPose& objectPose : objectPoses) @@ -300,7 +296,7 @@ namespace armarx::armem::server::obj::instance } - void Data::updateAttachement( + void Segment::updateAttachement( ObjectPose& objectPose, VirtualRobot::RobotPtr agent, bool& synchronized) const { if (!objectPose.attachment) @@ -318,34 +314,34 @@ namespace armarx::armem::server::obj::instance objectPose.updateAttached(agent); } - objpose::ObjectPoseSeq Data::getLatestObjectPoses() const + objpose::ObjectPoseSeq Segment::getLatestObjectPoses() const { ARMARX_CHECK_NOT_NULL(coreSegment); return getLatestObjectPoses(*coreSegment); } - objpose::ObjectPoseSeq Data::getLatestObjectPoses(const armem::CoreSegment& coreSeg) + objpose::ObjectPoseSeq Segment::getLatestObjectPoses(const armem::CoreSegment& coreSeg) { ObjectPoseSeq result; getLatestObjectPoses(coreSeg, result); return result; } - objpose::ObjectPoseSeq Data::getLatestObjectPoses(const armem::ProviderSegment& provSeg) + objpose::ObjectPoseSeq Segment::getLatestObjectPoses(const armem::ProviderSegment& provSeg) { ObjectPoseSeq result; getLatestObjectPoses(provSeg, result); return result; } - objpose::ObjectPose Data::getLatestObjectPose(const armem::Entity& entity) + objpose::ObjectPose Segment::getLatestObjectPose(const armem::Entity& entity) { ObjectPose result; getLatestObjectPose(entity, result); return result; } - void Data::getLatestObjectPoses(const armem::CoreSegment& coreSeg, ObjectPoseSeq& out) + void Segment::getLatestObjectPoses(const armem::CoreSegment& coreSeg, ObjectPoseSeq& out) { for (const auto& [_, provSegment] : coreSeg) { @@ -353,7 +349,7 @@ namespace armarx::armem::server::obj::instance } } - void Data::getLatestObjectPoses(const armem::ProviderSegment& provSegment, ObjectPoseSeq& out) + void Segment::getLatestObjectPoses(const armem::ProviderSegment& provSegment, ObjectPoseSeq& out) { for (const auto& [_, entity] : provSegment) { @@ -365,7 +361,7 @@ namespace armarx::armem::server::obj::instance } } - void Data::getLatestObjectPose(const armem::Entity& entity, ObjectPose& out) + void Segment::getLatestObjectPose(const armem::Entity& entity, ObjectPose& out) { for (const armem::EntityInstance& instance : entity.getLatestSnapshot()) { @@ -377,7 +373,7 @@ namespace armarx::armem::server::obj::instance } - objpose::arondto::ObjectPose Data::getLatestInstanceData(const armem::Entity& entity) + objpose::arondto::ObjectPose Segment::getLatestInstanceData(const armem::Entity& entity) { ARMARX_CHECK_GREATER_EQUAL(entity.size(), 1); const armem::EntitySnapshot& snapshot = entity.getLatestSnapshot(); @@ -391,12 +387,12 @@ namespace armarx::armem::server::obj::instance return data; } - std::optional<simox::OrientedBoxf> Data::getObjectOOBB(const ObjectID& id) + std::optional<simox::OrientedBoxf> Segment::getObjectOOBB(const ObjectID& id) { return oobbCache.get(id); } - objpose::ProviderInfo Data::getProviderInfo(const std::string& providerName) + objpose::ProviderInfo Segment::getProviderInfo(const std::string& providerName) { try { @@ -418,7 +414,7 @@ namespace armarx::armem::server::obj::instance objpose::AttachObjectToRobotNodeOutput - Data::attachObjectToRobotNode(const objpose::AttachObjectToRobotNodeInput& input) + Segment::attachObjectToRobotNode(const objpose::AttachObjectToRobotNodeInput& input) { const armem::Time now = armem::Time::now(); @@ -506,7 +502,7 @@ namespace armarx::armem::server::obj::instance return output; } - objpose::DetachObjectFromRobotNodeOutput Data::detachObjectFromRobotNode( + objpose::DetachObjectFromRobotNodeOutput Segment::detachObjectFromRobotNode( const objpose::DetachObjectFromRobotNodeInput& input) { const armem::Time now = armem::Time::now(); @@ -556,13 +552,13 @@ namespace armarx::armem::server::obj::instance struct DetachVisitor : public armem::Visitor { - Data& owner; + Segment& owner; armem::Time now; bool commitAttachedPose; int numDetached = 0; - DetachVisitor(Data& owner, armem::Time now, bool commitAttachedPose) : + DetachVisitor(Segment& owner, armem::Time now, bool commitAttachedPose) : owner(owner), now(now), commitAttachedPose(commitAttachedPose) { } @@ -584,7 +580,7 @@ namespace armarx::armem::server::obj::instance } - objpose::DetachAllObjectsFromRobotNodesOutput Data::detachAllObjectsFromRobotNodes( + objpose::DetachAllObjectsFromRobotNodesOutput Segment::detachAllObjectsFromRobotNodes( const objpose::DetachAllObjectsFromRobotNodesInput& input) { ARMARX_CHECK_NOT_NULL(coreSegment); @@ -602,7 +598,7 @@ namespace armarx::armem::server::obj::instance return output; } - void Data::storeDetachedSnapshot( + void Segment::storeDetachedSnapshot( armem::Entity& entity, const objpose::arondto::ObjectPose& data, armem::Time now, @@ -638,7 +634,7 @@ namespace armarx::armem::server::obj::instance - void Data::RemoteGui::setup(const Data& data) + void Segment::RemoteGui::setup(const Segment& data) { using namespace armarx::RemoteGui::Client; @@ -660,7 +656,7 @@ namespace armarx::armem::server::obj::instance group.addChild(grid); } - void Data::RemoteGui::update(Data& data) + void Segment::RemoteGui::update(Segment& data) { if (infiniteHistory.hasValueChanged() || maxHistorySize.hasValueChanged()) { diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Data.h b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.h similarity index 94% rename from source/RobotAPI/libraries/armem_objects/server/instance/Data.h rename to source/RobotAPI/libraries/armem_objects/server/instance/Segment.h index c6a4651b2020aa6e4c4d1b374de921bff7de10f9..275d9973856bc2a59a71c633374e98bee34cc845 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/Data.h +++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.h @@ -26,12 +26,10 @@ namespace armarx::armem::server::obj::instance { - class Data : public armarx::Logging + class Segment : public armarx::Logging { public: - static const std::string defaultMemoryName; - struct CommitStats { int numUpdated = 0; @@ -42,7 +40,7 @@ namespace armarx::armem::server::obj::instance public: - Data(armem::Memory& memory, armem::server::MemoryToIceAdapter& memoryToIceAdapter); + Segment(armem::server::MemoryToIceAdapter& iceMemory); void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string& prefix = ""); @@ -149,8 +147,7 @@ namespace armarx::armem::server::obj::instance private: - armem::Memory& memory; - armem::server::MemoryToIceAdapter& memoryToIceAdapter; + armem::server::MemoryToIceAdapter& iceMemory; armem::CoreSegment* coreSegment = nullptr; @@ -176,8 +173,8 @@ namespace armarx::armem::server::obj::instance armarx::RemoteGui::Client::CheckBox infiniteHistory; armarx::RemoteGui::Client::CheckBox discardSnapshotsWhileAttached; - void setup(const Data& data); - void update(Data& data); + void setup(const Segment& data); + void update(Segment& data); }; }; diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp index 7b15c0a51265f353a8f55f4d8b5294af3ba1e3a3..91fa17d0317b1e081c35b8032aace7f64ce92912 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.cpp @@ -22,8 +22,6 @@ #include "SegmentAdapter.h" -#include <RobotAPI/libraries/core/Pose.h> -#include <RobotAPI/libraries/core/FramedPose.h> #include <RobotAPI/libraries/core/remoterobot/RemoteRobot.h> #include <RobotAPI/libraries/ArmarXObjects/aron_conversions.h> #include <RobotAPI/libraries/ArmarXObjects/ice_conversions.h> @@ -32,17 +30,15 @@ #include <ArmarXCore/observers/variant/Variant.h> #include <VirtualRobot/Robot.h> -#include <VirtualRobot/RobotConfig.h> #include <SimoxUtility/algorithm/get_map_keys_values.h> -#include <SimoxUtility/meta/EnumNames.hpp> namespace armarx::armem::server::obj::instance { - SegmentAdapter::SegmentAdapter(MemoryToIceSegmentAdapter& iceMemory, std::mutex& memoryMutex) : - data(*iceMemory.memory, iceMemory), + SegmentAdapter::SegmentAdapter(MemoryToIceAdapter& iceMemory, std::mutex& memoryMutex) : + data(iceMemory), memoryMutex(memoryMutex) { } @@ -71,12 +67,12 @@ namespace armarx::armem::server::obj::instance } void SegmentAdapter::connect( - RobotStateComponentInterfacePrx robotStateComponent, - VirtualRobot::RobotPtr robot, - KinematicUnitObserverInterfacePrx kinematicUnitObserver, - viz::Client arviz, - DebugObserverInterfacePrx debugObserver - ) + RobotStateComponentInterfacePrx robotStateComponent, + VirtualRobot::RobotPtr robot, + KinematicUnitObserverInterfacePrx kinematicUnitObserver, + viz::Client arviz, + DebugObserverInterfacePrx debugObserver + ) { this->debugObserver = debugObserver; this->arviz = arviz; @@ -174,7 +170,7 @@ namespace armarx::armem::server::obj::instance } TIMING_START(tCommitObjectPoses); - Data::CommitStats stats = + Segment::CommitStats stats = data.commitObjectPoses(providerName, providedPoses, discard.updatesUntil); TIMING_END_STREAM(tCommitObjectPoses, ARMARX_VERBOSE); @@ -461,14 +457,14 @@ namespace armarx::armem::server::obj::instance - void SegmentAdapter::RemoteGui::setup(const SegmentAdapter& SegmentAdapter) + void SegmentAdapter::RemoteGui::setup(const SegmentAdapter& adapter) { using namespace armarx::RemoteGui::Client; - this->visu.setup(SegmentAdapter.visu); - this->data.setup(SegmentAdapter.data); - this->decay.setup(SegmentAdapter.data.decay); - this->robotHead.setup(SegmentAdapter.robotHead); + this->visu.setup(adapter.visu); + this->data.setup(adapter.data); + this->decay.setup(adapter.data.decay); + this->robotHead.setup(adapter.robotHead); root = VBoxLayout { @@ -477,21 +473,21 @@ namespace armarx::armem::server::obj::instance }; } - void SegmentAdapter::RemoteGui::update(SegmentAdapter& SegmentAdapter) + void SegmentAdapter::RemoteGui::update(SegmentAdapter& adapter) { // Non-atomic variables need to be guarded by a mutex if accessed by multiple threads { - std::scoped_lock lock(SegmentAdapter.visuMutex); - this->visu.update(SegmentAdapter.visu); + std::scoped_lock lock(adapter.visuMutex); + this->visu.update(adapter.visu); } { - std::scoped_lock lock(SegmentAdapter.memoryMutex); - this->data.update(SegmentAdapter.data); - this->decay.update(SegmentAdapter.data.decay); + std::scoped_lock lock(adapter.memoryMutex); + this->data.update(adapter.data); + this->decay.update(adapter.data.decay); } { - std::scoped_lock lock(SegmentAdapter.robotHeadMutex); - this->robotHead.update(SegmentAdapter.robotHead); + std::scoped_lock lock(adapter.robotHeadMutex); + this->robotHead.update(adapter.robotHead); } } diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.h b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.h index 8f84d0602ac7aec510af066ed6ee8970747c75ee..9819a162eee886fcb1e7878f5787b866d1273c82 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.h +++ b/source/RobotAPI/libraries/armem_objects/server/instance/SegmentAdapter.h @@ -34,7 +34,7 @@ #include <RobotAPI/components/ArViz/Client/Client.h> #include <RobotAPI/libraries/armem/server/MemoryToIceAdapter.h> -#include <RobotAPI/libraries/armem_objects/server/instance/Data.h> +#include <RobotAPI/libraries/armem_objects/server/instance/Segment.h> #include <RobotAPI/libraries/armem_objects/server/instance/Decay.h> #include <RobotAPI/libraries/armem_objects/server/instance/Visu.h> #include <RobotAPI/libraries/armem_objects/server/instance/RobotHeadMovement.h> @@ -62,12 +62,12 @@ namespace armarx::armem::server::obj::instance void init(); void connect( - RobotStateComponentInterfacePrx robotStateComponent, - VirtualRobot::RobotPtr robot, - KinematicUnitObserverInterfacePrx kinematicUnitObserver, - viz::Client arviz, - DebugObserverInterfacePrx debugObserver - ); + RobotStateComponentInterfacePrx robotStateComponent, + VirtualRobot::RobotPtr robot, + KinematicUnitObserverInterfacePrx kinematicUnitObserver, + viz::Client arviz, + DebugObserverInterfacePrx debugObserver + ); // ObjectPoseTopic interface @@ -126,7 +126,7 @@ namespace armarx::armem::server::obj::instance viz::Client arviz; DebugObserverInterfacePrx debugObserver; - instance::Data data; + instance::Segment data; std::mutex& memoryMutex; instance::RobotHeadMovement robotHead; @@ -153,7 +153,7 @@ namespace armarx::armem::server::obj::instance armarx::RemoteGui::Client::VBoxLayout root; instance::Visu::RemoteGui visu; - instance::Data::RemoteGui data; + instance::Segment::RemoteGui data; instance::Decay::RemoteGui decay; instance::RobotHeadMovement::RemoteGui robotHead;