diff --git a/source/armarx/navigation/human/HumanTracker.cpp b/source/armarx/navigation/human/HumanTracker.cpp index f9149a09ae9ba51f498698320c1585b7a0c93c2c..0d5d85fef0fe9092208943bf752ef310aadfb356 100644 --- a/source/armarx/navigation/human/HumanTracker.cpp +++ b/source/armarx/navigation/human/HumanTracker.cpp @@ -32,18 +32,16 @@ namespace armarx::navigation::human double yaw = 0; if (humanPose.keypoints.count("HEAD") > 0) { - Eigen::Quaternionf qhead = - humanPose.keypoints.at("HEAD").orientationGlobal->toEigenQuaternion(); - //TODO not quite sure if the quaternion operates this way as it is not further defined - // on https://learn.microsoft.com/de-de/azure/kinect-dk/body-joints - Eigen::Vector3f vec(0, 1, 0); + const armem::human::PoseKeypoint& headKeypoint = humanPose.keypoints.at("HEAD"); + ARMARX_CHECK(headKeypoint.orientationGlobal.has_value()); + Eigen::Quaternionf qhead = headKeypoint.orientationGlobal->toEigenQuaternion(); + Eigen::Vector3f vec(1, 0, 0); Eigen::Vector3f rot3 = qhead._transformVector(vec); - Eigen::Vector2f rot2(rot3.y(), rot3.z()); + Eigen::Vector2f rot2(rot3.x(), rot3.y()); if (rot2.norm() != 0) { - rot2.normalize(); - // calculate angle between e1 and rot2 - yaw = atan2(rot2.y(), rot2.x() * rot2.y()); + // calculate angle of rot2 + yaw = atan2(rot2.y(), rot2.x()); } //old version using euler angles: //yaw = humanPose //from all human pose keypoints @@ -51,8 +49,8 @@ namespace armarx::navigation::human // .at("HEAD") //find the keypoint representing the head // .orientationGlobal //get its global orientation // ->toEigen() - // .eulerAngles(2, 1, 0)[2]; //and extract the yaw (rotation around x axis - // should be z axis in global coordinates) + // .eulerAngles(2, 1, 0)[0]; //and extract the yaw (rotation around z axis in + // global coordinates) } // create the new pose with the calculated position and yaw