Drake

Model is an abstract base class of a collision model. More...
#include <multibody/collision/model.h>
Public Member Functions  
Model ()  
virtual  ~Model () 
Element *  AddElement (std::unique_ptr< Element > element) 
Adds a collision element to this model. More...  
bool  RemoveElement (ElementId id) 
Removes a collision element from this model. More...  
virtual const Element *  FindElement (ElementId id) const 
Gets a readonly pointer to a collision element in this model. More...  
virtual Element *  FindMutableElement (ElementId id) 
Gets a pointer to a mutable collision element in this model. More...  
void  GetTerrainContactPoints (ElementId id0, Eigen::Matrix3Xd *terrain_points) 
virtual void  UpdateModel ()=0 
Updates the collision model. More...  
virtual bool  UpdateElementWorldTransform (ElementId id, const Eigen::Isometry3d &X_WL) 
Updates the stored transformation from a collision element's canonical space to world space (X_WE ), where X_WE = X_WL * X_LE . More...  
virtual bool  ClosestPointsAllToAll (const std::vector< ElementId > &ids_to_check, bool use_margins, std::vector< PointPair > *closest_points)=0 
Computes the points of closest approach between all eligible pairs of collision elements drawn from a specified set of elements. More...  
virtual bool  ComputeMaximumDepthCollisionPoints (bool use_margins, std::vector< PointPair > *closest_points)=0 
Computes the point of closest approach between collision elements that are in contact. More...  
virtual bool  ClosestPointsPairwise (const std::vector< ElementIdPair > &id_pairs, bool use_margins, std::vector< PointPair > *closest_points)=0 
Computes the points of closest approach between specified pairs of collision elements. More...  
virtual void  ClearCachedResults (bool use_margins)=0 
Clears possibly cached results so that a fresh computation can be performed. More...  
virtual void  CollisionDetectFromPoints (const Eigen::Matrix3Xd &points, bool use_margins, std::vector< PointPair > *closest_points)=0 
Computes the closest distance from each point to any surface in the collision model utilizing Bullet's collision detection code. More...  
virtual std::vector< size_t >  CollidingPoints (const std::vector< Eigen::Vector3d > &input_points, double collision_threshold)=0 
Given a vector of points in the world coordinate frame, returns the indices of those points that are within the provided collision_threshold distance of any collision geometry in the model. More...  
virtual bool  CollidingPointsCheckOnly (const std::vector< Eigen::Vector3d > &input_points, double collision_threshold)=0 
Given a vector of points in the world coordinate frame, reports if any of those points lie within a specified distance of any collision geometry in the model. More...  
virtual bool  CollisionRaycast (const Eigen::Matrix3Xd &origin, const Eigen::Matrix3Xd &ray_endpoint, bool use_margins, Eigen::VectorXd *distances, Eigen::Matrix3Xd *normals)=0 
Performs a raycast intersection test (like a LIDAR / laser range finder). More...  
virtual bool  TransformCollisionFrame (const drake::multibody::collision::ElementId &eid, const Eigen::Isometry3d &transform_body_to_joint) 
Modifies a collision element's local transform to be relative to a joint's frame rather than a link's frame. More...  
Does not allow copy, move, or assignment  
Model (const Model &)=delete  
Model &  operator= (const Model &)=delete 
Model (Model &&)=delete  
Model &  operator= (Model &&)=delete 
Protected Member Functions  
virtual void  DoAddElement (const Element &element) 
Allows subclasses to do additional processing on elements added to the collision model. More...  
virtual void  DoRemoveElement (ElementId id) 
Allows subclasses to do additional processing when elements are removed from the collision model. More...  
Protected Attributes  
std::unordered_map< ElementId, std::unique_ptr< Element > >  elements 
Friends  
std::ostream &  operator<< (std::ostream &, const Model &) 
A toString method for this class. More...  
Model is an abstract base class of a collision model.
Child classes of Model implement the actual collision detection logic.

inline 

inlinevirtual 
Adds a collision element to this model.
This operation is frequently referred to as "registering" the collision element. This is the process by which a fullyrealized Drake collision element is fed to a specific drake::multibody::collision::Model implementation. Prior to this registration, the collision model knows nothing about the collision element. After registration, it owns the collision element.
element  The element to add. 
A  runtime_error if there was a problem (e.g., duplicate element id, error configuring collision model, etc.) 

pure virtual 
Clears possibly cached results so that a fresh computation can be performed.
[in]  use_margins  If true , the cache of the model with margins is cleared. If false , the cache of the model without margins is cleared. 
Depending on the implementation, the collision model may cache results on each dispatch. For instance, Bullet uses cached results to warmstart its LCP solvers.
Clearing cached results allows the collision model to perform a fresh computation without any coupling with previous history.
Implemented in BulletModel, FclModel, and UnusableModel.

pure virtual 
Computes the points of closest approach between all eligible pairs of collision elements drawn from a specified set of elements.
ids_to_check  The vector of ElementId for which the alltoall collision detection should be performed  
use_margins  A flag indicating whether or not to use the version of this model with collision margins  
[out]  closest_points  A reference to a vector of PointPair objects that contains the closest point information after this method is called 
Implemented in BulletModel, FclModel, and UnusableModel.

pure virtual 
Computes the points of closest approach between specified pairs of collision elements.
id_pairs  A vector of ElementIdPair specifying which pairs of elements to consider  
use_margins  A flag indicating whether or not to use the version of this model with collision margins  
[out]  closest_points  A reference to a vector of PointPair objects that contains the closest point information after this method is called 
Implemented in BulletModel, UnusableModel, and FclModel.

pure virtual 
Given a vector of points in the world coordinate frame, returns the indices of those points that are within the provided collision_threshold
distance of any collision geometry in the model.
In other words, the index i
is included in the returned vector of indices iff a sphere of radius collision_threshold
, located at input_points[i]
collides with any collision element in the model.
input_points  The list of points to check for collisions against the model. 
collision_threshold  The radius of a control sphere around each point used to check for collisions with the model. 
Implemented in BulletModel, UnusableModel, and FclModel.

pure virtual 
Given a vector of points in the world coordinate frame, reports if any of those points lie within a specified distance of any collision geometry in the model.
In other words, this method tests if any of the spheres of radius collision_threshold
located at input_points[i]
collides with any part of the model. This method returns as soon as any of these spheres collides with the model. Points are not checked against one another but only against the existing model.
input_points  The list of points to check for collisions against the model. 
collision_threshold  The radius of a control sphere around each point used to check for collisions with the model. 
Implemented in BulletModel, UnusableModel, and FclModel.

pure virtual 
Computes the closest distance from each point to any surface in the collision model utilizing Bullet's collision detection code.
points  An ordered list of N points represented columnwise by a 3 x N Matrix.  
use_margins  A flag indicating whether to use the version of this model with collision margins.  
[out]  closest_points  A vector of N PointPair instances such that the i'th instance reports the query result for the i'th input point. 
Implemented in BulletModel, FclModel, and UnusableModel.

pure virtual 
Performs a raycast intersection test (like a LIDAR / laser range finder).
origin  A 3 x N matrix where each column specifies the position of a ray's origin in the world coordinate frame. If origin has dimensions of 3 x 1, the same origin is used for all rays.  
ray_endpoint  A 3 x N matrix where each column specifies a second point on the corresponding ray.  
use_margins  A flag indicating whether or not to use the version of this model with collision margins.  
[out]  distance  The distance to the first collision, or 1 if no collision occurs. 
Implemented in BulletModel, UnusableModel, and FclModel.

pure virtual 
Computes the point of closest approach between collision elements that are in contact.
[in]  use_margins  If true the model uses the representation with margins. If false , the representation without margins is used instead. 
[out]  closest_points  A reference to a vector of PointPair objects that contains the closest point information after this method is called. 
Implemented in BulletModel, FclModel, and UnusableModel.

protectedvirtual 
Allows subclasses to do additional processing on elements added to the collision model.
This is called each time Model::AddElement is called.
element  The element that has been added. 
std::runtime_error  If there was a problem processing the element. 
Reimplemented in BulletModel, and FclModel.

protectedvirtual 
Allows subclasses to do additional processing when elements are removed from the collision model.
This is called by Model::RemoveElement() prior to removing id from elements. The derived class should not do this removal.
id  The id of the element that will be removed. 
Reimplemented in BulletModel, and FclModel.
Gets a readonly pointer to a collision element in this model.
id  An ElementId corresponding to the desired collision element 
id
or nullptr
if no such collision element is present in the model. Gets a pointer to a mutable collision element in this model.
[in]  id  An ElementId corresponding to the desired collision element. 
id
or nullptr
if no such collision element is present in the model. void GetTerrainContactPoints  (  ElementId  id0, 
Eigen::Matrix3Xd *  terrain_points  
) 
Removes a collision element from this model.
id  The id of the element that will be removed. 

virtual 
Modifies a collision element's local transform to be relative to a joint's frame rather than a link's frame.
This is necessary because Drake requires that link frames be defined by their parent joint frames.
eid  The ID of the collision element to update. 
transform_body_to_joint  The transform from the collision element's link's frame to the joint's coordinate frame. 
Updates the stored transformation from a collision element's canonical space to world space (X_WE
), where X_WE = X_WL * X_LE
.
X_LE
is the transform that maps the element to its parent body's space, referred to as "local". X_WL
maps the body/local space to the world.
id  The ID of the element being updated. 
X_WL  The new value for the localtoworld transform. It reflects the current world pose of the parent body in a given context. 
Reimplemented in BulletModel, FclModel, and UnusableModel.

pure virtual 
Updates the collision model.
This method is typically called after changes are made to its collision elements.
Implemented in BulletModel, FclModel, and UnusableModel.

friend 
A toString method for this class.