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>
55 addPlugin(familiarObjectInstanceReaderPlugin);
57 p.exemplaryFamiliarObjectID.dataset =
"myDataset";
58 p.exemplaryFamiliarObjectID.className =
"sphere";
59 p.exemplaryFamiliarObjectID.instanceName =
"0";
61 p.knownObjectID.dataset =
"myDataset";
62 p.knownObjectID.className =
"sphere";
63 p.knownObjectID.instanceName =
"0";
72 defs->required(p.robotName,
"p.robotName");
74 defs->optional(p.exemplaryFamiliarObjectID.dataset,
"p.objectId.dataset");
75 defs->optional(p.exemplaryFamiliarObjectID.className,
"p.objectId.className");
76 defs->optional(p.exemplaryFamiliarObjectID.instanceName,
"p.objectId.instanceName");
78 defs->optional(p.knownObjectID.dataset,
"p.knownObjectID.dataset");
79 defs->optional(p.knownObjectID.className,
"p.knownObjectID.className");
80 defs->optional(p.knownObjectID.instanceName,
"p.knownObjectID.instanceName");
82 defs->optional(p.knownObjectAsFamID.dataset,
"p.knownObjectAsFamID.dataset");
83 defs->optional(p.knownObjectAsFamID.className,
"p.knownObjectAsFamID.className");
84 defs->optional(p.knownObjectAsFamID.instanceName,
"p.knownObjectAsFamID.instanceName");
86 defs->optional(p.objectShiftX,
"p.objectShiftX",
"");
87 defs->optional(p.objectShiftY,
"p.objectShiftY",
"");
88 defs->optional(p.nFamObjects,
"p.nFamObjects",
"Number of familiar objects to create");
90 defs->component(familiarObjectPoseStoragePrx,
"ObjectMemory");
98 return "FamiliarObjectDetectionExample";
143 fromAron(p.knownObjectID, knownObjectID);
144 const auto knownObjectPose = client.fetchObjectPose(knownObjectID);
147 <<
"Known object " <<
QUOTED(knownObjectID) <<
" not found in ObjectMemory.";
152 <<
"Could not load ManipulationObject for known object " <<
QUOTED(knownObjectID.
str())
155 manipulationObject->setGlobalPose(knownObjectPose->objectPoseGlobal);
158 fromAron(p.knownObjectAsFamID, famObjectID);
160 const auto familiarObject =
164 ::armarx::objpose::ProvidedFamiliarObjectPoseSeq
data;
166 for (
unsigned int i = 0; i < p.nFamObjects; i++)
168 auto famObj = familiarObject;
169 famObj.objectID.instanceName = std::to_string(i);
172 famObj.poseGlobal->pose.block(0, 3, 3, 1) +=
173 Eigen::Vector3f(
static_cast<float>(i) * p.objectShiftX,
static_cast<float>(i) * p.objectShiftY, 0.0f);
175 data.push_back(famObj.toAronDTO());
180 ARMARX_INFO <<
"Sending " <<
data.size() <<
" familiar object(s) to the memory";
181 familiarObjectPoseStoragePrx->reportFamiliarObjectPoses(
getName(),
data);
187 armem::arondto::FamiliarObjectInstance familiarObject;
191 familiarObject.poseSensFrame.pose =
192 Eigen::Isometry3f{Eigen::Translation3f{0, 0, 1000}}.matrix();
193 familiarObject.poseSensFrame.header.frame =
"DepthCameraSim";
194 familiarObject.poseSensFrame.header.agent = p.robotName;
198 familiarObject.objectID = p.exemplaryFamiliarObjectID;
200 familiarObject.confidence = 1.0;
207 const unsigned int numPoints = 100;
210 for (
unsigned int i = 0; i < numPoints; i++)
212 pcl::PointXYZRGBA point;
213 point.x =
static_cast<float>(i) - numPoints / 2;
219 familiarObject.points.points.push_back(point);
223 for (
unsigned int i = 0; i < numPoints; i++)
225 pcl::PointXYZRGBA point;
227 point.y =
static_cast<float>(i) - numPoints / 2;
232 familiarObject.points.points.push_back(point);
236 for (
unsigned int i = 0; i < numPoints; i++)
238 pcl::PointXYZRGBA point;
241 point.z =
static_cast<float>(i) - numPoints / 2;
245 familiarObject.points.points.push_back(point);
248 familiarObject.points.header.frame_id =
"DepthCameraSim";
249 familiarObject.points.is_dense =
true;
250 familiarObject.points.width = familiarObject.points.points.size();
251 familiarObject.points.height = 1;
253 familiarObject.bounding_box.center.setZero();
254 familiarObject.bounding_box.extents.setConstant(numPoints);
256 ::armarx::objpose::ProvidedFamiliarObjectPoseSeq
data;
257 data.push_back(familiarObject.toAronDTO());
259 ARMARX_INFO <<
"Sending " <<
data.size() <<
" familiar object to the memory";
260 familiarObjectPoseStoragePrx->reportFamiliarObjectPoses(
getName(),
data);
269 familiarObjectInstanceReaderPlugin->get();
278 const auto allFamiliarObjectInstances =
282 for (
const auto& [providerName, instances] : allFamiliarObjectInstances)
285 for (
const auto& instance : instances)
287 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
288 << instance.objectID.className <<
"/"
289 << instance.objectID.instanceName;
299 const std::map<std::string, std::vector<armem::arondto::FamiliarObjectInstance>>
300 familiarObjectInstances =
308 const auto& thisFamiliarObjectInstances = familiarObjectInstances.begin()->second;
310 for (
const auto& instance : thisFamiliarObjectInstances)
312 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
313 << instance.objectID.className <<
"/" << instance.objectID.instanceName;
323 fromAron(p.exemplaryFamiliarObjectID, objectId);
325 const auto instances =
329 for (
const auto& [instanceName, instancesForProvider] : instances)
331 for (
const auto& instance : instancesForProvider)
333 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
334 << instance.objectID.className <<
"/"
335 << instance.objectID.instanceName;
346 fromAron(p.exemplaryFamiliarObjectID, objectId);
348 const std::optional<std::map<std::string, armem::arondto::FamiliarObjectInstance>>
354 for (
const auto& [instanceName, instance] : instances.value())
356 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
357 << instance.objectID.className <<
"/" << instance.objectID.instanceName;
368 detectTask =
nullptr;
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.