Skip to content

Commit 35a7aa3

Browse files
committed
Only check end effector collisions for target pose in ComputeIK
1 parent 233d63a commit 35a7aa3

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

core/src/stages/compute_ik.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ bool isTargetPoseColliding(const planning_scene::PlanningScenePtr& scene, Eigen:
9696

9797
// consider all rigidly connected parent links as well
9898
const robot_model::LinkModel* parent = robot_model::RobotModel::getRigidlyConnectedParentLinkModel(link);
99+
const auto& considered_target_links = parent->getParentJointModel()->getDescendantLinkModels();
99100
if (parent != link) // transform pose into pose suitable to place parent
100101
pose = pose * robot_state.getGlobalLinkTransform(link).inverse() * robot_state.getGlobalLinkTransform(parent);
101102

@@ -125,7 +126,18 @@ bool isTargetPoseColliding(const planning_scene::PlanningScenePtr& scene, Eigen:
125126
req.contacts = (collision_result != nullptr);
126127
collision_detection::CollisionResult& res = collision_result ? *collision_result : result;
127128
scene->checkCollision(req, res, robot_state, acm);
128-
return res.collision;
129+
130+
// Only check collisions with target links
131+
if (res.collision) {
132+
for (const auto& contact : res.contacts) {
133+
const auto& colliding_links = contact.first;
134+
for (const auto& link : considered_target_links) {
135+
if (colliding_links.first == link->getName() || colliding_links.second == link->getName())
136+
return true;
137+
}
138+
}
139+
}
140+
return false;
129141
}
130142

131143
std::string listCollisionPairs(const collision_detection::CollisionResult::ContactMap& contacts,

0 commit comments

Comments
 (0)