From bf739683a8ac05a6b5c78a294ff6cbd19b96a9a7 Mon Sep 17 00:00:00 2001 From: Fabian Peller <fabian.peller-konrad@kit.edu> Date: Fri, 16 Dec 2022 10:18:01 +0100 Subject: [PATCH] revert changes to object memory as it makes the gui super slow... --- .../armem_objects/aron_conversions.cpp | 18 +---- .../armem_objects/aron_conversions.h | 8 ++- .../client/articulated_object/Reader.cpp | 12 ++-- .../client/articulated_object/Writer.cpp | 17 ++--- .../armem_objects/server/instance/Segment.cpp | 69 +++++++++---------- .../armem_objects/server/instance/Segment.h | 9 ++- 6 files changed, 59 insertions(+), 74 deletions(-) diff --git a/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp b/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp index 162f80924..23b84e31a 100644 --- a/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp +++ b/source/RobotAPI/libraries/armem_objects/aron_conversions.cpp @@ -8,22 +8,6 @@ namespace armarx::armem { void - fromAron(const arondto::ObjectInstance& dto, ObjectInstance& bo) - { - fromAron(dto.pose, bo.pose); - fromAron(dto.classID, bo.classID); - fromAron(dto.sourceID, bo.sourceID); - } - - void - toAron(arondto::ObjectInstance& dto, const ObjectInstance& bo) - { - toAron(dto.pose, bo.pose); - toAron(dto.classID, bo.classID); - toAron(dto.sourceID, bo.sourceID); - } - - /*void fromAron(const arondto::ObjectInstance& dto, objpose::arondto::ObjectPose& bo) { bo = dto.pose; @@ -45,7 +29,7 @@ namespace armarx::armem toAron(arondto::ObjectInstance& dto, const objpose::ObjectPose& bo) { objpose::toAron(dto.pose, bo); - }*/ + } /* Attachments */ diff --git a/source/RobotAPI/libraries/armem_objects/aron_conversions.h b/source/RobotAPI/libraries/armem_objects/aron_conversions.h index d7e3b3178..e27ed16c4 100644 --- a/source/RobotAPI/libraries/armem_objects/aron_conversions.h +++ b/source/RobotAPI/libraries/armem_objects/aron_conversions.h @@ -10,8 +10,12 @@ namespace armarx::armem { - void fromAron(const arondto::ObjectInstance&, ObjectInstance&); - void toAron(arondto::ObjectInstance&, const ObjectInstance&); + void fromAron(const arondto::ObjectInstance& dto, objpose::arondto::ObjectPose& bo); + void toAron(arondto::ObjectInstance& dto, const objpose::arondto::ObjectPose& bo); + + void fromAron(const arondto::ObjectInstance& dto, objpose::ObjectPose& bo); + void toAron(arondto::ObjectInstance& dto, const objpose::ObjectPose& bo); + /* Attachments */ void fromAron(const arondto::attachment::AgentDescription& dto, attachment::AgentDescription& bo); diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp index ac0be81cf..9a4417080 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Reader.cpp @@ -20,7 +20,6 @@ #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h> #include <RobotAPI/libraries/armem_robot/aron_conversions.h> #include <RobotAPI/libraries/armem_robot/robot_conversions.h> -#include <RobotAPI/libraries/armem_objects/aron_conversions.h> #include "utils.h" @@ -263,13 +262,10 @@ namespace armarx::armem::articulated_object std::optional<robot::RobotState> convertToRobotState(const armem::wm::EntityInstance& instance) { - armarx::armem::ObjectInstance aronObjectInstance; + armarx::armem::arondto::ObjectInstance aronObjectInstance; try { - armarx::armem::arondto::ObjectInstance dto; - dto.fromAron(instance.data()); - - fromAron(dto, aronObjectInstance); + aronObjectInstance.fromAron(instance.data()); } catch (...) { @@ -277,7 +273,9 @@ namespace armarx::armem::articulated_object return std::nullopt; } - objpose::ObjectPose objectPose = aronObjectInstance.pose; + objpose::ObjectPose objectPose; + objpose::fromAron(aronObjectInstance.pose, objectPose); + robot::RobotState robotState{.timestamp = objectPose.timestamp, .globalPose = Eigen::Affine3f(objectPose.objectPoseGlobal), .jointMap = objectPose.objectJointValues}; diff --git a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp index c4251f5b4..fbce08b63 100644 --- a/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp +++ b/source/RobotAPI/libraries/armem_objects/client/articulated_object/Writer.cpp @@ -13,7 +13,6 @@ #include <RobotAPI/libraries/armem/core/aron_conversions.h> #include <RobotAPI/libraries/armem/core/error.h> #include <RobotAPI/libraries/armem/core/operations.h> -#include <RobotAPI/libraries/armem_objects/aron_conversions.h> #include <RobotAPI/libraries/armem_objects/aron/ObjectClass.aron.generated.h> #include <RobotAPI/libraries/armem_objects/aron/ObjectInstance.aron.generated.h> #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h> @@ -207,7 +206,8 @@ namespace armarx::armem::articulated_object // arondto::Robot aronArticulatedObject; // robot::toAron(aronArticulatedObject, obj); - ObjectInstance objectInstance; + arondto::ObjectInstance objectInstance; + toAron(objectInstance, obj.config); const auto classId = storeOrGetClass(obj); @@ -218,20 +218,21 @@ namespace armarx::armem::articulated_object } // install memory link - objectInstance.classID = *classId; + toAron(objectInstance.classID, *classId); armem::MemoryID id; id.setEntityID(classId->getEntityID()); armarx::ObjectID objectId(id.entityName); - armarx::ObjectID cs(objectId.dataset(), objectId.className(), objectId.instanceName()); - objectInstance.pose.objectID = cs; + armarx::arondto::ObjectID cs; + cs.className = objectId.className(); + cs.instanceName = objectId.instanceName(); + cs.dataset = objectId.dataset(); - arondto::ObjectInstance dto; - toAron(dto, objectInstance); + objectInstance.pose.objectID = cs; - update.instancesData = {dto.toAron()}; + update.instancesData = {objectInstance.toAron()}; update.timeCreated = timestamp; ARMARX_DEBUG << "Committing " << update << " at time " << timestamp; diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp index 33282bb4e..47f055c97 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp +++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.cpp @@ -158,7 +158,7 @@ namespace armarx::armem::server::obj::instance objpose::ObjectPoseSeq newObjectPoses; stats.numUpdated = 0; - // timestamp used to reduce the rpc calls for robot sync + // timestamp used to reduce the rpc calls for robot sync Time robotSyncTimestamp = Time::Invalid(); for (const objpose::data::ProvidedObjectPose& provided : providedPoses) @@ -170,8 +170,10 @@ namespace armarx::armem::server::obj::instance const wm::Entity* entity = findObjectEntity(armarx::fromIce(provided.objectID), providerName); if (entity) { - const ObjectInstance data = getLatestInstanceData(*entity); - previousPose = data.pose; + const arondto::ObjectInstance data = getLatestInstanceData(*entity); + + previousPose = objpose::ObjectPose(); + fromAron(data, *previousPose); } bool discard = false; @@ -272,7 +274,7 @@ namespace armarx::armem::server::obj::instance update.confidence = pose.confidence; arondto::ObjectInstance dto; - toAron(dto.pose, pose); + toAron(dto, pose); // Search for object class. if (auto instance = findClassInstance(pose.objectID)) { @@ -502,17 +504,15 @@ namespace armarx::armem::server::obj::instance { entity.getLatestSnapshot().forEachInstance([&out](const wm::EntityInstance & instance) { - ObjectInstance bo; arondto::ObjectInstance dto; dto.fromAron(instance.data()); - fromAron(dto, bo); - out = bo.pose; + fromAron(dto, out); }); } - ObjectInstance Segment::getLatestInstanceData(const wm::Entity& entity) + arondto::ObjectInstance Segment::getLatestInstanceData(const wm::Entity& entity) { ARMARX_CHECK_GREATER_EQUAL(entity.size(), 1); const wm::EntitySnapshot& snapshot = entity.getLatestSnapshot(); @@ -520,13 +520,10 @@ namespace armarx::armem::server::obj::instance ARMARX_CHECK_EQUAL(snapshot.size(), 1); const wm::EntityInstance& instance = snapshot.getInstance(0); - ObjectInstance bo; - arondto::ObjectInstance dto; - dto.fromAron(instance.data()); - - fromAron(dto, bo); + arondto::ObjectInstance data; + data.fromAron(instance.data()); - return bo; + return data; } @@ -605,7 +602,7 @@ namespace armarx::armem::server::obj::instance dto.fromAron(instance.data()); ObjectPose pose; - fromAron(dto.pose, pose); + fromAron(dto, pose); result.emplace(snapshot.time(), pose); }); @@ -684,7 +681,7 @@ namespace armarx::armem::server::obj::instance << "' of agent '" << agent->getName() << "', but object is currently not provided."; return output; } - ObjectInstance data = getLatestInstanceData(*objectEntity); + arondto::ObjectInstance data = getLatestInstanceData(*objectEntity); objpose::ObjectAttachmentInfo info; info.agentName = agent->getName(); @@ -720,12 +717,10 @@ namespace armarx::armem::server::obj::instance update.entityID = objectEntity->id(); update.timeCreated = now; { - ObjectInstance updated = data; - data.pose.attachment = info; - - arondto::ObjectInstance dto; - toAron(dto, data); - update.instancesData = { dto.toAron() }; + arondto::ObjectInstance updated = data; + toAron(updated.pose.attachment, info); + updated.pose.attachmentValid = true; + update.instancesData = { updated.toAron() }; } iceMemory.commit(commit); } @@ -753,15 +748,15 @@ namespace armarx::armem::server::obj::instance ObjectID objectID = armarx::fromIce(input.objectID); std::string providerName = input.providerName; - std::optional<objpose::ObjectAttachmentInfo> attachment; + std::optional<objpose::arondto::ObjectAttachmentInfo> attachment; { // Remove from latest pose (if it was cached). // Find object pose (provider name can be empty). wm::Entity* entity = this->findObjectEntity(objectID, input.providerName); if (entity) { - const ObjectInstance data = getLatestInstanceData(*entity); - if (data.pose.attachment) + const arondto::ObjectInstance data = getLatestInstanceData(*entity); + if (data.pose.attachmentValid) { attachment = data.pose.attachment; @@ -804,8 +799,8 @@ namespace armarx::armem::server::obj::instance output.numDetached = 0; segmentPtr->forEachEntity([this, now, &input, &output](wm::Entity & entity) { - const ObjectInstance data = this->getLatestInstanceData(entity); - if (data.pose.attachment) + const arondto::ObjectInstance data = this->getLatestInstanceData(entity); + if (data.pose.attachmentValid) { ++output.numDetached; // Store non-attached pose in new snapshot. @@ -821,7 +816,7 @@ namespace armarx::armem::server::obj::instance void Segment::storeDetachedSnapshot( wm::Entity& entity, - const ObjectInstance& data, + const arondto::ObjectInstance& data, Time now, bool commitAttachedPose) { @@ -830,29 +825,27 @@ namespace armarx::armem::server::obj::instance update.entityID = entity.id(); update.timeCreated = now; { - ObjectInstance updated; - if (commitAttachedPose and data.pose.attachment) + arondto::ObjectInstance updated; + if (commitAttachedPose and data.pose.attachmentValid) { - ObjectPose objectPose = data.pose; + ObjectPose objectPose; + fromAron(data, objectPose); VirtualRobot::RobotPtr robot = robots.get(objectPose.robotName, objectPose.providerName); bool agentSynchronized = false; updateAttachement(objectPose, robot, agentSynchronized); objectPose.attachment = std::nullopt; - //toAron(updated, objectPose); + toAron(updated, objectPose); } else { updated = data; - updated.pose.attachment = std::nullopt; - //updated.pose.attachmentValid = false; - //toAron(updated.pose.attachment, objpose::ObjectAttachmentInfo{}); + updated.pose.attachmentValid = false; + toAron(updated.pose.attachment, objpose::ObjectAttachmentInfo{}); } - arondto::ObjectInstance i; - toAron(i, updated); - update.instancesData = { i.toAron() }; + update.instancesData = { updated.toAron() }; } iceMemory.commit(commit); } diff --git a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.h b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.h index aee71528b..08163aee2 100644 --- a/source/RobotAPI/libraries/armem_objects/server/instance/Segment.h +++ b/source/RobotAPI/libraries/armem_objects/server/instance/Segment.h @@ -27,6 +27,11 @@ #include "Decay.h" +namespace armarx::armem::arondto +{ + class ObjectInstance; +} + namespace armarx::armem::server::obj::instance { @@ -97,7 +102,7 @@ namespace armarx::armem::server::obj::instance static void getLatestObjectPoses(const wm::ProviderSegment& provSeg, ObjectPoseMap& out); static void getLatestObjectPose(const wm::Entity& entity, ObjectPose& out); - static ObjectInstance getLatestInstanceData(const wm::Entity& entity); + static arondto::ObjectInstance getLatestInstanceData(const wm::Entity& entity); ::armarx::armem::articulated_object::ArticulatedObjects getArticulatedObjects(); @@ -130,7 +135,7 @@ namespace armarx::armem::server::obj::instance void storeDetachedSnapshot( wm::Entity& entity, - const ObjectInstance& data, + const arondto::ObjectInstance& data, Time now, bool commitAttachedPose); -- GitLab