From a84ec51c2fddcc09eeb0ed26b31f8de669c1ce56 Mon Sep 17 00:00:00 2001 From: Jose Tomas Lorente Date: Fri, 19 Mar 2021 16:58:02 -0300 Subject: [PATCH] [BULLET] Making GetContactsFromLastStepFeature optional in Collision Features (#690) * GetContactsFromLastStepFeature made optional Signed-off-by: Tomas Lorente Co-authored-by: Addisu Z. Taddese --- src/systems/physics/Physics.cc | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/systems/physics/Physics.cc b/src/systems/physics/Physics.cc index 41a10b6969..5a3daf3357 100644 --- a/src/systems/physics/Physics.cc +++ b/src/systems/physics/Physics.cc @@ -302,16 +302,20 @@ class ignition::gazebo::systems::PhysicsPrivate /// \brief Feature list to handle collisions. public: struct CollisionFeatureList : ignition::physics::FeatureList< MinimumFeatureList, - ignition::physics::GetContactsFromLastStepFeature, ignition::physics::sdf::ConstructSdfCollision>{}; + /// \brief Feature list to handle contacts information. + public: struct ContactFeatureList : ignition::physics::FeatureList< + CollisionFeatureList, + ignition::physics::GetContactsFromLastStepFeature>{}; + /// \brief Collision type with collision features. public: using ShapePtrType = ignition::physics::ShapePtr< ignition::physics::FeaturePolicy3d, CollisionFeatureList>; /// \brief World type with just the minimum features. Non-pointer. public: using WorldShapeType = ignition::physics::World< - ignition::physics::FeaturePolicy3d, CollisionFeatureList>; + ignition::physics::FeaturePolicy3d, ContactFeatureList>; ////////////////////////////////////////////////// // Collision filtering with bitmasks @@ -373,6 +377,7 @@ class ignition::gazebo::systems::PhysicsPrivate physics::World, MinimumFeatureList, CollisionFeatureList, + ContactFeatureList, NestedModelFeatureList>; /// \brief A map between world entity ids in the ECM to World Entities in @@ -420,6 +425,7 @@ class ignition::gazebo::systems::PhysicsPrivate public: using EntityCollisionMap = EntityFeatureMap3d< physics::Shape, CollisionFeatureList, + ContactFeatureList, CollisionMaskFeatureList, FrictionPyramidSlipComplianceFeatureList >; @@ -2157,14 +2163,14 @@ void PhysicsPrivate::UpdateCollisions(EntityComponentManager &_ecm) } auto worldCollisionFeature = - this->entityWorldMap.EntityCast(worldEntity); + this->entityWorldMap.EntityCast(worldEntity); if (!worldCollisionFeature) { static bool informed{false}; if (!informed) { igndbg << "Attempting process contacts, but the physics " - << "engine doesn't support collision features. " + << "engine doesn't support contact features. " << "Contacts won't be computed." << std::endl; informed = true; @@ -2191,8 +2197,10 @@ void PhysicsPrivate::UpdateCollisions(EntityComponentManager &_ecm) for (const auto &contactComposite : allContacts) { const auto &contact = contactComposite.Get(); - auto coll1Entity = this->entityCollisionMap.Get(contact.collision1); - auto coll2Entity = this->entityCollisionMap.Get(contact.collision2); + auto coll1Entity = + this->entityCollisionMap.Get(ShapePtrType(contact.collision1)); + auto coll2Entity = + this->entityCollisionMap.Get(ShapePtrType(contact.collision2)); if (coll1Entity != kNullEntity && coll2Entity != kNullEntity)