From da681818071ad9467bb3055c44f059e6e7e92806 Mon Sep 17 00:00:00 2001 From: Corvin-N <corvin@navarro.de> Date: Mon, 15 Aug 2022 20:13:35 +0200 Subject: [PATCH] Implement HumanTracker::getMeasurementPositions() --- .../dynamic_scene_provider/HumanTracker.cpp | 40 ++++++++++++++----- .../dynamic_scene_provider/HumanTracker.h | 5 +++ 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/source/armarx/navigation/components/dynamic_scene_provider/HumanTracker.cpp b/source/armarx/navigation/components/dynamic_scene_provider/HumanTracker.cpp index dcd76e7d..6bae4e5d 100644 --- a/source/armarx/navigation/components/dynamic_scene_provider/HumanTracker.cpp +++ b/source/armarx/navigation/components/dynamic_scene_provider/HumanTracker.cpp @@ -11,18 +11,11 @@ namespace armarx::navigation::components::dynamic_scene_provider { trackedHumans.clear(); + auto positions = getMeasurementPositions(measurements); + for (const armem::human::HumanPose& humanPose : measurements.humanPoses) { - - const armem::human::Keypoint3DIdMap& keypoints = humanPose.keypoint3dMap; - ARMARX_CHECK_NOT_EMPTY(keypoints); - - Eigen::Vector3f centerPos = Eigen::Vector3f::Zero(); - for (const auto& [_, v] : keypoints) - { - centerPos += v.positionGlobal; - } - centerPos /= static_cast<float>(keypoints.size()); + auto centerPos = positions.find(humanPose); core::Pose2D pose = core::Pose2D::Identity(); pose.translation() = Eigen::Vector2f{centerPos.x(), centerPos.y()}; @@ -44,13 +37,38 @@ namespace armarx::navigation::components::dynamic_scene_provider } + std::map<const armem::human::HumanPose&, armarx::navigation::core::Position> + HumanTracker::getMeasurementPositions(const Measurements& measurements) const + { + std::map<armem::human::HumanPose&, armarx::navigation::core::Position> map; + + for (const armem::human::HumanPose& humanPose : measurements.humanPoses) + { + + const armem::human::Keypoint3DIdMap& keypoints = humanPose.keypoint3dMap; + ARMARX_CHECK_NOT_EMPTY(keypoints); + + auto centerPos = armarx::navigation::core::Position::Zero(); + for (const auto& [_, v] : keypoints) + { + centerPos += v.positionGlobal; + } + centerPos /= static_cast<float>(keypoints.size()); + + map.insert( + std::pair<const armem::human::HumanPose&, armarx::navigation::core::Position>( + humanPose, centerPos)); + } + } + + std::map<armem::human::HumanPose&, human::Human&> HumanTracker::getAssociatedHumans(const Measurements& measurements) const { } std::vector<human::Human> - HumanTracker::mostRecentTrackedHumans() const + HumanTracker::getMostRecentTrackedHumans() const { if (trackedHumans.empty()) { diff --git a/source/armarx/navigation/components/dynamic_scene_provider/HumanTracker.h b/source/armarx/navigation/components/dynamic_scene_provider/HumanTracker.h index 209fd345..76c6ce50 100644 --- a/source/armarx/navigation/components/dynamic_scene_provider/HumanTracker.h +++ b/source/armarx/navigation/components/dynamic_scene_provider/HumanTracker.h @@ -31,7 +31,12 @@ namespace armarx::navigation::components::dynamic_scene_provider private: std::vector<human::Human> trackedHumans; + std::map<const armem::human::HumanPose&, armarx::navigation::core::Position> + getMeasurementPositions(const Measurements& measurements) const; + std::map<armem::human::HumanPose&, human::Human&> getAssociatedHumans(const Measurements& measurements) const; + + std::vector<human::Human> getMostRecentTrackedHumans() const; }; } // namespace armarx::navigation::components::dynamic_scene_provider -- GitLab