You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Does DynamicAABBTreeCollisionManager respect security_margin and collision_distance_threshold ? I couldn't get DynamicAABBTreeCollisionManager to work but NaiveCollisionManager and hpp::fcl::collide work well. Is it a bug or I did't do it the right way?
My test code:
#include<iostream>
#include<hpp/fcl/broadphase/broadphase.h>intmain(int argc, charconst *argv[])
{
auto colOs = std::vector<hpp::fcl::CollisionObject *>();
auto s1 = std::make_shared<hpp::fcl::Sphere>(0.1);
auto o1 = newhpp::fcl::CollisionObject(
s1, hpp::fcl::Quaternion3f().toRotationMatrix(), hpp::fcl::Vec3f(2, 0, 0));
o1->computeAABB();
colOs.push_back(o1);
auto s2 = std::make_shared<hpp::fcl::Box>(0.1, 0.1, 0.1);
auto o2 = newhpp::fcl::CollisionObject(
s2, hpp::fcl::Quaternion3f().toRotationMatrix(), hpp::fcl::Vec3f(0, 2, 0));
o2->computeAABB();
colOs.push_back(o2);
auto s3 = std::make_shared<hpp::fcl::Cylinder>(0.1, 0.1);
auto o3 = newhpp::fcl::CollisionObject(
s3, hpp::fcl::Quaternion3f().toRotationMatrix(), hpp::fcl::Vec3f(0, 0, 2));
o3->computeAABB();
colOs.push_back(o3);
auto s4 = std::make_shared<hpp::fcl::Ellipsoid>(0.1, 0.1, 0.2);
auto o4 = newhpp::fcl::CollisionObject(
s4, hpp::fcl::Quaternion3f().toRotationMatrix(), hpp::fcl::Vec3f(0, 0, 0.2));
o4->computeAABB();
colOs.push_back(o4);
auto srobot = std::make_shared<hpp::fcl::Sphere>(0.1);
auto orobot = newhpp::fcl::CollisionObject(
srobot, hpp::fcl::Quaternion3f().toRotationMatrix(), hpp::fcl::Vec3f(0, 0, 0));
orobot->computeAABB();
double security_margin = 3;
auto NcolMag = hpp::fcl::NaiveCollisionManager();
NcolMag.registerObjects(colOs);
NcolMag.setup();
auto NcolCB = hpp::fcl::CollisionCallBackDefault();
NcolCB.data.request.num_max_contacts = 1000;
NcolCB.data.request.security_margin = security_margin;
NcolCB.data.request.collision_distance_threshold = security_margin;
NcolMag.collide(orobot, &NcolCB);
std::cout << "isCollision from NaiveCollisionManager: " << NcolCB.data.result.isCollision() << std::endl;
std::cout << "numContacts from NaiveCollisionManager: " << NcolCB.data.result.numContacts() << std::endl;
NcolCB.data.result.clear();
auto DcolMag = hpp::fcl::DynamicAABBTreeCollisionManager();
DcolMag.registerObjects(colOs);
DcolMag.setup();
auto DcolCB = hpp::fcl::CollisionCallBackDefault();
DcolCB.data.request.num_max_contacts = 1000;
DcolCB.data.request.security_margin = security_margin;
DcolCB.data.request.collision_distance_threshold = security_margin;
DcolMag.collide(orobot, &DcolCB);
std::cout << "isCollision from DynamicAABBTreeCollisionManager: " << DcolCB.data.result.isCollision() << std::endl;
std::cout << "numContacts from DynamicAABBTreeCollisionManager: " << DcolCB.data.result.numContacts() << std::endl;
DcolCB.data.result.clear();
auto col_req = hpp::fcl::CollisionRequest();
col_req.num_max_contacts = 1000;
col_req.security_margin = security_margin;
col_req.collision_distance_threshold = security_margin;
auto col_res = hpp::fcl::CollisionResult();
bool isCollision = false;
int numContacts = 0;
for (auto o : colOs)
{
hpp::fcl::collide(orobot, o, col_req, col_res);
isCollision = isCollision || col_res.isCollision();
numContacts = numContacts + col_res.numContacts();
col_res.clear();
}
std::cout << "isCollision from hpp::fcl::collide: " << isCollision << std::endl;
std::cout << "numContacts from hpp::fcl::collide: " << numContacts << std::endl;
for (auto o : colOs)
{
delete o;
}
delete orobot;
return0;
}
return with security_margin=3:
isCollision from NaiveCollisionManager: 1
numContacts from NaiveCollisionManager: 4
isCollision from DynamicAABBTreeCollisionManager: 1
numContacts from DynamicAABBTreeCollisionManager: 1
isCollision from hpp::fcl::collide: 1
numContacts from hpp::fcl::collide: 4
return with security_margin=0.1:
isCollision from NaiveCollisionManager: 1
numContacts from NaiveCollisionManager: 1
isCollision from DynamicAABBTreeCollisionManager: 1
numContacts from DynamicAABBTreeCollisionManager: 1
isCollision from hpp::fcl::collide: 1
numContacts from hpp::fcl::collide: 1
The text was updated successfully, but these errors were encountered:
Does
DynamicAABBTreeCollisionManager
respectsecurity_margin
andcollision_distance_threshold
? I couldn't getDynamicAABBTreeCollisionManager
to work butNaiveCollisionManager
andhpp::fcl::collide
work well. Is it a bug or I did't do it the right way?My test code:
return with security_margin=3:
return with security_margin=0.1:
The text was updated successfully, but these errors were encountered: