hpp-constraints  4.9.1
Definition of basic geometric constraints for motion planning
hpp::constraints::ConvexShapeContact Class Reference

#include <hpp/constraints/convex-shape-contact.hh>

Inheritance diagram for hpp::constraints::ConvexShapeContact:
Collaboration diagram for hpp::constraints::ConvexShapeContact:

Classes

struct  ForceData
 

Public Types

enum  ContactType { POINT_ON_PLANE, LINE_ON_PLANE, PLANE_ON_PLANE }
 The type of contact between each pair (object shape, floor shape). More...
 

Public Member Functions

 ConvexShapeContact (const std::string &name, const DevicePtr_t &robot)
 
void addObjectTriangle (const fcl::TriangleP &t, const JointPtr_t &joint) HPP_CONSTRAINTS_DEPRECATED
 
void addFloorTriangle (const fcl::TriangleP &t, const JointPtr_t &joint) HPP_CONSTRAINTS_DEPRECATED
 
void addObject (const ConvexShape &t)
 Add a ConvexShape as an object. More...
 
void addFloor (const ConvexShape &t)
 
void setNormalMargin (const value_type &margin)
 
std::vector< ForceDatacomputeContactPoints (ConfigurationIn_t q, const value_type &normalMargin) const
 Compute the contact points. More...
 
std::ostream & print (std::ostream &o) const
 Display object in a stream. More...
 
- Public Member Functions inherited from hpp::constraints::DifferentiableFunction
virtual ~DifferentiableFunction ()
 
LiegroupElement operator() (vectorIn_t argument) const
 
void value (LiegroupElementRef result, vectorIn_t argument) const
 
void jacobian (matrixOut_t jacobian, vectorIn_t argument) const
 
const ArrayXbactiveParameters () const
 
const ArrayXbactiveDerivativeParameters () const
 
size_type inputSize () const
 Get dimension of input vector. More...
 
size_type inputDerivativeSize () const
 
LiegroupSpacePtr_t outputSpace () const
 Get output space. More...
 
size_type outputSize () const
 Get dimension of output vector. More...
 
size_type outputDerivativeSize () const
 Get dimension of output derivative vector. More...
 
const std::string & name () const
 Get function name. More...
 
std::string context () const
 
void context (const std::string &c)
 
void finiteDifferenceForward (matrixOut_t jacobian, vectorIn_t arg, DevicePtr_t robot=DevicePtr_t(), value_type eps=std::sqrt(Eigen::NumTraits< value_type >::epsilon())) const
 
void finiteDifferenceCentral (matrixOut_t jacobian, vectorIn_t arg, DevicePtr_t robot=DevicePtr_t(), value_type eps=std::sqrt(Eigen::NumTraits< value_type >::epsilon())) const
 

Static Public Member Functions

static ConvexShapeContactPtr_t create (const std::string &name, const DevicePtr_t &robot)
 
static ConvexShapeContactPtr_t create (const DevicePtr_t &robot)
 

Friends

class ConvexShapeContactComplement
 

Additional Inherited Members

- Protected Member Functions inherited from hpp::constraints::DifferentiableFunction
 DifferentiableFunction (size_type sizeInput, size_type sizeInputDerivative, size_type sizeOutput, std::string name=std::string())
 Concrete class constructor should call this constructor. More...
 
 DifferentiableFunction (size_type sizeInput, size_type sizeInputDerivative, const LiegroupSpacePtr_t &outputSpace, std::string name=std::string())
 Concrete class constructor should call this constructor. More...
 
virtual void impl_compute (LiegroupElementRef result, vectorIn_t argument) const =0
 User implementation of function evaluation. More...
 
virtual void impl_jacobian (matrixOut_t jacobian, vectorIn_t arg) const =0
 
- Protected Attributes inherited from hpp::constraints::DifferentiableFunction
size_type inputSize_
 Dimension of input vector. More...
 
size_type inputDerivativeSize_
 Dimension of input derivative. More...
 
LiegroupSpacePtr_t outputSpace_
 Dimension of output vector. More...
 
ArrayXb activeParameters_
 
ArrayXb activeDerivativeParameters_
 

Detailed Description

The function returns a relative transformation between the two "closest" convex shapes it contains.

Two set of convex shapes can be given to this class:

  • a set of object contact surfaces, \( (o_i)_{i \in I } \), which can be in contact with the environment,
  • a set of floor contact surfaces, \( (f_j)_{j \in J } \), which can support objects.

The distance \( d_{i,j} = d (o_i, f_j) \) between object surface \(o_i\) and environment surface \( f_j \) is defined by:

\begin{equation*} d(i,j)^2 = \left\lbrace \begin{array}{cl} d_{\parallel}^2 + d_{\perp}^2 &, \text{ if } d_{\parallel} > 0 \\ d_{\perp}^2 &, \text{ otherwise} \end{array} \right. \end{equation*}

where

  • \(P (C_{o_i}, f_j)\) is the projection of the center \(o_i\) onto the plane containing \( f_j \),
  • \(\textbf{n}_{f_j}\) is the normal of \( f_j \),
  • \(d_{\parallel} = d(f_j, P (C_{o_i}, f_j))\) is the distance returned by ConvexShape::distance,
  • \(d_{\perp} = \textbf{n}_{f_j}.C_{f_j}P(C_{o_i}, f_j)\) is the distance along the normal of \( f_j \),

The function first selects the pair \((o_i,f_j)\) with shortest distance. \(o_i\) is inside \(f_j\) if \(d(i,j) < 0\). It returns a value that depends on the contact types:

Contact type Inside Outside
ConvexShapeContact::POINT_ON_PLANE \((x+m,0,0,0,0)\) \((x+m,y,z,0,0)\)
ConvexShapeContact::LINE_ON_PLANE (Unsupported) \((x+m,0,0,0,rz)\) \((x+m,y,z,0,rz)\)
ConvexShapeContact::PLANE_ON_PLANE \((x+m,0,0,ry,rz)\) \((x+m,y,z,ry,rz)\)

where

  • \(m\) is the normal margin (used to avoid collisions),
  • \(x,y,z,rx,ry,rz\) represents the output of the RelativeTransformation between the element of the pair.
See also
ConvexShapeContactComplement

Member Enumeration Documentation

◆ ContactType

The type of contact between each pair (object shape, floor shape).

Enumerator
POINT_ON_PLANE 

The object shape is a single point,.

LINE_ON_PLANE 

The object shape degenerates to a line,.

PLANE_ON_PLANE 

The object shape is included in a plane and none of the above case apply.

Constructor & Destructor Documentation

◆ ConvexShapeContact()

hpp::constraints::ConvexShapeContact::ConvexShapeContact ( const std::string &  name,
const DevicePtr_t robot 
)

Constructor

Parameters
namename of the ConvexShapeContact constraint,
robotthe robot the constraints is applied to,

Member Function Documentation

◆ addFloor()

void hpp::constraints::ConvexShapeContact::addFloor ( const ConvexShape t)

Add a ConvexShape as a floor.

The convex shape will be reverted using ConvexShape::reverse so that the normal points inside the floor object.

◆ addFloorTriangle()

void hpp::constraints::ConvexShapeContact::addFloorTriangle ( const fcl::TriangleP t,
const JointPtr_t joint 
)

Use addFloor(const ConvexShape&) instead. Add a triangle to the floor contact surface

Parameters
ttriangle, joint Joint to which the triangle is attached if the contact surface belongs to a robot.

◆ addObject()

void hpp::constraints::ConvexShapeContact::addObject ( const ConvexShape t)

Add a ConvexShape as an object.

◆ addObjectTriangle()

void hpp::constraints::ConvexShapeContact::addObjectTriangle ( const fcl::TriangleP t,
const JointPtr_t joint 
)

Use addObject(const ConvexShape&) instead. Add a triangle to the object contact surface

Parameters
ttriangle,
jointJoint to which the triangle is attached.

◆ computeContactPoints()

std::vector<ForceData> hpp::constraints::ConvexShapeContact::computeContactPoints ( ConfigurationIn_t  q,
const value_type normalMargin 
) const

Compute the contact points.

◆ create() [1/2]

static ConvexShapeContactPtr_t hpp::constraints::ConvexShapeContact::create ( const std::string &  name,
const DevicePtr_t robot 
)
static

◆ create() [2/2]

static ConvexShapeContactPtr_t hpp::constraints::ConvexShapeContact::create ( const DevicePtr_t robot)
static

◆ print()

std::ostream& hpp::constraints::ConvexShapeContact::print ( std::ostream &  o) const
virtual

Display object in a stream.

Reimplemented from hpp::constraints::DifferentiableFunction.

◆ setNormalMargin()

void hpp::constraints::ConvexShapeContact::setNormalMargin ( const value_type margin)

Set the normal margin, i.e. the desired distance between matching object and nd floor shapes. Default to 0

Friends And Related Function Documentation

◆ ConvexShapeContactComplement

friend class ConvexShapeContactComplement
friend

The documentation for this class was generated from the following file: