75 std::vector<gaze_targets::GazeTarget> gazeTargets;
77 if (
human.keypoints.count(headKpName.value()) == 0)
80 <<
"` not available!";
93 gazeTargets.push_back(headTarget);
98 const float distanceHumanRobot =
104 if (distanceHumanRobot >
params.maxHandoverInitializationDistance)
112 const auto handPriorityFromDistance =
113 [&](
const float handBodyDistance,
const float handRobotDistance)
117 const float normalizedHandBodyPriority =
118 std::clamp((handBodyDistance -
params.minHandReachoutDistance) /
119 (
params.maxHandReachoutDistance -
params.minHandReachoutDistance),
125 const float normalizedHandRobotPriority = std::clamp(
126 (
params.maxHandoverInitializationDistance - handRobotDistance) /
127 (
params.maxHandoverInitializationDistance -
params.minHandoverDistance),
131 return params.handPriorityScaling * normalizedHandBodyPriority *
132 normalizedHandRobotPriority;
135 const auto handsPriorityFromDistance = [&](
const float handsRobotDistance)
137 return handsRobotDistance <
params.maxHandsInitializationDistance
138 ? (
params.headPriority + 1)
144 if (
human.keypoints.count(leftWristKpName.value()) > 0)
147 human.keypoints.at(leftWristKpName.value());
149 const float distanceLeft =
152 const float handRobotDistance = leftWristKp.
positionRobot->toEigen().head<2>().
norm();
154 const float priority = handPriorityFromDistance(distanceLeft, handRobotDistance);
163 gazeTargets.push_back(handTarget);
167 if (
human.keypoints.count(rightWristKpName.value()) > 0)
170 human.keypoints.at(rightWristKpName.value());
172 const float distanceRight =
176 const float handRobotDistance = rightWristKp.
positionRobot->toEigen().head<2>().
norm();
178 const float priority = handPriorityFromDistance(distanceRight, handRobotDistance);
188 gazeTargets.push_back(handTarget);
195 human.keypoints.at(leftWristKpName.value());
197 human.keypoints.at(rightWristKpName.value());
199 const float alpha = 0.5;
201 const Eigen::Vector3f centerHandsPosition =
206 const float centerHandsRobotDistance =
207 (centerHandsPosition -
robot_->getGlobalPosition()).head<2>().
norm();
209 const float priority = handsPriorityFromDistance(centerHandsRobotDistance);
222 gazeTargets.push_back(handsTarget);
229 for (
const auto& target : gazeTargets)
250 std::vector<gaze_targets::GazeTarget> gazeTargets;
252 if (
human.keypoints.count(headKpName.value()) == 0)
255 <<
"` not available!";
268 gazeTargets.push_back(headTarget);