diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp b/source/RobotAPI/libraries/armem_vision/client/laser_scans/Reader.cpp similarity index 68% rename from source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp rename to source/RobotAPI/libraries/armem_vision/client/laser_scans/Reader.cpp index fd8250c5b2b086f3869729e2bf6836e5e3c5dc32..286879b5f435a49602b70076b8a8456d37c66d27 100644 --- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.cpp +++ b/source/RobotAPI/libraries/armem_vision/client/laser_scans/Reader.cpp @@ -1,31 +1,32 @@ -#include "MappingDataReader.h" +#include "Reader.h" // STD / STL -#include <cstring> -#include <vector> #include <algorithm> +#include <cstring> #include <map> #include <optional> #include <ostream> -#include <type_traits> #include <utility> +#include <vector> + +#include <type_traits> // ICE -#include <IceUtil/Time.h> #include <IceUtil/Handle.h> +#include <IceUtil/Time.h> // Simox #include <SimoxUtility/algorithm/get_map_keys_values.h> // ArmarXCore -#include <ArmarXCore/core/logging/Logging.h> -#include <ArmarXCore/core/logging/LogSender.h> #include <ArmarXCore/core/exceptions/local/ExpressionException.h> +#include <ArmarXCore/core/logging/LogSender.h> +#include <ArmarXCore/core/logging/Logging.h> // RobotAPI Interfaces -#include <RobotAPI/interface/units/LaserScannerUnit.h> #include <RobotAPI/interface/armem/mns/MemoryNameSystemInterface.h> #include <RobotAPI/interface/armem/server/ReadingMemoryInterface.h> +#include <RobotAPI/interface/units/LaserScannerUnit.h> // RobotAPI Aron #include <RobotAPI/libraries/aron/core/Exception.h> @@ -36,42 +37,42 @@ #include <RobotAPI/libraries/armem/client/Reader.h> #include <RobotAPI/libraries/armem/client/query/Builder.h> #include <RobotAPI/libraries/armem/client/query/selectors.h> - -#include <RobotAPI/libraries/armem/core/workingmemory/Memory.h> #include <RobotAPI/libraries/armem/core/workingmemory/CoreSegment.h> -#include <RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h> #include <RobotAPI/libraries/armem/core/workingmemory/Entity.h> #include <RobotAPI/libraries/armem/core/workingmemory/EntityInstance.h> - +#include <RobotAPI/libraries/armem/core/workingmemory/Memory.h> +#include <RobotAPI/libraries/armem/core/workingmemory/ProviderSegment.h> #include <RobotAPI/libraries/armem/util/util.h> +#include <RobotAPI/libraries/armem_vision/aron/LaserScan.aron.generated.h> +#include <RobotAPI/libraries/armem_vision/aron_conversions.h> +#include <RobotAPI/libraries/armem_vision/types.h> -#include <RobotAPI/libraries/armem_robot_mapping/aron/LaserScan.aron.generated.h> -#include <RobotAPI/libraries/armem_robot_mapping/aron_conversions.h> -#include <RobotAPI/libraries/armem_robot_mapping/types.h> - -namespace armarx::armem +namespace armarx::armem::vision::laser_scans::client { - MappingDataReader::MappingDataReader(armem::ClientReaderComponentPluginUser& memoryClient) - : memoryClient(memoryClient) {} + Reader::Reader(armem::ClientReaderComponentPluginUser& memoryClient) : + memoryClient(memoryClient) + { + } - MappingDataReader::~MappingDataReader() = default; + Reader::~Reader() = default; - void MappingDataReader::registerPropertyDefinitions( - armarx::PropertyDefinitionsPtr& def) + void + Reader::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def) { ARMARX_DEBUG << "TransformReader: registerPropertyDefinitions"; registerPropertyDefinitions(def); const std::string prefix = propertyPrefix; - def->optional(properties.mappingMemoryName, prefix + "MappingMemoryName", + def->optional(properties.coreSegmentName, + prefix + "CoreSegment", "Name of the mapping memory core segment to use."); def->optional(properties.memoryName, prefix + "MemoryName"); } - void MappingDataReader::connect() + void Reader::connect() { // Wait for the memory to become available and add it as dependency. ARMARX_IMPORTANT << "TransformReader: Waiting for memory '" @@ -89,19 +90,18 @@ namespace armarx::armem memoryReader.setReadingMemory(result.proxy); } - armem::client::query::Builder - MappingDataReader::buildQuery(const Query& query) const + armarx::armem::client::query::Builder Reader::buildQuery(const Query& query) const { - armem::client::query::Builder qb; + armarx::armem::client::query::Builder qb; ARMARX_INFO << "Query for agent: " << query.agent - << " memory name: " << properties.mappingMemoryName; + << " memory name: " << properties.memoryName; if (query.sensorList.empty()) // all sensors { // clang-format off qb - .coreSegments().withName(properties.mappingMemoryName) + .coreSegments().withName(properties.memoryName) .providerSegments().withName(query.agent) .entities().all() .snapshots().timeRange(query.timeRange.min, query.timeRange.max); @@ -111,7 +111,7 @@ namespace armarx::armem { // clang-format off qb - .coreSegments().withName(properties.mappingMemoryName) + .coreSegments().withName(properties.memoryName) .providerSegments().withName(query.agent) .entities().withNames(query.sensorList) .snapshots().timeRange(query.timeRange.min, query.timeRange.max); @@ -119,10 +119,10 @@ namespace armarx::armem } return qb; - } - std::vector<LaserScanStamped> asLaserScans(const std::map<std::string, wm::Entity>& entities) + std::vector<LaserScanStamped> + asLaserScans(const std::map<std::string, wm::Entity>& entities) { std::vector<LaserScanStamped> outV; @@ -131,25 +131,27 @@ namespace armarx::armem ARMARX_WARNING << "No entities!"; } - const auto convert = [](const arondto::LaserScanStamped & aronLaserScanStamped, const wm::EntityInstance & ei) -> LaserScanStamped + const auto convert = + [](const arondto::LaserScanStamped& aronLaserScanStamped, + const wm::EntityInstance& ei) -> LaserScanStamped { LaserScanStamped laserScanStamped; fromAron(aronLaserScanStamped, laserScanStamped); - const auto ndArrayNavigator = aron::datanavigator::NDArrayNavigator::DynamicCast(ei.data()->getElement("scan")); + const auto ndArrayNavigator = + aron::datanavigator::NDArrayNavigator::DynamicCast( + ei.data()->getElement("scan")); ARMARX_CHECK_NOT_NULL(ndArrayNavigator); laserScanStamped.data = fromAron<LaserScanStep>(ndArrayNavigator); ARMARX_IMPORTANT << "4"; - return laserScanStamped; - }; // loop over all entities and their snapshots - for (const auto &[s, entity] : entities) + for (const auto& [s, entity] : entities) { if (entity.empty()) { @@ -158,11 +160,12 @@ namespace armarx::armem ARMARX_DEBUG << "History size: " << entity.size(); - for (const auto &[ss, entitySnapshot] : entity) + for (const auto& [ss, entitySnapshot] : entity) { for (const auto& entityInstance : entitySnapshot.instances()) { - const auto o = tryCast<arondto::LaserScanStamped>(entityInstance); + const auto o = + tryCast<arondto::LaserScanStamped>(entityInstance); if (o) { @@ -175,8 +178,7 @@ namespace armarx::armem return outV; } - MappingDataReader::Result - MappingDataReader::queryData(const Query& query) const + Reader::Result Reader::queryData(const Query& query) const { const auto qb = buildQuery(query); @@ -191,25 +193,25 @@ namespace armarx::armem { ARMARX_WARNING << "Failed to query data from memory: " << qResult.errorMessage; - return {.laserScans = {}, - .sensors = {}, - .status = Result::Status::Error, + return {.laserScans = {}, + .sensors = {}, + .status = Result::Status::Error, .errorMessage = qResult.errorMessage}; } // now create result from memory const auto& entities = - qResult.memory.getCoreSegment(properties.mappingMemoryName) - .getProviderSegment(query.agent) - .entities(); + qResult.memory.getCoreSegment(properties.memoryName) + .getProviderSegment(query.agent) + .entities(); const auto laserScans = asLaserScans(entities); - const auto sensors = simox::alg::get_keys(entities); + const auto sensors = simox::alg::get_keys(entities); - return {.laserScans = laserScans, - .sensors = sensors, - .status = Result::Status::Success, + return {.laserScans = laserScans, + .sensors = sensors, + .status = Result::Status::Success, .errorMessage = ""}; } -} // namespace armarx::armem +} // namespace armarx::armem::vision::laser_scans::client diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h b/source/RobotAPI/libraries/armem_vision/client/laser_scans/Reader.h similarity index 80% rename from source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h rename to source/RobotAPI/libraries/armem_vision/client/laser_scans/Reader.h index aee783764f4b5720e4ae0d8d69fbf6faed297e98..f09e1e271827c1319112f3075d1f47866c238499 100644 --- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataReader.h +++ b/source/RobotAPI/libraries/armem_vision/client/laser_scans/Reader.h @@ -21,7 +21,7 @@ #pragma once -#include <stdint.h> +#include <cstdint> #include <string> #include <vector> @@ -30,16 +30,14 @@ #include <RobotAPI/libraries/armem/client.h> #include <RobotAPI/libraries/armem/client/Reader.h> #include <RobotAPI/libraries/armem/client/query/Builder.h> -#include <RobotAPI/libraries/armem_robot_mapping/types.h> - - +#include <RobotAPI/libraries/armem_vision/types.h> namespace armarx { class ManagedIceObject; } -namespace armarx::armem +namespace armarx::armem::vision::laser_scans::client { struct TimeRange @@ -59,16 +57,15 @@ namespace armarx::armem * * Detailed description of class ExampleClient. */ - class MappingDataReader + class Reader { - public: - MappingDataReader(armem::ClientReaderComponentPluginUser& memoryClient); + public: + Reader(armem::ClientReaderComponentPluginUser& memoryClient); - virtual ~MappingDataReader(); + virtual ~Reader(); void connect(); - struct Query { std::string agent; @@ -77,7 +74,6 @@ namespace armarx::armem // if empty, all sensors will be queried std::vector<std::string> sensorList; - }; struct Result @@ -94,32 +90,27 @@ namespace armarx::armem } status; std::string errorMessage; - }; Result queryData(const Query& query) const; void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def); + armarx::armem::client::query::Builder buildQuery(const Query& query) const; - client::query::Builder buildQuery(const Query& query) const ; - - - private: - + private: armem::client::Reader memoryReader; // Properties struct Properties { - std::string memoryName = "RobotState"; - std::string mappingMemoryName = "Mapping"; + std::string memoryName = "Vision"; + std::string coreSegmentName = "LaserScans"; } properties; - - const std::string propertyPrefix = "mem.mapping."; + const std::string propertyPrefix = "mem.vision."; armem::ClientReaderComponentPluginUser& memoryClient; }; -} // namespace armarx::armem +} // namespace armarx::armem::vision::laser_scans::client diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp b/source/RobotAPI/libraries/armem_vision/client/laser_scans/Writer.cpp similarity index 63% rename from source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp rename to source/RobotAPI/libraries/armem_vision/client/laser_scans/Writer.cpp index 351d71398a6959f346aadf45c6c604edcd865a53..e4c022bba4d0018bb30363ece2af8cb6b1f6e4da 100644 --- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.cpp +++ b/source/RobotAPI/libraries/armem_vision/client/laser_scans/Writer.cpp @@ -1,35 +1,37 @@ -#include "MappingDataWriter.h" +#include "Writer.h" -#include "RobotAPI/libraries/armem_robot_mapping/aron_conversions.h" -#include <RobotAPI/libraries/armem_robot_mapping/aron/LaserScan.aron.generated.h> +#include "RobotAPI/libraries/armem_vision/aron_conversions.h" +#include <RobotAPI/libraries/armem_vision/aron/LaserScan.aron.generated.h> - -namespace armarx::armem +namespace armarx::armem::vision::laser_scans::client { - MappingDataWriter::MappingDataWriter(armem::ClientWriterComponentPluginUser& component) - : component(component) {} + Writer::Writer(armem::ClientWriterComponentPluginUser& component) : + component(component) + { + } - MappingDataWriter::~MappingDataWriter() = default; + Writer::~Writer() = default; - void MappingDataWriter::registerPropertyDefinitions( - armarx::PropertyDefinitionsPtr& def) + void + Writer::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def) { ARMARX_DEBUG << "TransformWriter: registerPropertyDefinitions"; const std::string prefix = propertyPrefix; - def->optional(properties.mappingMemoryName, prefix + "MappingMemoryName", + def->optional(properties.coreSegmentName, + prefix + "CoreSegment", "Name of the mapping memory core segment to use."); def->optional(properties.memoryName, prefix + "MemoryName"); } - void MappingDataWriter::connect() + void Writer::connect() { // Wait for the memory to become available and add it as dependency. - ARMARX_IMPORTANT << "MappingDataWriter: Waiting for memory '" << properties.memoryName - << "' ..."; + ARMARX_IMPORTANT << "MappingDataWriter: Waiting for memory '" + << properties.memoryName << "' ..."; auto result = component.useMemory(properties.memoryName); if (not result.success) { @@ -37,21 +39,21 @@ namespace armarx::armem return; } - ARMARX_IMPORTANT << "TransformWriter: Connected to memory '" << properties.memoryName; + ARMARX_IMPORTANT << "TransformWriter: Connected to memory '" + << properties.memoryName; memoryWriter.setWritingMemory(result.proxy); } - - bool MappingDataWriter::storeSensorData(const LaserScan& laserScan, - const std::string& frame, - const std::string& agentName, - const std::int64_t& timestamp) + bool Writer::storeSensorData(const LaserScan& laserScan, + const std::string& frame, + const std::string& agentName, + const std::int64_t& timestamp) { std::lock_guard g{memoryWriterMutex}; const auto result = - memoryWriter.addSegment(properties.mappingMemoryName, agentName); + memoryWriter.addSegment(properties.memoryName, agentName); if (not result.success) { @@ -78,7 +80,7 @@ namespace armarx::armem dict->addElement("scan", toAron(laserScan)); update.instancesData = {dict}; - update.timeCreated = iceTimestamp; + update.timeCreated = iceTimestamp; ARMARX_DEBUG << "Committing " << update << " at time " << iceTimestamp; armem::EntityUpdateResult updateResult = memoryWriter.commit(update); @@ -93,4 +95,4 @@ namespace armarx::armem return updateResult.success; } -} // namespace armarx::armem \ No newline at end of file +} // namespace armarx::armem::vision::laser_scans::client \ No newline at end of file diff --git a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h b/source/RobotAPI/libraries/armem_vision/client/laser_scans/Writer.h similarity index 70% rename from source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h rename to source/RobotAPI/libraries/armem_vision/client/laser_scans/Writer.h index e5de996746b7d54b46faa891cf2cd26007fbaf02..34edeb55d2c4e69f191568b92ea6a190db98c2f2 100644 --- a/source/RobotAPI/libraries/armem_robot_mapping/MappingDataWriter.h +++ b/source/RobotAPI/libraries/armem_vision/client/laser_scans/Writer.h @@ -25,12 +25,10 @@ #include <mutex> #include <RobotAPI/interface/units/LaserScannerUnit.h> - -#include <RobotAPI/libraries/armem/client/Writer.h> #include <RobotAPI/libraries/armem/client.h> +#include <RobotAPI/libraries/armem/client/Writer.h> - -namespace armarx::armem +namespace armarx::armem::vision::laser_scans::client { /** @@ -44,11 +42,11 @@ namespace armarx::armem * * Detailed description of class ExampleClient. */ - class MappingDataWriter + class Writer { - public: - MappingDataWriter(armem::ClientWriterComponentPluginUser& component); - virtual ~MappingDataWriter(); + public: + Writer(armem::ClientWriterComponentPluginUser& component); + virtual ~Writer(); void connect(); @@ -57,27 +55,30 @@ namespace armarx::armem // void connect() override; /// to be called in Component::addPropertyDefinitions - void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def) /*override*/; + void registerPropertyDefinitions( + armarx::PropertyDefinitionsPtr& def) /*override*/; - bool storeSensorData(const LaserScan& laserScan, const std::string& frame, const std::string& agentName, const std::int64_t& timestamp); + bool storeSensorData(const LaserScan& laserScan, + const std::string& frame, + const std::string& agentName, + const std::int64_t& timestamp); - private: + private: armem::client::Writer memoryWriter; // Properties struct Properties { - std::string memoryName = "RobotState"; - std::string mappingMemoryName = "Mapping"; + std::string memoryName = "Vision"; + std::string coreSegmentName = "LaserScans"; } properties; - std::mutex memoryWriterMutex; + std::mutex memoryWriterMutex; - const std::string propertyPrefix = "mem.mapping."; + const std::string propertyPrefix = "mem.vision."; armem::ClientWriterComponentPluginUser& component; }; - -} // namespace armarx::armem +} // namespace armarx::armem::vision::laser_scans::client