32 #include <RobotAPI/libraries/armem_robot_state/aron/Proprioception.aron.generated.h>
33 #include <RobotAPI/libraries/armem_robot_state/aron/Transform.aron.generated.h>
48 std::vector<armem::MemoryID>
61 RobotStatePredictionClient::_queryEntityIDs(
const std::string& coreSegmentName)
84 std::vector<armem::PredictionRequest>
86 const std::vector<armem::MemoryID>& entityIDs,
88 const std::string& engineID)
90 std::vector<armem::PredictionRequest> requests;
91 requests.reserve(entityIDs.size());
102 std::vector<PredictionResult>
105 const std::string& engineID)
107 const std::vector<PredictionRequest> requests =
112 std::vector<PredictionResult>
120 std::optional<Eigen::Affine3f>
122 const std::vector<armem::PredictionResult>& localizationPredictionResults,
123 const std::vector<armem::MemoryID>& localizationEntityIDs,
126 ARMARX_CHECK_EQUAL(localizationPredictionResults.size(), localizationEntityIDs.size());
127 std::stringstream errorMessages;
129 namespace loc = armem::robot_state::localization;
131 std::optional<armem::wm::CoreSegment> coreSegment;
133 loc::TransformQuery query;
136 query.header.agent =
"";
137 query.header.timestamp = predictedTime;
139 for (
size_t i = 0; i < localizationPredictionResults.size(); ++i)
146 if (query.header.agent.empty())
148 const arondto::Transform tf = arondto::Transform::FromAron(result.
prediction);
149 query.header.agent = tf.header.agent;
157 update.entityID = entityID;
158 update.referencedTime = predictedTime;
160 coreSegment->update(
update);
165 errorMessages <<
"Prediction of '" << entityID <<
"'"
170 std::optional<Eigen::Affine3f> result;
171 if (coreSegment.has_value())
173 loc::TransformResult tf =
174 loc::TransformHelper::lookupTransform(coreSegment.value(), query);
178 result = tf.transform.transform;
182 errorMessages <<
"\nFailed to lookup transform: " << tf.errorMessage <<
"\n";
186 if (not errorMessages.str().empty())
194 std::optional<std::map<std::string, float>>
196 const std::vector<PredictionResult>& proprioceptionPredictionResults,
197 const std::string& robotName)
199 auto it = std::find_if(proprioceptionPredictionResults.begin(),
200 proprioceptionPredictionResults.end(),
202 { return result.snapshotID.entityName == robotName; });
203 if (it != proprioceptionPredictionResults.end())
206 auto prop = armem::arondto::Proprioception::FromAron(result.
prediction);
207 return prop.joints.position;
215 std::optional<Eigen::Affine3f>
218 const std::string& engineID)
220 const std::vector<PredictionResult> results =
predict(entityIDs, predictedTime, engineID);
221 std::optional<Eigen::Affine3f> pose =
lookupGlobalPose(results, entityIDs, predictedTime);
225 std::optional<std::map<std::string, float>>
228 const std::string& robotName,
229 const std::string& engineID)
231 const std::vector<PredictionResult> results =
predict(entityIDs, predictedTime, engineID);
237 const std::vector<armem::MemoryID>& propEntityIDs,
239 const std::string& robotName,
240 const std::string& engineID)
245 const std::vector<armem::MemoryID> entityIDs =
248 if (entityIDs.empty())
253 auto _results =
predict(entityIDs, predictedTime,
"Linear");
256 std::vector<armem::PredictionResult> locResults, propResults;