29#include <Eigen/Geometry>
31#include <pcl/point_types.h>
32#include <VirtualRobot/ManipulationObject.h>
47#include <RobotAPI/interface/objectpose/FamiliarObjectPoseStorageInterface.h>
48#include <RobotAPI/libraries/armem_objects/aron/FamiliarObjectInstance.aron.generated.h>
57 addPlugin(familiarObjectInstanceReaderPlugin);
59 p.exemplaryFamiliarObjectID.dataset =
"myDataset";
60 p.exemplaryFamiliarObjectID.className =
"sphere";
61 p.exemplaryFamiliarObjectID.instanceName =
"0";
63 p.knownObjectID.dataset =
"myDataset";
64 p.knownObjectID.className =
"sphere";
65 p.knownObjectID.instanceName =
"0";
74 defs->required(p.robotName,
"p.robotName");
76 defs->optional(p.exemplaryFamiliarObjectID.dataset,
"p.objectId.dataset");
77 defs->optional(p.exemplaryFamiliarObjectID.className,
"p.objectId.className");
78 defs->optional(p.exemplaryFamiliarObjectID.instanceName,
"p.objectId.instanceName");
80 defs->optional(p.knownObjectID.dataset,
"p.knownObjectID.dataset");
81 defs->optional(p.knownObjectID.className,
"p.knownObjectID.className");
82 defs->optional(p.knownObjectID.instanceName,
"p.knownObjectID.instanceName");
84 defs->optional(p.knownObjectAsFamID.dataset,
"p.knownObjectAsFamID.dataset");
85 defs->optional(p.knownObjectAsFamID.className,
"p.knownObjectAsFamID.className");
86 defs->optional(p.knownObjectAsFamID.instanceName,
"p.knownObjectAsFamID.instanceName");
88 defs->optional(p.objectShiftX,
"p.objectShiftX",
"");
89 defs->optional(p.objectShiftY,
"p.objectShiftY",
"");
90 defs->optional(p.nFamObjects,
"p.nFamObjects",
"Number of familiar objects to create");
92 defs->component(familiarObjectPoseStoragePrx,
"ObjectMemory");
100 return "FamiliarObjectDetectionExample";
145 fromAron(p.knownObjectID, knownObjectID);
146 const auto knownObjectPose = client.fetchObjectPose(knownObjectID);
149 <<
"Known object " <<
QUOTED(knownObjectID) <<
" not found in ObjectMemory.";
154 <<
"Could not load ManipulationObject for known object " <<
QUOTED(knownObjectID.
str())
157 manipulationObject->setGlobalPose(knownObjectPose->objectPoseGlobal);
160 fromAron(p.knownObjectAsFamID, famObjectID);
162 const auto familiarObject =
166 ::armarx::objpose::ProvidedFamiliarObjectPoseSeq
data;
168 for (
unsigned int i = 0; i < p.nFamObjects; i++)
170 auto famObj = familiarObject;
171 famObj.objectID.instanceName = std::to_string(i);
174 famObj.poseGlobal->pose.block(0, 3, 3, 1) +=
175 Eigen::Vector3f(
static_cast<float>(i) * p.objectShiftX,
static_cast<float>(i) * p.objectShiftY, 0.0f);
177 data.push_back(famObj.toAronDTO());
182 ARMARX_INFO <<
"Sending " <<
data.size() <<
" familiar object(s) to the memory";
183 familiarObjectPoseStoragePrx->reportFamiliarObjectPoses(
getName(),
data);
189 armem::arondto::FamiliarObjectInstance familiarObject;
193 familiarObject.poseSensFrame.pose =
194 Eigen::Isometry3f{Eigen::Translation3f{0, 0, 1000}}.matrix();
195 familiarObject.poseSensFrame.header.frame =
"DepthCameraSim";
196 familiarObject.poseSensFrame.header.agent = p.robotName;
200 familiarObject.objectID = p.exemplaryFamiliarObjectID;
202 familiarObject.confidence = 1.0;
209 const unsigned int numPoints = 100;
212 for (
unsigned int i = 0; i < numPoints; i++)
214 pcl::PointXYZRGBA point;
215 point.x =
static_cast<float>(i) - numPoints / 2;
221 familiarObject.points.points.push_back(point);
225 for (
unsigned int i = 0; i < numPoints; i++)
227 pcl::PointXYZRGBA point;
229 point.y =
static_cast<float>(i) - numPoints / 2;
234 familiarObject.points.points.push_back(point);
238 for (
unsigned int i = 0; i < numPoints; i++)
240 pcl::PointXYZRGBA point;
243 point.z =
static_cast<float>(i) - numPoints / 2;
247 familiarObject.points.points.push_back(point);
250 familiarObject.points.header.frame_id =
"DepthCameraSim";
251 familiarObject.points.is_dense =
true;
252 familiarObject.points.width = familiarObject.points.points.size();
253 familiarObject.points.height = 1;
255 familiarObject.bounding_box.center.setZero();
256 familiarObject.bounding_box.extents.setConstant(numPoints);
258 ::armarx::objpose::ProvidedFamiliarObjectPoseSeq
data;
259 data.push_back(familiarObject.toAronDTO());
261 ARMARX_INFO <<
"Sending " <<
data.size() <<
" familiar object to the memory";
262 familiarObjectPoseStoragePrx->reportFamiliarObjectPoses(
getName(),
data);
271 familiarObjectInstanceReaderPlugin->get();
280 const auto allFamiliarObjectInstances =
284 for (
const auto& [providerName, instances] : allFamiliarObjectInstances)
287 for (
const auto& instance : instances)
289 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
290 << instance.objectID.className <<
"/"
291 << instance.objectID.instanceName;
301 const std::map<std::string, std::vector<armem::arondto::FamiliarObjectInstance>>
302 familiarObjectInstances =
310 const auto& thisFamiliarObjectInstances = familiarObjectInstances.begin()->second;
312 for (
const auto& instance : thisFamiliarObjectInstances)
314 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
315 << instance.objectID.className <<
"/" << instance.objectID.instanceName;
325 fromAron(p.exemplaryFamiliarObjectID, objectId);
327 const auto instances =
331 for (
const auto& [instanceName, instancesForProvider] : instances)
333 for (
const auto& instance : instancesForProvider)
335 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
336 << instance.objectID.className <<
"/"
337 << instance.objectID.instanceName;
348 fromAron(p.exemplaryFamiliarObjectID, objectId);
350 const std::optional<std::map<std::string, armem::arondto::FamiliarObjectInstance>>
356 for (
const auto& [instanceName, instance] : instances.value())
358 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
359 << instance.objectID.className <<
"/" << instance.objectID.instanceName;
370 detectTask =
nullptr;
380 "FamiliarObjectDetectionExample");
#define ARMARX_REGISTER_COMPONENT_EXECUTABLE(ComponentT, applicationName)
static DateTime Now()
Current time on the virtual clock.
Default component property definition container.
std::string getConfigIdentifier()
Retrieve config identifier for this component as set in constructor.
PluginT * addPlugin(const std::string prefix="", ParamsT &&... params)
std::string getName() const
Retrieve name of object.
Used to find objects in the ArmarX objects repository [1] (formerly [2]).
static VirtualRobot::ManipulationObjectPtr loadManipulationObject(const std::optional< ObjectInfo > &ts, VirtualRobot::ObjectIO::ObjectDescription loadMode=VirtualRobot::ObjectIO::ObjectDescription::eFull)
A known object ID of the form "Dataset/ClassName" or "Dataset/ClassName/InstanceName".
ObjectID getClassID() const
Return just the class ID without an intance name.
std::string str() const
Return "dataset/className" or "dataset/className/instanceName".
objpose::ObjectPoseClient getClient() const
The periodic task executes one thread method repeatedly using the time period specified in the constr...
std::map< std::string, std::vector< arondto::FamiliarObjectInstance > > queryLatestFamiliarObjectInstancesFromClass(const ObjectID &classId, const std::optional< std::string > &providerName=std::nullopt) const
std::optional< std::map< std::string, arondto::FamiliarObjectInstance > > queryLatestFamiliarObjectInstance(const ObjectID &instanceId, const std::optional< std::string > &providerName=std::nullopt) const
std::map< std::string, std::vector< arondto::FamiliarObjectInstance > > queryAllLatestFamiliarObjectInstances(const std::optional< std::string > &providerName=std::nullopt) const
void onInitComponent() override
Pure virtual hook for the subclass.
FamiliarObjectDetectionExample()
void onDisconnectComponent() override
Hook for subclass.
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
void storeKnownObjectAsFamiliarObjectInMemory() const
void readExemplaryFamiliarObjectFromMemory() const
void onConnectComponent() override
Pure virtual hook for the subclass.
void onExitComponent() override
Hook for subclass.
std::string getDefaultName() const override
void storeExemplaryFamiliarObjectInMemory() const
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
#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...
#define ARMARX_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
#define ARMARX_INFO
The normal logging level.
#define ARMARX_IMPORTANT
The logging level for always important information, but expected behaviour (in contrast to ARMARX_WAR...
armarx::armem::arondto::FamiliarObjectInstance createFamiliarObjectInstanceFromManipulationObject(const VirtualRobot::ManipulationObject &manipulationObject, const armarx::ObjectID &objectID)
createFamiliarObjectInstanceFromManipulationObject Create a FamiliarObjectInstance from a known Manip...
void fromAron(const arondto::PackagePath &dto, PackageFileLocation &bo)
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.