ObjectWriter.cpp
Go to the documentation of this file.
1 #include "ObjectWriter.h"
2 
3 #include <mutex>
4 #include <optional>
5 
8 
14 #include <RobotAPI/libraries/armem_objects/aron/Attachment.aron.generated.h>
16 #include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h>
20 
22 {
24  {
25  }
26 
27  void
29  {
30  ARMARX_DEBUG << "Writer: registerPropertyDefinitions";
31 
32  const std::string prefix = propertyPrefix;
33 
34  def->optional(properties.memoryName, prefix + "MemoryName");
35 
36  def->optional(properties.coreSegmentName,
37  prefix + "CoreSegment",
38  "Name of the memory core segment to use for object instances.");
39  }
40 
41  void
43  {
44  // Wait for the memory to become available and add it as dependency.
45  ARMARX_IMPORTANT << "Writer: Waiting for memory '" << properties.memoryName << "' ...";
46  try
47  {
48  memoryWriter = memoryNameSystem.useWriter(properties.memoryName);
49  ARMARX_IMPORTANT << "Writer: Connected to memory '" << properties.memoryName << "'";
50  }
52  {
53  ARMARX_ERROR << e.what();
54  return;
55  }
56  }
57 
58  bool
59  Writer::commitObject(const armem::arondto::ObjectInstance& inst,
60  const std::string& provider,
61  const armem::Time& t)
62  {
64  auto& e = c.add();
65 
66  e.entityID.memoryName = properties.memoryName;
67  e.entityID.coreSegmentName = properties.coreSegmentName;
68  e.entityID.providerSegmentName = provider;
69  e.entityID.entityName = inst.pose.objectID.dataset + "/" + inst.pose.objectID.className +
70  "/" + inst.pose.objectID.instanceName;
71  e.referencedTime = t;
72  e.sentTime = armem::Time::Now();
73  e.instancesData = {inst.toAron()};
74 
75  auto res = memoryWriter.commit(c);
76 
77  if (!res.allSuccess())
78  {
79  ARMARX_ERROR << "Failed to commit an ObjectInstance to memory: "
80  << res.allErrorMessages();
81  return false;
82  }
83  return true;
84  }
85 
86 } // namespace armarx::armem::obj::instance
ObjectWriter.h
ARMARX_IMPORTANT
#define ARMARX_IMPORTANT
Definition: Logging.h:183
armarx::armem::Commit
A bundle of updates to be sent to the memory.
Definition: Commit.h:89
armarx::core::time::DateTime::Now
static DateTime Now()
Definition: DateTime.cpp:55
armarx::armem::client::MemoryNameSystem::useWriter
Writer useWriter(const MemoryID &memoryID)
Use a memory server and get a writer for it.
Definition: MemoryNameSystem.cpp:276
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:43
armarx::armem::client::Writer::commit
CommitResult commit(const Commit &commit)
Writes a Commit to the memory.
Definition: Writer.cpp:51
armarx::armem::obj::instance::Writer::commitObject
bool commitObject(const armem::arondto::ObjectInstance &inst, const std::string &provider, const armem::Time &)
Definition: ObjectWriter.cpp:59
ARMARX_DEBUG
#define ARMARX_DEBUG
Definition: Logging.h:177
error.h
ARMARX_ERROR
#define ARMARX_ERROR
Definition: Logging.h:189
aron_conversions.h
armarx::armem::obj::instance::Writer::registerPropertyDefinitions
void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr &def)
Definition: ObjectWriter.cpp:28
armarx::armem::obj::instance::Writer::Writer
Writer()
Definition: ObjectWriter.cpp:23
memory_definitions.h
aron_conversions.h
armarx::armem::obj::instance::Writer::connect
void connect(armem::client::MemoryNameSystem &memoryNameSystem)
Definition: ObjectWriter.cpp:42
armarx::core::time::DateTime
Represents a point in time.
Definition: DateTime.h:24
IceUtil::Handle< class PropertyDefinitionContainer >
Time.h
Builder.h
armarx::armem::client::MemoryNameSystem
The memory name system (MNS) client.
Definition: MemoryNameSystem.h:69
armarx::armem::error::CouldNotResolveMemoryServer
Indicates that a query to the Memory Name System failed.
Definition: mns.h:26
util.h
Logging.h
robot_conversions.h
armarx::armem::obj::instance
Definition: ObjectReader.cpp:22
aron_conversions.h
PackagePath.h