Go to the documentation of this file.
43 #ifndef TESSERACT_COLLISION_BULLET_UTILS_H
44 #define TESSERACT_COLLISION_BULLET_UTILS_H
48 #include <BulletCollision/CollisionShapes/btCollisionShape.h>
49 #include <BulletCollision/CollisionDispatch/btManifoldResult.h>
50 #include <btBulletCollisionCommon.h>
51 #include <console_bridge/console.h>
93 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
96 using Ptr = std::shared_ptr<CollisionObjectWrapper>;
97 using ConstPtr = std::shared_ptr<const CollisionObjectWrapper>;
107 bool m_enabled{
true };
110 const std::string& getName()
const;
112 const int& getTypeID()
const;
125 void getAABB(btVector3& aabb_min, btVector3& aabb_max)
const;
131 std::shared_ptr<CollisionObjectWrapper> clone();
133 void manage(
const std::shared_ptr<BulletCollisionShape>& t);
135 void manageReserve(std::size_t s);
147 std::vector<std::shared_ptr<BulletCollisionShape>>
m_data;
167 void getAabb(
const btTransform& t_w0, btVector3& aabbMin, btVector3& aabbMax)
const override;
169 const char*
getName()
const override;
175 btVector3* supportVerticesOut,
176 int numVectors)
const override;
178 void getAabbSlow(
const btTransform& t, btVector3& aabbMin, btVector3& aabbMax)
const override;
184 void setMargin(btScalar margin)
override;
197 const btVector3& localNormal,
198 btScalar& outsupport,
219 const std::shared_ptr<const tesseract_common::ContactAllowedValidator>& validator,
220 bool verbose =
false);
223 const btCollisionObjectWrapper* colObj0Wrap,
224 const btCollisionObjectWrapper* colObj1Wrap,
237 const btCollisionObjectWrapper* cow,
238 const btVector3& pt_world,
239 const btVector3& normal_world,
240 const btTransform& link_tf_inv,
244 const btCollisionObjectWrapper* colObj0Wrap,
246 const btCollisionObjectWrapper* colObj1Wrap,
253 btCollisionWorld::ContactResultCallback&
257 const btCollisionObjectWrapper* obj1Wrap,
258 btCollisionWorld::ContactResultCallback& resultCallback);
260 void addContactPoint(
const btVector3& normalOnBInWorld,
const btVector3& pointInWorld, btScalar depth)
override;
281 const btCollisionObjectWrapper* colObj0Wrap,
284 const btCollisionObjectWrapper* colObj1Wrap,
294 const btCollisionObjectWrapper* colObj0Wrap,
297 const btCollisionObjectWrapper* colObj1Wrap,
299 int index1)
override;
307 const btCollisionObjectWrapper* colObj0Wrap,
310 const btCollisionObjectWrapper* colObj1Wrap,
312 int index1)
override;
320 const btCollisionObjectWrapper* obj1Wrap,
323 void addContactPoint(
const btVector3& normalOnBInWorld,
const btVector3& pointInWorld, btScalar depth)
override;
340 btCollisionDispatcher* dispatcher,
382 bool enabled =
true);
393 btScalar contact_distance,
394 bool verbose =
false);
397 const btCollisionObjectWrapper* colObj0Wrap,
400 const btCollisionObjectWrapper* colObj1Wrap,
402 int index1)
override;
417 const btCollisionObjectWrapper* colObj0Wrap,
420 const btCollisionObjectWrapper* colObj1Wrap,
422 int index1)
override;
436 const std::unique_ptr<btBroadphaseInterface>& broadphase,
437 const std::unique_ptr<btCollisionDispatcher>& dispatcher);
446 const std::unique_ptr<btBroadphaseInterface>& broadphase,
447 const std::unique_ptr<btCollisionDispatcher>& dispatcher);
456 const std::unique_ptr<btBroadphaseInterface>& broadphase,
457 const std::unique_ptr<btCollisionDispatcher>& dispatcher);
468 const std::unique_ptr<btBroadphaseInterface>& broadphase,
469 const std::unique_ptr<btCollisionDispatcher>& dispatcher);
481 const std::unique_ptr<btBroadphaseInterface>& broadphase,
482 const std::unique_ptr<btCollisionDispatcher>& dispatcher);
484 #endif // TESSERACT_COLLISION_BULLET_UTILS_H
AlignedVector< Eigen::Isometry3d > VectorIsometry3d
TesseractCollisionPairCallback & operator=(const TesseractCollisionPairCallback &)=delete
void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3 *vectors, btVector3 *supportVerticesOut, int numVectors) const override
BroadphaseContactResultCallback & result_callback_
std::map< std::string, COW::ConstPtr > Link2ConstCow
TesseractBridgedManifoldResult(const btCollisionObjectWrapper *obj0Wrap, const btCollisionObjectWrapper *obj1Wrap, btCollisionWorld::ContactResultCallback &resultCallback)
btVector3 localGetSupportingVertexWithoutMargin(const btVector3 &v) const override
Tesseracts Collision Forward Declarations.
void setLocalScaling(const btVector3 &scaling) override
btScalar addCastSingleResult(btManifoldPoint &cp, const btCollisionObjectWrapper *colObj0Wrap, int index0, const btCollisionObjectWrapper *colObj1Wrap, int index1, ContactTestData &collisions)
This is a casted collision shape used for checking if an object is collision free between two transfo...
bool needsCollision(btBroadphaseProxy *proxy0) const override
~TesseractCollisionPairCallback() override=default
const btScalar BULLET_EPSILON
void calculateLocalInertia(btScalar, btVector3 &) const override
This class is used to filter broadphase.
CollisionShapesConst m_shapes
The shapes poses information.
void updateBroadphaseAABB(const COW::Ptr &cow, const std::unique_ptr< btBroadphaseInterface > &broadphase, const std::unique_ptr< btCollisionDispatcher > &dispatcher)
Update the Broadphase AABB for the input collision object.
COW::Ptr createCollisionObject(const std::string &name, const int &type_id, const CollisionShapesConst &shapes, const tesseract_common::VectorIsometry3d &shape_poses, bool enabled=true)
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
const bool BULLET_COMPOUND_USE_DYNAMIC_AABB
btScalar getMargin() const override
ContactTestData & collisions_
std::shared_ptr< BulletCollisionShape > createShapePrimitive(const CollisionShapeConstPtr &geom)
Create a bullet collision shape from tesseract collision shape.
COW::Ptr makeCastCollisionObject(const COW::Ptr &cow)
void addCollisionObjectToBroadphase(const COW::Ptr &cow, const std::unique_ptr< btBroadphaseInterface > &broadphase, const std::unique_ptr< btCollisionDispatcher > &dispatcher)
Add the collision object to broadphase.
btCollisionWorld::ContactResultCallback & m_resultCallback
A callback function that is called as part of the broadphase collision checking.
void getAabbSlow(const btTransform &t, btVector3 &aabbMin, btVector3 &aabbMax) const override
btVector3 localGetSupportingVertex(const btVector3 &vec) const override
std::map< std::string, COW::Ptr > Link2Cow
btCollisionDispatcher * dispatcher_
ContactTestData & collisions_
bool needsCollisionCheck(const COW &cow1, const COW &cow2, const std::shared_ptr< const tesseract_common::ContactAllowedValidator > &validator, bool verbose=false)
This is used to check if a collision check is required between the provided two collision objects.
std::string m_name
The name of the collision object.
btScalar addDiscreteSingleResult(btManifoldPoint &cp, const btCollisionObjectWrapper *colObj0Wrap, const btCollisionObjectWrapper *colObj1Wrap, ContactTestData &collisions)
void calculateContinuousData(ContactResult *col, const btCollisionObjectWrapper *cow, const btVector3 &pt_world, const btVector3 &normal_world, const btTransform &link_tf_inv, size_t link_index)
Calculate the continuous contact data for casted collision shape.
void removeCollisionObjectFromBroadphase(const COW::Ptr &cow, const std::unique_ptr< btBroadphaseInterface > &broadphase, const std::unique_ptr< btCollisionDispatcher > &dispatcher)
Remove the collision object from broadphase.
const btScalar BULLET_LENGTH_TOLERANCE
void addContactPoint(const btVector3 &normalOnBInWorld, const btVector3 &pointInWorld, btScalar depth) override
const btScalar BULLET_MARGIN
Eigen::Vector3d convertBtToEigen(const btVector3 &v)
void getPreferredPenetrationDirection(int index, btVector3 &penetrationVector) const override
void GetAverageSupport(const btConvexShape *shape, const btVector3 &localNormal, btScalar &outsupport, btVector3 &outpt)
BroadphaseContactResultCallback & results_callback_
void getAabb(const btTransform &t_w0, btVector3 &aabbMin, btVector3 &aabbMax) const override
getAabb's default implementation is brute force, expected derived classes to implement a fast dedicat...
std::shared_ptr< CollisionObjectWrapper > Ptr
btScalar addSingleResult(btManifoldPoint &cp, const btCollisionObjectWrapper *colObj0Wrap, int partId0, int index0, const btCollisionObjectWrapper *colObj1Wrap, int partId1, int index1) override
bool needBroadphaseCollision(btBroadphaseProxy *proxy0, btBroadphaseProxy *proxy1) const override
This is a tesseract bullet collsion object.
Quaternion< double > Quaterniond
TesseractOverlapFilterCallback(bool verbose=false)
void refreshBroadphaseProxy(const COW::Ptr &cow, const std::unique_ptr< btBroadphaseInterface > &broadphase, const std::unique_ptr< btCollisionDispatcher > &dispatcher)
Refresh the broadphase data structure.
std::vector< std::shared_ptr< BulletCollisionShape > > m_data
This manages the collision shape pointer so they get destroyed.
std::vector< CollisionShapeConstPtr > CollisionShapesConst
const btVector3 & getLocalScaling() const override
This is a static cache mapping tesseract geometry shared pointers to bullet collision shapes to avoid...
const btDispatcherInfo & dispatch_info_
btScalar addSingleResult(btManifoldPoint &cp, const btCollisionObjectWrapper *colObj0Wrap, int partId0, int index0, const btCollisionObjectWrapper *colObj1Wrap, int partId1, int index1) override
bool processOverlap(btBroadphasePair &pair) override
const btScalar BULLET_SUPPORT_FUNC_TOLERANCE
const char * getName() const override
This is a collection of common methods.
CastHullShape(btConvexShape *shape, const btTransform &t01)
CastCollisionCollector(ContactTestData &collisions, COW::Ptr cow, double contact_distance, bool verbose=false)
tesseract_common::VectorIsometry3d m_shape_poses
This is copied directly out of BulletWorld.
std::shared_ptr< const tesseract_geometry::Geometry > CollisionShapeConstPtr
void setMargin(btScalar margin) override
bool needsCollision(btBroadphaseProxy *proxy0) const override
Matrix3< double > Matrix3d
TesseractCollisionPairCallback(const btDispatcherInfo &dispatchInfo, btCollisionDispatcher *dispatcher, BroadphaseContactResultCallback &results_callback)
int getNumPreferredPenetrationDirections() const override
const btScalar BULLET_DEFAULT_CONTACT_DISTANCE
btVector3 convertEigenToBt(const Eigen::Vector3d &v)
void updateCollisionObjectFilters(const std::vector< std::string > &active, const COW::Ptr &cow)
Update a collision objects filters.
DiscreteCollisionCollector(ContactTestData &collisions, COW::Ptr cow, btScalar contact_distance, bool verbose=false)
std::shared_ptr< const CollisionObjectWrapper > ConstPtr
void updateCastTransform(const btTransform &t01)
btTransform getLinkTransformFromCOW(const btCollisionObjectWrapper *cow)
This transversus the parent tree to find the base object and return its world transform This should b...
void addContactPoint(const btVector3 &normalOnBInWorld, const btVector3 &pointInWorld, btScalar depth) override
TesseractBroadphaseBridgedManifoldResult(const btCollisionObjectWrapper *obj0Wrap, const btCollisionObjectWrapper *obj1Wrap, BroadphaseContactResultCallback &result_callback)