24#include <VirtualRobot/Robot.h>
36 std::vector<gaze_targets::GazeTarget>
39 std::vector<gaze_targets::GazeTarget>
targets;
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",
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 =
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",
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(
217 gazeTargets.push_back(headTarget);
SpamFilterDataPtr deactivateSpam(SpamFilterDataPtr const &spamFilter, float deactivationDurationSec, const std::string &identifier, bool deactivate)
static Duration Seconds(std::int64_t seconds)
Constructs a duration in seconds.
Business Object (BO) class of GazeTarget.
The Priority of a GazeTarget.
const VirtualRobot::RobotPtr robot_
std::vector< gaze_targets::GazeTarget > updateTargets(const armem::human::HumanPose &human) override
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
#define ARMARX_VERBOSE
The logging level for verbose information.
@ TaskDriven
Task-Driven attention has highest priority.
std::optional< std::string > pelvisKeypoint(const std::string &poseModelId)
std::optional< std::string > headKeypoint(const std::string &poseModelId)
std::optional< std::string > rightWristKeypoint(const std::string &poseModelId)
std::optional< std::string > leftWristKeypoint(const std::string &poseModelId)
This file is part of ArmarX.
This file is part of ArmarX.
Eigen::Vector3f toEigen(const pcl::PointXYZ &pt)
Vertex target(const detail::edge_base< Directed, Vertex > &e, const PCG &)
double norm(const Point &a)
std::optional< armarx::FramedPosition > positionRobot
std::optional< armarx::FramedPosition > positionGlobal
float handPriorityScaling
float minHandoverDistance
float maxHandReachoutDistance
float maxHandoverInitializationDistance
the distance below which the hand targets will be generated.
float minHandReachoutDistance