35 Eigen::Matrix4f objectGlobalPose,
39 if (objectCostmaps_.find(objectID.
getClassID().
str()) == objectCostmaps_.end())
44 const auto global_T_object_desired_3d = objectGlobalPose;
45 Eigen::Vector3f eDesired =
46 global_T_object_desired_3d.block<3, 3>(0, 0).eulerAngles(0, 1, 2);
48 for (
const auto& cachedObjectCostmap : objectCostmaps_.at(objectID.
getClassID().
str()))
53 ARMARX_VERBOSE <<
"Skipping cached costmap because of different joint values";
57 const auto global_T_object_stored = cachedObjectCostmap.global_T_object;
58 Eigen::Vector3f eStored =
59 global_T_object_stored.block<3, 3>(0, 0).eulerAngles(0, 1, 2);
62 float rollDiff = std::abs(eDesired.x() - eStored.x());
63 float pitchDiff = std::abs(eDesired.y() - eStored.y());
64 float yawDiff = eDesired.z() - eStored.z();
66 if (rollDiff < 1e-3 && pitchDiff < 1e-3)
69 const Eigen::Vector2f global_P_object_desired =
70 Eigen::Isometry3f{global_T_object_desired_3d}.translation().head<2>();
71 const Eigen::Vector2f global_P_object_stored =
72 Eigen::Isometry3f{global_T_object_stored}.translation().head<2>();
75 <<
"Found cached costmap for objectID: " << objectID.
str()
76 <<
" with rollDiff: " << rollDiff <<
", pitchDiff: " << pitchDiff
77 <<
", yawDiff: " << yawDiff;
79 Eigen::Isometry2f global_T_object_desired =
80 Eigen::Translation2f{global_P_object_desired} *
81 Eigen::Rotation2Df{eDesired.z()};
82 Eigen::Isometry2f global_T_object_stored =
83 Eigen::Translation2f{global_P_object_stored} * Eigen::Rotation2Df{eStored.z()};
86 Eigen::Isometry2f global_T_costmap = cachedObjectCostmap.costmap.origin();
87 Eigen::Isometry2f costmap_T_object =
88 global_T_costmap.inverse() * global_T_object_stored;
89 Eigen::Isometry2f global_T_costmap_new =
90 global_T_object_desired * costmap_T_object.inverse();
94 adaptedCostmap.
setOrigin(global_T_costmap_new);
96 return adaptedCostmap;
100 <<
" does not match desired rotation. rollDiff: " << rollDiff
101 <<
", pitchDiff: " << pitchDiff <<
", yawDiff: " << yawDiff;
105 <<
"No matching cached costmap found for objectID: " << objectID.
str();