Skip to content
Snippets Groups Projects

robot state memory update

Merged Fabian Reister requested to merge feature/armem-robot-state-memory-update into armem/dev
1 file
+ 26
9
Compare changes
  • Side-by-side
  • Inline
@@ -21,6 +21,7 @@
*/
#include "TransformWriter.h"
#include "RobotAPI/libraries/armem/core/MemoryID.h"
#include <algorithm>
#include <iterator>
@@ -44,15 +45,15 @@
#include <RobotAPI/libraries/aron/core/navigator/type/NavigatorFactory.h>
#include <RobotAPI/libraries/core/FramedPose.h>
#include <RobotAPI/libraries/armem_robot_localization/aron/Transform.aron.generated.h>
#include <RobotAPI/libraries/armem_robot_state/aron/Transform.aron.generated.h>
#include <RobotAPI/libraries/armem_robot_state/aron_conversions.h>
#include <optional>
#include "aron_conversions.h"
namespace armarx::armem
namespace armarx::armem::client::robot_state::localization
{
TransformWriter::TransformWriter(ManagedIceObject& component) : MemoryConnector(component) {}
TransformWriter::TransformWriter(armem::ClientWriterComponentPluginUser& memoryClient) : memoryClient(memoryClient) {}
TransformWriter::~TransformWriter() = default;
@@ -60,15 +61,11 @@ namespace armarx::armem
{
ARMARX_DEBUG << "TransformWriter: registerPropertyDefinitions";
MemoryConnector::registerPropertyDefinitions(def);
const std::string prefix = getPropertyPrefix();
def->optional(properties.localizationMemoryName,
prefix + "LocalizationMemoryName",
def->optional(properties.localizationSegment,
propertyPrefix + "localizationSegment",
"Name of the localization memory core segment to use.");
def->optional(properties.memoryName, prefix + "MemoryName");
def->optional(properties.memoryName, propertyPrefix + "Memory");
}
void TransformWriter::connect()
@@ -76,7 +73,7 @@ namespace armarx::armem
// Wait for the memory to become available and add it as dependency.
ARMARX_IMPORTANT << "TransformWriter: Waiting for memory '" << properties.memoryName
<< "' ...";
auto result = useMemory(properties.memoryName);
auto result = memoryClient.useMemory(properties.memoryName);
if (not result.success)
{
ARMARX_ERROR << result.errorMessage;
@@ -88,39 +85,56 @@ namespace armarx::armem
memoryWriter.setWritingMemory(result.proxy);
}
bool TransformWriter::commitTransform(const Transform& transform)
bool TransformWriter::commitTransform(const ::armarx::armem::robot_state::Transform& transform)
{
std::lock_guard g{memoryWriterMutex};
ARMARX_DEBUG << "Trying to create core segment + provider segment";
const auto result =
memoryWriter.addSegment(properties.localizationMemoryName, transform.header.agent);
if (not result.success)
const auto providerId = [&]() -> std::optional<armem::MemoryID>
{
try
{
const auto result =
memoryWriter.addSegment(properties.localizationSegment, transform.header.agent);
if (not result.success)
{
ARMARX_WARNING << "Could not obtain provider id! Reason: " << result.errorMessage;
return std::nullopt;
}
return armem::MemoryID(result.segmentID);
}
catch (...)
{
ARMARX_WARNING << "Could not obtain provider id!";
return std::nullopt;
}
}();
if (not providerId)
{
ARMARX_ERROR << result.errorMessage;
// TODO(fabian.reister): message
return false;
}
const auto timestamp = IceUtil::Time::microSeconds(transform.header.timestamp);
// const auto& timestamp = transform.header.timestamp;
const auto timestamp = IceUtil::Time::now(); // FIXME remove
const auto providerId = armem::MemoryID(result.segmentID);
const auto entityID = providerId.withEntityName(transform.header.parentFrame + "," +
const auto entityID = providerId->withEntityName(transform.header.parentFrame + "," +
transform.header.frame).withTimestamp(timestamp);
armem::EntityUpdate update;
update.entityID = entityID;
aron::Transform aronTransform;
toAron(transform, aronTransform);
arondto::Transform aronTransform;
toAron(aronTransform, transform);
update.instancesData = {aronTransform.toAron()};
update.timeCreated = IceUtil::Time::microSeconds(aronTransform.header.timestamp);
update.timeCreated = timestamp;
ARMARX_DEBUG << "Committing " << update << " at time " << IceUtil::Time::microSeconds(transform.header.timestamp);
ARMARX_DEBUG << "Committing " << update << " at time " << transform.header.timestamp;
armem::EntityUpdateResult updateResult = memoryWriter.commit(update);
ARMARX_DEBUG << updateResult;
@@ -133,10 +147,10 @@ namespace armarx::armem
return updateResult.success;
}
const std::string& TransformWriter::getPropertyPrefix() const
{
return propertyPrefix;
}
// const std::string& TransformWriter::getPropertyPrefix() const
// {
// return propertyPrefix;
// }
} // namespace armarx::armem
} // namespace armarx::armem::client::robot_state::localization
Loading