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();
126 viz::Layer layer =
arviz.layer(
"PredictionArray");
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);
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 " +
167 std::to_string(i % p.predictionsPerObject))
168 .fromTo(simox::math::position(
169 objectPoses.at(i / p.predictionsPerObject).objectPoseGlobal),
171 .color(viz::Color::green(255, alpha)));
175 ARMARX_INFO <<
"Prediction for object '" << result.prediction.objectID
176 <<
"' failed: " << result.errorMessage;
armarx::viz::Client arviz
Default component property definition container.
std::string getConfigIdentifier()
Retrieve config identifier for this component as set in constructor.
This util class helps with keeping a cycle time during a control cycle.
void setDebugObserverDatafield(Ts &&... ts) const
void sendDebugObserverBatch()
void setDebugObserverBatchModeEnabled(bool enable)
static Duration Seconds(std::int64_t seconds)
Constructs a duration in seconds.
static Duration MilliSeconds(std::int64_t milliSeconds)
Constructs a duration in milliseconds.
void onInitComponent() override
Pure virtual hook for the subclass.
void onDisconnectComponent() override
Hook for subclass.
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
void onConnectComponent() override
Pure virtual hook for the subclass.
void onExitComponent() override
Hook for subclass.
std::string getDefaultName() const override
objpose::ObjectPoseClient getClient() const
bool isStopped()
Retrieve whether stop() has been called.
Provides access to the armarx::objpose::ObjectPoseStorageInterface (aka the object memory).
ObjectPoseSeq fetchObjectPoses() const
Fetch all known object poses.
virtual Layer layer(std::string const &name) const
DerivedT & pose(Eigen::Matrix4f const &pose)
#define ARMARX_INFO
The normal logging level.
#define ARMARX_VERBOSE
The logging level for verbose information.
std::vector< ObjectPose > ObjectPoseSeq
This file offers overloads of toIce() and fromIce() functions for STL container types.
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.
void fromIce(const std::map< IceKeyT, IceValueT > &iceMap, boost::container::flat_map< CppKeyT, CppValueT > &cppMap)
void toIce(std::map< IceKeyT, IceValueT > &iceMap, const boost::container::flat_map< CppKeyT, CppValueT > &cppMap)
SimpleRunningTask(Ts...) -> SimpleRunningTask< std::function< void(void)> >
void add(ElementT const &element)
Object & fileByObjectFinder(const armarx::ObjectID &objectID, const std::string &objectsPackage=DefaultObjectsPackage, const std::string &relativeObjectsDirectory=DefaultRelativeObjectsDirectory)
Set the file so it could be found using armarx::ObjectFinder (also on remote machine).
Object & alpha(float alpha)
A staged commit prepares multiple layers to be committed.
void add(Layer const &layer)
Stage a layer to be committed later via client.apply(*this)