Plugin.cpp
Go to the documentation of this file.
1 #include "Plugin.h"
2 
3 #include <SimoxUtility/algorithm/string/string_tools.h>
4 
7 
11 #include <VisionX/libraries/armem/vision/images/core/aron/ImageDepth.aron.generated.h>
12 #include <VisionX/libraries/armem/vision/images/core/aron/ImageRGB.aron.generated.h>
14 
15 
16 namespace armem = armarx::armem;
17 namespace wm = armem::server::wm;
18 
20 {
21 
22  Plugin::Plugin(armarx::ManagedIceObject& parent, std::string prefix) :
23  armarx::ComponentPlugin(parent, prefix)
24  // , workingMemory(std::make_unique<wm::Memory>())
25  // , iceAdapter(std::make_unique<armem::server::MemoryToIceAdapter>(workingMemory.get()))
26  ,
27  properties(std::make_unique<Properties>()),
28  imageToArMem(std::make_unique<visionx::armem_images::ImageToArMem>())
29  {
30  addPlugin(serverPlugin);
31  addPluginDependency(serverPlugin);
32  ARMARX_CHECK_NOT_NULL(serverPlugin);
33  }
34 
36  {
37  }
38 
40  {
41  std::vector<size_t> rgbIndices{0};
42  std::vector<size_t> depthIndices{1};
43 
45  void read(armarx::PropertyUser& properties);
46  };
47 
48  void
50  {
51  defs.defineOptionalProperty("img.rgb.ImageIndices",
52  simox::alg::join(simox::alg::multi_to_string(rgbIndices)),
53  "Indices of RGB images in provided images");
54  defs.defineOptionalProperty("img.depth.ImageIndices",
55  simox::alg::join(simox::alg::multi_to_string(depthIndices)),
56  "Indices of RGB images in provided images");
57  }
58 
59  void
61  {
62  rgbIndices = ImagesProperties::getIndices(properties, "img.rgb.ImageIndices");
63  depthIndices = ImagesProperties::getIndices(properties, "img.depth.ImageIndices");
64  }
65 
66  void
68  {
69  properties->define(*defs);
70  }
71 
72  void
74  {
75  armarx::Component& parent = this->parent<armarx::Component>();
76  serverPlugin->workingMemory.name() = parent.getName();
77  properties->read(parent);
78  }
79 
80  void
82  {
83  addRgbImagesEntity(properties->rgbIndices);
84  addDepthImagesEntity(properties->depthIndices);
85  ARMARX_INFO << "Memory image structure: \n" << imageToArMem->summarizeStructure();
86  }
87 
88  void
90  {
91  ImageProvider& imageProvider = this->parent<ImageProvider>();
92  imageToArMem->initImages(imageProvider.getImageFormat());
93  }
94 
95  wm::Entity&
96  Plugin::addRgbImagesEntity(const std::vector<size_t>& imageIndices)
97  {
98  wm::CoreSegment& cs = serverPlugin->workingMemory.addCoreSegment(
100  visionx::armem_images::arondto::ImageRGB::ToAronType());
101  cs.setMaxHistorySize(128);
102 
103  wm::ProviderSegment& ps = cs.addProviderSegment(parent().getName());
104  wm::Entity& entity = ps.addEntity("image");
105  imageToArMem->addImagesRGB(entity.id(), imageIndices);
106  return entity;
107  }
108 
109  wm::Entity&
110  Plugin::addDepthImagesEntity(const std::vector<size_t>& imageIndices)
111  {
112  wm::CoreSegment& cs = serverPlugin->workingMemory.addCoreSegment(
114  visionx::armem_images::arondto::ImageDepth::ToAronType());
115  cs.setMaxHistorySize(128);
116 
117  wm::ProviderSegment& ps = cs.addProviderSegment(parent().getName());
118  wm::Entity& entity = ps.addEntity("image");
119  imageToArMem->addImagesDepth(entity.id(), imageIndices);
120  return entity;
121  }
122 
123  void
124  Plugin::useImageBuffers(CByteImage** inputImages, armarx::armem::Time timeProvided)
125  {
126  imageToArMem->useImageBuffers(inputImages, timeProvided);
127  }
128 
129  void
130  Plugin::usePixelBuffers(void** inputPixelBuffers, armarx::armem::Time timeProvided)
131  {
132  // inputImageBuffer is not a CByteImage**, but directly points to the pixel data
133  imageToArMem->usePixelBuffers(inputPixelBuffers, timeProvided);
134  }
135 
136  void
138  {
139  armem::Commit commit = imageToArMem->makeCommit();
140  serverPlugin->iceAdapter.commitLocking(commit);
141  }
142 
143  void
144  Plugin::commitImages(CByteImage** inputImages, armarx::armem::Time timeProvided)
145  {
146  useImageBuffers(inputImages, timeProvided);
147  commitImages();
148  }
149 
150  void
151  Plugin::commitImages(void** inputPixelBuffers, armarx::armem::Time timeProvided)
152  {
153  usePixelBuffers(inputPixelBuffers, timeProvided);
154  commitImages();
155  }
156 
157 } // namespace visionx::armem_images::server::plugins
visionx::armem_images::server::plugins::Plugin::addDepthImagesEntity
armarx::armem::server::wm::Entity & addDepthImagesEntity(const std::vector< size_t > &imageIndices)
Definition: Plugin.cpp:110
visionx::armem_images::server::plugins::Plugin::Plugin
Plugin(armarx::ManagedIceObject &parent, std::string prefix)
Definition: Plugin.cpp:22
visionx::armem_images::server::plugins::Plugin::usePixelBuffers
void usePixelBuffers(void **inputPixelBuffers, armarx::armem::Time timeProvided)
Definition: Plugin.cpp:130
visionx::armem_images::server::plugins::Plugin::postOnInitComponent
virtual void postOnInitComponent() override
Definition: Plugin.cpp:81
plugins::Plugin::Properties::rgbIndices
std::vector< size_t > rgbIndices
Definition: Plugin.cpp:41
armarx::armem::server::plugins::Plugin::iceAdapter
MemoryToIceAdapter iceAdapter
Helps connecting memory to ice. Used to handle Ice callbacks.
Definition: Plugin.h:70
armarx::ManagedIceObjectPlugin::addPluginDependency
void addPluginDependency(ManagedIceObjectPlugin *dependedOn)
Definition: ManagedIceObjectPlugin.cpp:42
visionx
ArmarX headers.
Definition: OpenPoseStressTest.h:38
Plugin.h
armarx::PropertyDefinitionContainer::defineOptionalProperty
PropertyDefinition< PropertyType > & defineOptionalProperty(const std::string &name, PropertyType defaultValue, const std::string &description="", PropertyDefinitionBase::PropertyConstness constness=PropertyDefinitionBase::eConstant)
Definition: PropertyDefinitionContainer.h:533
armarx::armem::Commit
A bundle of updates to be sent to the memory.
Definition: Commit.h:89
armarx::ManagedIceObjectPlugin::parent
ManagedIceObject & parent()
Definition: ManagedIceObjectPlugin.cpp:72
plugins::Plugin::Properties::read
void read(armarx::PropertyUser &properties)
Definition: Plugin.cpp:60
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::ManagedIceObjectPlugin::addPlugin
PluginT * addPlugin(const std::string prefix="", ParamsT &&... params)
Definition: ManagedIceObjectPlugin.h:131
visionx::armem_images::server::plugins::Plugin::commitImages
void commitImages()
Definition: Plugin.cpp:137
armarx::armem
Definition: LegacyRobotStateMemoryAdapter.cpp:32
ImagesProperties.h
visionx::armem_images::ImagesProperties::getIndices
static std::vector< size_t > getIndices(armarx::PropertyUser &properties, const std::string &propertyName)
Definition: ImagesProperties.cpp:57
visionx::armem_images::depthImagesCoreSegmentID
const armarx::armem::MemoryID depthImagesCoreSegmentID
Definition: constants.cpp:31
visionx::armem_images::rgbImagesCoreSegmentID
const armarx::armem::MemoryID rgbImagesCoreSegmentID
Definition: constants.cpp:30
armarx::armem::base::MemoryBase::name
std::string & name()
Definition: MemoryBase.h:92
visionx::armem_images::server::plugins::Plugin::~Plugin
virtual ~Plugin() override
Definition: Plugin.cpp:35
visionx::ImageProvider::getImageFormat
ImageFormatInfo getImageFormat(const Ice::Current &c=Ice::emptyCurrent) override
Returns the entire image format info struct via Ice.
Definition: ImageProvider.cpp:76
memory_definitions.h
visionx::armem_images::server::plugins::Plugin::useImageBuffers
void useImageBuffers(CByteImage **inputImages, armarx::armem::Time timeProvided)
Definition: Plugin.cpp:124
plugins::Plugin::Properties::depthIndices
std::vector< size_t > depthIndices
Definition: Plugin.cpp:42
armarx::view_selection::ComponentPlugin
client::plugins::ComponentPlugin ComponentPlugin
Definition: ComponentPlugin.h:66
plugins::Plugin::Properties::define
void define(armarx::PropertyDefinitionContainer &defs)
Definition: Plugin.cpp:49
armarx::armem::base::MemoryBase::addCoreSegment
CoreSegmentT & addCoreSegment(const std::string &name, aron::type::ObjectPtr coreSegmentType=nullptr, const std::vector< PredictionEngine > &predictionEngines={})
Add an empty core segment with the given name, type and prediction engines.
Definition: MemoryBase.h:259
armarx::PropertyDefinitionContainer
PropertyDefinitionContainer.
Definition: PropertyDefinitionContainer.h:53
MemoryToIceAdapter.h
armarx::Component
Baseclass for all ArmarX ManagedIceObjects requiring properties.
Definition: Component.h:91
plugins::Plugin::Properties
Definition: Plugin.cpp:39
visionx::armem_images::server::plugins::Plugin::addRgbImagesEntity
armarx::armem::server::wm::Entity & addRgbImagesEntity(const std::vector< size_t > &imageIndices)
Definition: Plugin.cpp:96
visionx::armem_images::server::plugins::Plugin::postCreatePropertyDefinitions
virtual void postCreatePropertyDefinitions(armarx::PropertyDefinitionsPtr &properties) override
Definition: Plugin.cpp:67
armarx::core::time::DateTime
Represents a point in time.
Definition: DateTime.h:24
visionx::ImageProvider
ImageProvider abstract class defines a component which provide images via ice or shared memory.
Definition: ImageProvider.h:66
armarx::ManagedIceObject
The ManagedIceObject is the base class for all ArmarX objects.
Definition: ManagedIceObject.h:162
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:181
std
Definition: Application.h:66
visionx::armem_images::server::plugins::Plugin::postOnConnectComponent
virtual void postOnConnectComponent() override
Definition: Plugin.cpp:89
IceUtil::Handle< class PropertyDefinitionContainer >
visionx::armem_images::server::plugins
Definition: Plugin.cpp:19
visionx::armem_images::ImageToArMem
Allows to convert multiple CByteImages to Aron images and memory commits.
Definition: ImageToArMem.h:23
constants.h
armarx::ManagedIceObject::getName
std::string getName() const
Retrieve name of object.
Definition: ManagedIceObject.cpp:108
armarx::armem::server::plugins::Plugin::workingMemory
server::wm::Memory workingMemory
The actual memory.
Definition: Plugin.h:67
armarx::PropertyUser
Abstract PropertyUser class.
Definition: PropertyUser.h:63
httplib::detail::make_unique
std::enable_if<!std::is_array< T >::value, std::unique_ptr< T > >::type make_unique(Args &&...args)
Definition: httplib.h:333
ImageProvider.h
armarx::armem::server::MemoryToIceAdapter::commitLocking
data::CommitResult commitLocking(const data::Commit &commitIce, Time timeArrived)
Definition: MemoryToIceAdapter.cpp:170
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
visionx::armem_images::server::plugins::Plugin::preOnInitComponent
virtual void preOnInitComponent() override
Definition: Plugin.cpp:73
ImageToArMem.h