MotionSegment.cpp
Go to the documentation of this file.
1 // BaseClass
2 #include "MotionSegment.h"
3 
4 // ArmarX
7 
12 
13 #include "mdb_conversions.h"
14 
15 // STD / STL
16 #include <fstream>
17 #include <iostream>
18 #include <sstream>
19 
21 {
23  Base(memoryToIceAdapter,
24  "MotionDatabase",
25  "Motion",
26  armarx::motion::mdb::arondto::MDBReference::ToAronType())
27  {
28  }
29 
30  void
32  const std::string& prefix)
33  {
34  Base::defineProperties(defs, prefix);
35 
36  defs->optional(properties.motionsPackage,
37  prefix + "MotionsPackage",
38  "Name of the prior knowledge package to load from.");
39  defs->optional(properties.loadFromMotionsPackage,
40  prefix + "LoadFromMotionsPackage",
41  "If true, load the motions from the motions package on startup.");
42  }
43 
44  void
46  {
47  Base::init();
48 
49  if (properties.loadFromMotionsPackage)
50  {
51  loadByMotionFinder(properties.motionsPackage);
52  }
53  }
54 
55  void
57  {
58  }
59 
60  int
61  MDBMotionSegment::loadByMotionFinder(const std::string& packageName)
62  {
63  priorknowledge::motions::MotionFinder motionFinder(packageName, "motions/");
64  int loadedMotions = 0;
65 
66  ARMARX_INFO << "Load Motions from package" << std::endl;
67  {
68  // Load MDB Motions
69  auto allMotions = motionFinder.findAll("mdb");
70  for (const auto& motionFinderInfo : allMotions)
71  {
72  auto pathToInfoJson = motionFinderInfo.getFullPath() / motionFinderInfo.getID() /
73  (motionFinderInfo.getID() + ".json");
74  if (auto op = conversion::createFromFile(pathToInfoJson); op.has_value())
75  {
76  std::stringstream ss;
77  ss << "Found valid instance at: " << pathToInfoJson << ". The motionID is: ";
78  for (const auto& [key, attachedFiles] : op->attachedFiles)
79  {
80  for (const auto& attachedFile : attachedFiles)
81  {
82  ss << "\n" << attachedFile.fileName << " (" << key << ")";
83  }
84  }
85  ARMARX_INFO << ss.str(); // ToDo @Fabian PK: Remove
86  auto& entity = this->segmentPtr->addEntity(std::to_string(op->id));
87  auto& snapshot = entity.addSnapshot(op->createdDate);
88 
89  armem::wm::EntityInstance& instance = snapshot.addInstance();
90  instance.metadata().referencedTime = op->createdDate;
91  instance.metadata().sentTime = Time::Now();
92  instance.metadata().arrivedTime = Time::Now();
93  instance.metadata().confidence = 1.0;
94  instance.data() = op->toAron();
95  }
96  else
97  {
98  ARMARX_WARNING << "Found an invalid path to a motion file: " << pathToInfoJson;
99  }
100  }
101 
102  loadedMotions += allMotions.size();
103  }
104 
105  return loadedMotions;
106  }
107 } // namespace armarx::armem::server::motions::mdb::segment
MotionFinder.h
armarx::armem::server::motions::mdb::segment::MDBMotionSegment::onConnect
virtual void onConnect()
Definition: MotionSegment.cpp:56
MotionSegment.h
armarx::armem::server::motions::mdb::segment::MDBMotionSegment::defineProperties
virtual void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string &prefix="") override
Definition: MotionSegment.cpp:31
armarx::armem::wm::EntityInstance
Client-side working entity instance.
Definition: memory_definitions.h:32
armarx::armem::server::MemoryToIceAdapter
Helps connecting a Memory server to the Ice interface.
Definition: MemoryToIceAdapter.h:19
armarx::core::time::DateTime::Now
static DateTime Now()
Definition: DateTime.cpp:51
armarx::armem::server::motions::mdb::conversion::createFromFile
std::optional< armarx::motion::mdb::arondto::MDBReference > createFromFile(const std::filesystem::path &pathToInfoJson)
Definition: mdb_conversions.cpp:9
mdb_conversions.h
armarx::armem::base::EntityBase::addSnapshot
EntitySnapshotT & addSnapshot(const Time &timestamp)
Add a snapshot at the given time.
Definition: EntityBase.h:629
memory_definitions.h
armarx::armem::server::segment::detail::SegmentBase< server::wm::ProviderSegment >::segmentPtr
server::wm::ProviderSegment * segmentPtr
Definition: SpecializedSegment.h:53
armarx::armem::base::EntityInstanceMetadata::sentTime
Time sentTime
Time when this value was sent to the memory.
Definition: EntityInstanceBase.h:49
armarx::armem::server::segment::detail::SegmentBase< server::wm::ProviderSegment >
armarx::armem::server::motions::mdb::segment
Definition: MotionSegment.cpp:20
armarx::armem::server::wm::ProviderSegment::addEntity
Entity & addEntity(const std::string &name, Args... args)
Definition: memory_definitions.h:66
armarx::armem::server::motions::mdb::segment::MDBMotionSegment::init
virtual void init() override
Definition: MotionSegment.cpp:45
armarx::priorknowledge::motions::MotionFinder
Definition: MotionFinder.h:7
armarx::armem::base::EntityInstanceMetadata::arrivedTime
Time arrivedTime
Time when this value has arrived at the memory.
Definition: EntityInstanceBase.h:51
armarx::armem::server::segment::SpecializedProviderSegment::init
virtual void init() override
Definition: SpecializedProviderSegment.cpp:56
armarx::to_string
const std::string & to_string(const std::string &s)
Definition: StringHelpers.h:41
memory_definitions.h
aron_conversions.h
armarx::armem::base::EntityInstanceMetadata::referencedTime
Time referencedTime
Time this instance refers to.
Definition: EntityInstanceBase.h:46
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:181
PropertyDefinitionContainer.h
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::armem::server::motions::mdb::segment::MDBMotionSegment::MDBMotionSegment
MDBMotionSegment(armem::server::MemoryToIceAdapter &iceMemory)
Definition: MotionSegment.cpp:22
ProxyPropertyDefinition.h
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:117
ARMARX_WARNING
#define ARMARX_WARNING
Definition: Logging.h:193
armarx::armem::base::EntityInstanceBase::data
const DataT & data() const
Definition: EntityInstanceBase.h:129
armarx::armem::server::segment::SpecializedProviderSegment::defineProperties
virtual void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string &prefix="") override
Definition: SpecializedProviderSegment.cpp:38
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27