25 #include <SimoxUtility/math/pose.h>
42 defs->optional(p.predictionsPerObject,
43 "predictions.NumberPerObject",
44 "How many predictions with increasing time offsets to make per object.");
46 defs->optional(p.millisecondPredictionIncrement,
47 "predictions.TimeIncrement",
48 "The size of the prediction time offset increment in milliseconds.");
56 return "ObjectPoseClientExample";
69 objectProcessingTask =
71 objectProcessingTask->start();
85 ObjectPoseClientExample::objectProcessingTaskRun()
89 while (objectProcessingTask && !objectProcessingTask->isStopped())
95 ARMARX_VERBOSE <<
"Received poses of " << objectPoses.size() <<
" objects.";
106 for (
const objpose::ObjectPose& objectPose : objectPoses)
109 .
pose(objectPose.objectPoseGlobal)
111 .
alpha(objectPose.confidence));
115 stage.
add(visualizePredictions(client, objectPoses));
118 cycle.waitForCycleDuration();
123 ObjectPoseClientExample::visualizePredictions(
const objpose::ObjectPoseClient& client,
128 objpose::ObjectPosePredictionRequestSeq requests;
129 for (
const objpose::ObjectPose& objectPose : objectPoses)
131 for (
int i = 0; i < p.predictionsPerObject; ++i)
133 objpose::ObjectPosePredictionRequest request;
134 toIce(request.objectID, objectPose.objectID);
135 request.settings.predictionEngineID =
"Linear Position Regression";
136 toIce(request.timestamp,
140 requests.push_back(request);
144 objpose::ObjectPosePredictionResultSeq results;
147 results = client.objectPoseStorage->predictObjectPoses(requests);
149 catch (
const Ice::LocalException& e)
151 ARMARX_INFO <<
"Failed to get predictions for object poses: " << e.what();
154 for (
size_t i = 0; i < results.size(); ++i)
156 const objpose::ObjectPosePredictionResult& result = results.at(i);
159 auto predictedPose = armarx::fromIce<objpose::ObjectPose>(result.prediction);
160 Eigen::Vector3f predictedPosition =
161 simox::math::position(predictedPose.objectPoseGlobal);
163 (p.predictionsPerObject - (
static_cast<int>(i) % p.predictionsPerObject)) *
164 255 / p.predictionsPerObject;
166 viz::Arrow(predictedPose.objectID.str() +
" Linear Prediction " +
168 .fromTo(simox::math::position(
169 objectPoses.at(i / p.predictionsPerObject).objectPoseGlobal),
175 ARMARX_INFO <<
"Prediction for object '" << result.prediction.objectID
176 <<
"' failed: " << result.errorMessage;