24 #include <VirtualRobot/Robot.h>
36 std::vector<gaze_targets::GazeTarget>
39 std::vector<gaze_targets::GazeTarget>
targets;
44 targets = updateTargetsPreHandover(human);
47 targets = updateTargetsPreHandover(human);
54 std::vector<gaze_targets::GazeTarget>
68 std::vector<gaze_targets::GazeTarget> gazeTargets;
70 if (human.
keypoints.count(headKpName.value()) == 0)
73 <<
"` not available!";
86 gazeTargets.push_back(headTarget);
91 const float distanceHumanRobot =
105 const auto priorityFromDistance =
106 [&](
const float handBodyDistance,
const float handRobotDistance)
110 const float normalizedHandBodyPriority =
116 const float normalizedHandRobotPriority =
std::clamp(
123 normalizedHandRobotPriority;
127 if (human.
keypoints.count(leftWristKpName.value()) > 0)
129 const armem::human::PoseKeypoint leftWristKp =
130 human.
keypoints.at(leftWristKpName.value());
132 const float distanceLeft =
135 const float handRobotDistance = leftWristKp.positionRobot->toEigen().head<2>().
norm();
137 const float priority = priorityFromDistance(distanceLeft, handRobotDistance);
138 const gaze_targets::TargetPriority targetPriority(
141 gaze_targets::GazeTarget handTarget(
"left_hand",
142 leftWristKp.positionGlobal.value(),
146 gazeTargets.push_back(handTarget);
150 if (human.
keypoints.count(rightWristKpName.value()) > 0)
152 const armem::human::PoseKeypoint rightWristKp =
153 human.
keypoints.at(rightWristKpName.value());
155 const float distanceRight =
156 (rightWristKp.positionGlobal->toEigen() - pelvisKp.
positionGlobal->toEigen())
159 const float handRobotDistance = rightWristKp.positionRobot->toEigen().head<2>().
norm();
161 const float priority = priorityFromDistance(distanceRight, handRobotDistance);
163 const gaze_targets::TargetPriority targetPriority(
166 gaze_targets::GazeTarget handTarget(
"right_hand",
167 rightWristKp.positionGlobal.value(),
171 gazeTargets.push_back(handTarget);
178 for (
const auto&
target : gazeTargets)
187 std::vector<gaze_targets::GazeTarget>
188 RobotGiver::updateTargetsAfterHandover(
const armem::human::HumanPose& human)
const
199 std::vector<gaze_targets::GazeTarget> gazeTargets;
201 if (human.keypoints.count(headKpName.value()) == 0)
204 <<
"` not available!";
210 const armem::human::PoseKeypoint headKp = human.keypoints.at(headKpName.value());
212 const gaze_targets::TargetPriority targetPriority(
215 gaze_targets::GazeTarget headTarget(
216 "head", headKp.positionGlobal.value(), targetPriority,
Duration::Seconds(1),
false);
217 gazeTargets.push_back(headTarget);