26 return ::armarx::skills::Skill::InitResult{
27 .
status = ::armarx::skills::TerminatedSkillStatus::Succeeded};
33 std::set<armarx::ObjectID> requiredObjectClassIDs;
34 for (
const auto& objectID : in.parameters.requiredObjectClassIDs)
36 requiredObjectClassIDs.insert(armarx::aron::fromAron<armarx::ObjectID>(objectID));
39 const size_t numberOfRequiredObjectClassIDs = requiredObjectClassIDs.size();
41 const std::vector<Eigen::Vector3f> gazePositions =
52 size_t nextTargetIndex = 0;
60 srv_->objectPoseClient.fetchObjectPoses();
62 for (
const objpose::ObjectPose& objectPose : objectPoses)
64 const ObjectID objectPoseClassID = objectPose.objectID.getClassID();
66 if (requiredObjectClassIDs.erase(objectPoseClassID) > 0)
68 toAron(result.foundObjectInstanceIDs.emplace_back(), objectPose.objectID);
72 if (requiredObjectClassIDs.empty())
81 if (now > nextTargetDueTime)
83 if (nextTargetIndex >= gazePositions.size())
90 const Eigen::Vector3f& position = gazePositions.at(nextTargetIndex);
92 ARMARX_INFO <<
"Looking to position #" << (nextTargetIndex + 1) <<
"/"
93 << gazePositions.size() <<
" (" << position.transpose() <<
")";
95 const gaze_targets::GazeTarget gazeTarget =
98 srv_->viewSelectionClient.commitGazeTarget(gazeTarget);
99 this->latestGazeTarget_ = gazeTarget;
102 nextTargetDueTime = now + duration;
104 metronome.waitForNextTick();
116 metronome.waitForNextTick();
123 result.allRequiredObjectClassesFound =
124 result.foundObjectInstanceIDs.size() == numberOfRequiredObjectClassIDs;
130 LookForObjects::onStopRequested()
132 if (latestGazeTarget_.has_value())
134 gaze_targets::GazeTarget deletedTarget = latestGazeTarget_.value();
135 deletedTarget.priority =
137 deletedTarget.keepInQueue =
false;
140 srv_->viewSelectionClient.commitGazeTarget(deletedTarget);
148 toAron(defaults.requiredObjectClassIDs.emplace_back(),
151 defaults.scanLocation = arondto::ScanLocationParams::FromAron(
157 .rootProfileDefaults = defaults.toAron(),
159 .parametersType = Params::ToAronType(),
160 .resultType = Result::ToAronType(),