39 #ifndef HPP_FCL_COLLISION_OBJECT_BASE_H 40 #define HPP_FCL_COLLISION_OBJECT_BASE_H 59 GEOM_BOX,
GEOM_SPHERE,
GEOM_CAPSULE,
GEOM_CONE,
GEOM_CYLINDER,
GEOM_CONVEX,
GEOM_PLANE,
GEOM_HALFSPACE,
GEOM_TRIANGLE,
GEOM_OCTREE,
NODE_COUNT};
70 : aabb_center(
Vec3f::Constant((std::numeric_limits<
FCL_REAL>::max)()))
73 , threshold_occupied(1)
80 : aabb_center(other.aabb_center)
81 , aabb_radius(other.aabb_radius)
82 , cost_density(other.cost_density)
83 , threshold_occupied(other.threshold_occupied)
84 , threshold_free(other.threshold_free)
110 return !(*
this == other);
120 virtual void computeLocalAABB() = 0;
136 {
return cost_density >= threshold_occupied; }
140 {
return cost_density <= threshold_free; }
143 bool isUncertain()
const;
178 Matrix3f C = computeMomentofInertia();
179 Vec3f com = computeCOM();
182 return (
Matrix3f() << C(0, 0) - V * (com[1] * com[1] + com[2] * com[2]),
183 C(0, 1) + V * com[0] * com[1],
184 C(0, 2) + V * com[0] * com[2],
185 C(1, 0) + V * com[1] * com[0],
186 C(1, 1) - V * (com[0] * com[0] + com[2] * com[2]),
187 C(1, 2) + V * com[1] * com[2],
188 C(2, 0) + V * com[2] * com[0],
189 C(2, 1) + V * com[2] * com[1],
190 C(2, 2) - V * (com[0] * com[0] + com[1] * com[1])).finished();
193 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
202 cgeom(cgeom_), cgeom_const(cgeom_)
206 cgeom->computeLocalAABB();
212 cgeom(cgeom_), cgeom_const(cgeom_), t(tf)
214 cgeom->computeLocalAABB();
219 cgeom(cgeom_), cgeom_const(cgeom_), t(
Transform3f(R, T))
221 cgeom->computeLocalAABB();
232 return cgeom->getObjectType();
238 return cgeom->getNodeType();
250 if(t.getRotation().isIdentity())
252 aabb =
translate(cgeom->aabb_local, t.getTranslation());
256 Vec3f center (t.transform(cgeom->aabb_center));
257 Vec3f delta(Vec3f::Constant(cgeom->aabb_radius));
258 aabb.min_ = center - delta;
259 aabb.max_ = center + delta;
278 return t.getTranslation();
284 return t.getRotation();
310 t.setTransform(R, T);
324 return t.isIdentity();
347 shared_ptr<CollisionGeometry>
cgeom;
Definition: collision_object.h:59
const Matrix3f & getRotation() const
get matrix rotation of the object
Definition: collision_object.h:282
FCL_REAL cost_density
collision cost for unit volume
Definition: collision_object.h:158
bool operator==(const CollisionGeometry &other) const
Equality operator.
Definition: collision_object.h:94
virtual Matrix3f computeMomentofInertia() const
compute the inertia matrix, related to the origin
Definition: collision_object.h:170
~CollisionObject()
Definition: collision_object.h:225
Definition: collision_object.h:58
Definition: collision_object.h:59
OBJECT_TYPE
object type: BVH (mesh, points), basic geometry, octree
Definition: collision_object.h:55
CollisionGeometry()
Definition: collision_object.h:69
Main namespace.
Definition: AABB.h:43
Definition: collision_object.h:58
NODE_TYPE getNodeType() const
get the node type
Definition: collision_object.h:236
void * user_data
pointer to user defined data specific to this object
Definition: collision_object.h:356
const shared_ptr< CollisionGeometry > & collisionGeometry()
get geometry from the object instance
Definition: collision_object.h:340
CollisionGeometry(const CollisionGeometry &other)
Copy constructor.
Definition: collision_object.h:79
Eigen::Matrix< FCL_REAL, 3, 3 > Matrix3f
Definition: data_types.h:68
virtual Vec3f computeCOM() const
compute center of mass
Definition: collision_object.h:167
CollisionObject(const shared_ptr< CollisionGeometry > &cgeom_, const Transform3f &tf)
Definition: collision_object.h:211
Definition: collision_object.h:59
Definition: collision_object.h:58
KDOP< N > translate(const KDOP< N > &bv, const Vec3f &t)
translate the KDOP BV
const shared_ptr< const CollisionGeometry > & collisionGeometry() const
get geometry from the object instance
Definition: collision_object.h:334
FCL_REAL threshold_occupied
threshold for occupied ( >= is occupied)
Definition: collision_object.h:161
Definition: collision_object.h:58
bool isOccupied() const
whether the object is completely occupied
Definition: collision_object.h:135
const Transform3f & getTransform() const
get object's transform
Definition: collision_object.h:288
bool isFree() const
whether the object is completely free
Definition: collision_object.h:139
void setIdentityTransform()
set the object in local coordinate
Definition: collision_object.h:328
void setTransform(const Transform3f &tf)
set object's transform
Definition: collision_object.h:316
Definition: collision_object.h:59
virtual NODE_TYPE getNodeType() const
get the node type
Definition: collision_object.h:117
Definition: collision_object.h:55
AABB aabb_local
AABB in local coordinate, used for tight AABB when only translation transform.
Definition: collision_object.h:152
Definition: collision_object.h:55
void setTransform(const Matrix3f &R, const Vec3f &T)
set object's transform
Definition: collision_object.h:308
void setRotation(const Matrix3f &R)
set object's rotation matrix
Definition: collision_object.h:294
void * user_data
pointer to user defined data specific to this object
Definition: collision_object.h:155
double FCL_REAL
Definition: data_types.h:66
OBJECT_TYPE getObjectType() const
get the type of the object
Definition: collision_object.h:230
Definition: collision_object.h:58
void setUserData(void *data)
set user data in geometry
Definition: collision_object.h:129
Definition: collision_object.h:59
virtual OBJECT_TYPE getObjectType() const
get the type of the object
Definition: collision_object.h:114
Definition: collision_object.h:55
AABB aabb
AABB in global coordinate.
Definition: collision_object.h:353
void * getUserData() const
get user data in geometry
Definition: collision_object.h:123
CollisionObject(const shared_ptr< CollisionGeometry > &cgeom_, const Matrix3f &R, const Vec3f &T)
Definition: collision_object.h:218
A class describing the AABB collision structure, which is a box in 3D space determined by two diagona...
Definition: AABB.h:55
Definition: collision_object.h:58
FCL_REAL aabb_radius
AABB radius.
Definition: collision_object.h:149
Definition: collision_object.h:55
void setUserData(void *data)
set user data in object
Definition: collision_object.h:270
virtual Matrix3f computeMomentofInertiaRelatedToCOM() const
compute the inertia matrix, related to the com
Definition: collision_object.h:176
Definition: collision_object.h:58
Definition: collision_object.h:59
bool isIdentityTransform() const
whether the object is in local coordinate
Definition: collision_object.h:322
NODE_TYPE
traversal node type: bounding volume (AABB, OBB, RSS, kIOS, OBBRSS, KDOP16, KDOP18, kDOP24), basic shape (box, sphere, capsule, cone, cylinder, convex, plane, triangle), and octree
Definition: collision_object.h:58
virtual FCL_REAL computeVolume() const
compute the volume
Definition: collision_object.h:173
void setTranslation(const Vec3f &T)
set object's translation
Definition: collision_object.h:300
FCL_REAL threshold_free
threshold for free (<= is free)
Definition: collision_object.h:164
Vec3f aabb_center
AABB center in local coordinate.
Definition: collision_object.h:146
Definition: collision_object.h:59
shared_ptr< const CollisionGeometry > cgeom_const
Definition: collision_object.h:348
const AABB & getAABB() const
get the AABB in world space
Definition: collision_object.h:242
const Vec3f & getTranslation() const
get translation of the object
Definition: collision_object.h:276
Definition: collision_object.h:55
Definition: collision_object.h:59
Transform3f t
Definition: collision_object.h:350
CollisionObject(const shared_ptr< CollisionGeometry > &cgeom_)
Definition: collision_object.h:201
virtual ~CollisionGeometry()
Definition: collision_object.h:88
Eigen::Matrix< FCL_REAL, 3, 1 > Vec3f
Definition: data_types.h:67
void computeAABB()
compute the AABB in world space
Definition: collision_object.h:248
the object for collision or distance computation, contains the geometry and the transform information...
Definition: collision_object.h:198
Definition: collision_object.h:58
void * getUserData() const
get user data in object
Definition: collision_object.h:264
The geometry for the object for collision or distance computation.
Definition: collision_object.h:65
Definition: collision_object.h:59
Definition: collision_object.h:59
shared_ptr< CollisionGeometry > cgeom
Definition: collision_object.h:347
Definition: collision_object.h:59
bool operator!=(const CollisionGeometry &other) const
Difference operator.
Definition: collision_object.h:108
#define HPP_FCL_DLLAPI
Definition: config.hh:64
Definition: collision_object.h:58