aron_conversions.cpp
Go to the documentation of this file.
1 #include "aron_conversions.h"
2 
4 
5 namespace armarx::armem
6 {
7  constexpr const char* DATA_WRAPPER_TIME_STORED_FIELD = "__WRITER_METADATA__TIME_STORED";
8  constexpr const char* DATA_WRAPPER_TIME_REFERENCED_FIELD = "__ENTITY_METADATA__TIME_REFERENCED";
9  constexpr const char* DATA_WRAPPER_TIME_SENT_FIELD = "__ENTITY_METADATA__TIME_SENT";
10  constexpr const char* DATA_WRAPPER_TIME_ARRIVED_FIELD = "__ENTITY_METADATA__TIME_ARRIVED";
11  constexpr const char* DATA_WRAPPER_CONFIDENCE_FIELD = "__ENTITY_METADATA__CONFIDENCE";
12  constexpr const char* DATA_WRAPPER_ORIGIN_FIELD = "__ENTITY_METADATA__ORIGIN";
13 } // namespace armarx::armem
14 
15 void
19 {
20  ARMARX_CHECK_NOT_NULL(metadata);
21  // Todo: What if data is null?
22 
24 
25  e.data() = data;
26 
27  auto referencedTime = aron::data::Long::DynamicCastAndCheck(
28  metadata->getElement(DATA_WRAPPER_TIME_REFERENCED_FIELD));
29  m.referencedTime = Time(Duration::MicroSeconds(referencedTime->toAronLongDTO()->value));
30 
31  auto timeSent =
32  aron::data::Long::DynamicCastAndCheck(metadata->getElement(DATA_WRAPPER_TIME_SENT_FIELD));
33  m.sentTime = Time(Duration::MicroSeconds(timeSent->toAronLongDTO()->value));
34 
35  auto timeArrived = aron::data::Long::DynamicCastAndCheck(
36  metadata->getElement(DATA_WRAPPER_TIME_ARRIVED_FIELD));
37  m.arrivedTime = Time(Duration::MicroSeconds(timeArrived->toAronLongDTO()->value));
38 
39  auto confidence = aron::data::Double::DynamicCastAndCheck(
40  metadata->getElement(DATA_WRAPPER_CONFIDENCE_FIELD));
41  m.confidence = static_cast<float>(confidence->toAronDoubleDTO()->value);
42 
43  std::vector<std::string> keys = metadata->getAllKeys();
44 
45  if (std::find(keys.begin(), keys.end(), DATA_WRAPPER_ORIGIN_FIELD) != keys.end())
46  {
47  auto origin = aron::data::String::DynamicCastAndCheck(
48  metadata->getElement(DATA_WRAPPER_ORIGIN_FIELD));
49  m.origin = origin->toAronStringDTO()->value;
50  }
51  else
52  {
53  // Might occur for old memory exports
54  ARMARX_WARNING << "DATA_WRAPPER_ORIGIN_FIELD not found";
55  m.origin = "undefined2";
56  }
57 }
58 
59 void
62  const wm::EntityInstance& e)
63 {
64  data = e.data();
65  metadata = std::make_shared<aron::data::Dict>();
66 
67  auto timeWrapped = std::make_shared<aron::data::Long>(
68  armarx::aron::Path(std::vector<std::string>{DATA_WRAPPER_TIME_STORED_FIELD}));
69  timeWrapped->setValue(Time::Now().toMicroSecondsSinceEpoch());
70  metadata->addElement(DATA_WRAPPER_TIME_STORED_FIELD, timeWrapped);
71 
72  const wm::EntityInstanceMetadata& m = e.metadata();
73  auto referencedTime = std::make_shared<aron::data::Long>(
74  armarx::aron::Path(std::vector<std::string>{DATA_WRAPPER_TIME_REFERENCED_FIELD}));
75  referencedTime->setValue(m.referencedTime.toMicroSecondsSinceEpoch());
76  metadata->addElement(DATA_WRAPPER_TIME_REFERENCED_FIELD, referencedTime);
77 
78  auto timeSent = std::make_shared<aron::data::Long>(
79  armarx::aron::Path(std::vector<std::string>{DATA_WRAPPER_TIME_SENT_FIELD}));
80  timeSent->setValue(m.sentTime.toMicroSecondsSinceEpoch());
81  metadata->addElement(DATA_WRAPPER_TIME_SENT_FIELD, timeSent);
82 
83  auto timeArrived = std::make_shared<aron::data::Long>(
84  armarx::aron::Path(std::vector<std::string>{DATA_WRAPPER_TIME_ARRIVED_FIELD}));
85  timeArrived->setValue(m.arrivedTime.toMicroSecondsSinceEpoch());
86  metadata->addElement(DATA_WRAPPER_TIME_ARRIVED_FIELD, timeArrived);
87 
88  auto confidence = std::make_shared<aron::data::Double>(
89  armarx::aron::Path(std::vector<std::string>{DATA_WRAPPER_CONFIDENCE_FIELD}));
90  confidence->setValue(static_cast<double>(m.confidence));
91  metadata->addElement(DATA_WRAPPER_CONFIDENCE_FIELD, confidence);
92 
93  auto origin = std::make_shared<aron::data::String>(
94  armarx::aron::Path(std::vector<std::string>{DATA_WRAPPER_ORIGIN_FIELD}));
95  origin->setValue(m.origin);
96  metadata->addElement(DATA_WRAPPER_ORIGIN_FIELD, origin);
97 }
armarx::armem::DATA_WRAPPER_TIME_REFERENCED_FIELD
constexpr const char * DATA_WRAPPER_TIME_REFERENCED_FIELD
Definition: aron_conversions.cpp:8
armarx::armem::wm::EntityInstance
Client-side working entity instance.
Definition: memory_definitions.h:32
armarx::armem::DATA_WRAPPER_TIME_ARRIVED_FIELD
constexpr const char * DATA_WRAPPER_TIME_ARRIVED_FIELD
Definition: aron_conversions.cpp:10
ARMARX_CHECK_NOT_NULL
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Definition: ExpressionException.h:206
armarx::armem::DATA_WRAPPER_TIME_STORED_FIELD
constexpr const char * DATA_WRAPPER_TIME_STORED_FIELD
Definition: aron_conversions.cpp:7
armarx::armem
Definition: LegacyRobotStateMemoryAdapter.cpp:32
armarx::armem::DATA_WRAPPER_TIME_SENT_FIELD
constexpr const char * DATA_WRAPPER_TIME_SENT_FIELD
Definition: aron_conversions.cpp:9
aron_conversions.h
armarx::armem::DATA_WRAPPER_ORIGIN_FIELD
constexpr const char * DATA_WRAPPER_ORIGIN_FIELD
Definition: aron_conversions.cpp:12
armarx::aron::Path
The Path class.
Definition: Path.h:35
armarx::armem::base::EntityInstanceMetadata::sentTime
Time sentTime
Time when this value was sent to the memory.
Definition: EntityInstanceBase.h:49
armarx::armem::to_aron
void to_aron(aron::data::DictPtr &metadata, aron::data::DictPtr &data, const wm::EntityInstance &)
convert to metadata and aron instance
Definition: aron_conversions.cpp:60
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
All.h
armarx::core::time::DateTime::toMicroSecondsSinceEpoch
std::int64_t toMicroSecondsSinceEpoch() const
Definition: DateTime.cpp:87
armarx::armem::base::EntityInstanceMetadata::arrivedTime
Time arrivedTime
Time when this value has arrived at the memory.
Definition: EntityInstanceBase.h:51
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::armem::DATA_WRAPPER_CONFIDENCE_FIELD
constexpr const char * DATA_WRAPPER_CONFIDENCE_FIELD
Definition: aron_conversions.cpp:11
armarx::armem::base::EntityInstanceMetadata::referencedTime
Time referencedTime
Time this instance refers to.
Definition: EntityInstanceBase.h:46
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::armem::from_aron
void from_aron(const aron::data::DictPtr &metadata, const aron::data::DictPtr &data, wm::EntityInstance &)
convert from metadata and data aron instance
Definition: aron_conversions.cpp:16
magic_enum::detail::find
constexpr std::size_t find(string_view str, char_type c) noexcept
Definition: magic_enum.hpp:309
armarx::armem::base::EntityInstanceMetadata
Metadata of an entity instance.
Definition: EntityInstanceBase.h:34
armarx::armem::base::EntityInstanceMetadata::confidence
float confidence
An optional confidence, may be used for things like decay.
Definition: EntityInstanceBase.h:54
armarx::armem::base::EntityInstanceBase::metadata
MetadataT & metadata()
Definition: EntityInstanceBase.h:120
ARMARX_WARNING
#define ARMARX_WARNING
Definition: Logging.h:193
armarx::armem::base::EntityInstanceBase::data
const DataT & data() const
Definition: EntityInstanceBase.h:132
armarx::armem::base::EntityInstanceMetadata::origin
std::string origin
Indicates the source of the instance e.g. from a specific LTM.
Definition: EntityInstanceBase.h:63