diff --git a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp index b8f2d7ffa5c39699e91648bcd63bb32bb0532a40..f00a970c168393a4c15223fcf02e5a30b1f3da91 100644 --- a/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/server/description/Segment.cpp @@ -84,7 +84,11 @@ namespace armarx::armem::server::robot_state::description Commit commit; commit.updates.push_back(update); - iceMemory.commit(commit); + { + // std::lock_guard g{memoryMutex}; + iceMemory.commit(commit); + } + } void Segment::updateRobotDescription() @@ -103,25 +107,30 @@ namespace armarx::armem::server::robot_state::description Segment::RobotDescriptionMap Segment::getRobotDescriptions() const { + RobotDescriptionMap robotDescriptions; - for (const auto &[_, provSeg] : iceMemory.workingMemory->getCoreSegment(p.coreSegment)) { - for (const auto &[name, entity] : provSeg.entities()) - { - const auto& entityInstance = entity.getLatestSnapshot().getInstance(0); - const auto description = robot::convertRobotDescription(entityInstance); + // std::lock_guard g{memoryMutex}; - if (not description) + for (const auto &[_, provSeg] : iceMemory.workingMemory->getCoreSegment(p.coreSegment)) + { + for (const auto &[name, entity] : provSeg.entities()) { - ARMARX_WARNING << "Could not convert entity instance to " - "'RobotDescription'"; - continue; - } + const auto& entityInstance = entity.getLatestSnapshot().getInstance(0); + const auto description = robot::convertRobotDescription(entityInstance); - ARMARX_DEBUG << "Key is " << armem::MemoryID(entity.id()); + if (not description) + { + ARMARX_WARNING << "Could not convert entity instance to " + "'RobotDescription'"; + continue; + } - robotDescriptions.emplace(description->name, *description); + ARMARX_DEBUG << "Key is " << armem::MemoryID(entity.id()); + + robotDescriptions.emplace(description->name, *description); + } } } diff --git a/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp b/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp index d245d2c8736e4925753b4d8c692198304b448b21..18d01e592e664befa45450005407023f30974d08 100644 --- a/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp +++ b/source/RobotAPI/libraries/armem_robot_state/server/localization/Segment.cpp @@ -1,5 +1,6 @@ #include "Segment.h" +#include <Eigen/src/Geometry/Transform.h> #include <IceUtil/Time.h> #include <RobotAPI/libraries/armem_robot_state/aron/Transform.aron.generated.h> #include <iterator> @@ -13,6 +14,7 @@ #include <RobotAPI/libraries/armem/core/aron_conversions.h> #include <RobotAPI/libraries/armem/core/workingmemory/Visitor.h> #include "RobotAPI/libraries/armem/core/MemoryID.h" +#include "RobotAPI/libraries/armem_robot/robot_conversions.h" #include <RobotAPI/libraries/armem/client/Writer.h> #include <RobotAPI/libraries/armem/client/query/Builder.h> #include <RobotAPI/libraries/armem/client/query/query_fns.h> @@ -50,8 +52,6 @@ namespace armarx::armem::server::robot_state::localization coreSegment = &iceMemory.workingMemory->addCoreSegment(p.coreSegment, arondto::Transform::toInitialAronType()); coreSegment->setMaxHistorySize(p.maxHistorySize); - - } void Segment::connect(viz::Client arviz) @@ -63,14 +63,42 @@ namespace armarx::armem::server::robot_state::localization { std::unordered_map<std::string, Eigen::Affine3f> robotGlobalPoses; - // TODO(fabian.reister): implement + for (const auto& [robotName, provSeg] : iceMemory.workingMemory->getCoreSegment(p.coreSegment)) + { + for (const auto& [name, entity] : provSeg.entities()) + { + const auto& entityInstance = entity.getLatestSnapshot().getInstance(0); + + // arondto::Transform aronTransform; + // aronTransform.fromAron(entityInstance); + + + + // // Assemble trafo + + // if (not robotState) + // { + // ARMARX_WARNING << "Could not convert entity instance to 'RobotState'"; + // continue; + // } + + // ARMARX_DEBUG << "Key is " << armem::MemoryID(entity.id()); + + // TODO + + } + + robotGlobalPoses.emplace(robotName, Eigen::Affine3f::Identity()); + + } + + ARMARX_INFO << deactivateSpam(10) << "Number of known robot poses: " << robotGlobalPoses.size(); return robotGlobalPoses; } bool Segment::storeTransform(const armarx::armem::robot_state::Transform& transform) { - const auto timestamp = IceUtil::Time::microSeconds(transform.header.timestamp); const MemoryID providerID = coreSegment->id().withProviderSegmentName(transform.header.agent);