24 #include <Eigen/Geometry>
26 #include <pcl/point_types.h>
28 #include <opencv2/core/mat.hpp>
30 #include <IceUtil/Time.h>
32 #include <SimoxUtility/math/pose/pose.h>
33 #include <VirtualRobot/Robot.h>
34 #include <VirtualRobot/VirtualRobot.h>
35 #include <VirtualRobot/XML/RobotIO.h>
46 #include <RobotAPI/libraries/armem_objects/aron/FamiliarObjectInstance.aron.generated.h>
56 addPlugin(familiarObjectInstanceReaderPlugin);
58 p.exemplaryFamiliarObjectID.dataset =
"myDataset";
59 p.exemplaryFamiliarObjectID.className =
"sphere";
60 p.exemplaryFamiliarObjectID.instanceName =
"0";
69 defs->required(p.robotName,
"p.robotName");
71 defs->optional(p.exemplaryFamiliarObjectID.dataset,
"p.objectId.dataset");
72 defs->optional(p.exemplaryFamiliarObjectID.className,
"p.objectId.className");
73 defs->optional(p.exemplaryFamiliarObjectID.instanceName,
"p.objectId.instanceName");
75 defs->component(familiarObjectPoseStoragePrx,
"ObjectMemory");
83 return "FamiliarObjectDetectionExample";
112 ::armarx::objpose::ProvidedFamiliarObjectPoseSeq
data;
114 armem::arondto::FamiliarObjectInstance familiarObject;
118 familiarObject.poseSensFrame.pose =
119 Eigen::Isometry3f{Eigen::Translation3f{0, 0, 1000}}.matrix();
120 familiarObject.poseSensFrame.header.frame =
"DepthCameraSim";
121 familiarObject.poseSensFrame.header.agent = p.robotName;
125 familiarObject.objectID = p.exemplaryFamiliarObjectID;
127 familiarObject.confidence = 1.0;
134 const int numPoints = 100;
137 for (
int i = 0; i < numPoints; i++)
139 pcl::PointXYZRGBA point;
140 point.x =
static_cast<float>(i) - numPoints / 2;
146 familiarObject.points.points.push_back(point);
150 for (
int i = 0; i < numPoints; i++)
152 pcl::PointXYZRGBA point;
154 point.y =
static_cast<float>(i) - numPoints / 2;
159 familiarObject.points.points.push_back(point);
163 for (
int i = 0; i < numPoints; i++)
165 pcl::PointXYZRGBA point;
168 point.z =
static_cast<float>(i) - numPoints / 2;
172 familiarObject.points.points.push_back(point);
175 familiarObject.points.header.frame_id =
"DepthCameraSim";
176 familiarObject.points.is_dense =
true;
177 familiarObject.points.width = familiarObject.points.points.size();
178 familiarObject.points.height = 1;
180 familiarObject.bounding_box.center.setZero();
181 familiarObject.bounding_box.extents.setConstant(numPoints);
183 data.push_back(familiarObject.toAronDTO());
185 ARMARX_INFO <<
"Sending " <<
data.size() <<
" familiar object to the memory";
186 familiarObjectPoseStoragePrx->reportFamiliarObjectPoses(
getName(),
data);
195 familiarObjectInstanceReaderPlugin->get();
204 const auto allFamiliarObjectInstances =
208 for (
const auto& [providerName, instances] : allFamiliarObjectInstances)
211 for (
const auto& instance : instances)
213 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
214 << instance.objectID.className <<
"/"
215 << instance.objectID.instanceName;
225 const std::map<std::string, std::vector<armem::arondto::FamiliarObjectInstance>>
226 familiarObjectInstances =
234 const auto& thisFamiliarObjectInstances = familiarObjectInstances.begin()->second;
236 for (
const auto& instance : thisFamiliarObjectInstances)
238 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
239 << instance.objectID.className <<
"/" << instance.objectID.instanceName;
249 fromAron(p.exemplaryFamiliarObjectID, objectId);
251 const auto instances =
255 for (
const auto& [instanceName, instancesForProvider] : instances)
257 for (
const auto& instance : instancesForProvider)
259 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
260 << instance.objectID.className <<
"/"
261 << instance.objectID.instanceName;
272 fromAron(p.exemplaryFamiliarObjectID, objectId);
274 const std::optional<std::map<std::string, armem::arondto::FamiliarObjectInstance>>
280 for (
const auto& [instanceName, instance] : instances.value())
282 ARMARX_INFO <<
"- Instance: " << instance.objectID.dataset <<
"/"
283 << instance.objectID.className <<
"/" << instance.objectID.instanceName;