maspack.spatialmotion
Class ParameterizedCoupling

java.lang.Object
  extended by maspack.spatialmotion.RigidBodyCoupling
      extended by maspack.spatialmotion.ParameterizedCoupling

public class ParameterizedCoupling
extends RigidBodyCoupling

Experimental coupling based on projected 2D curves


Nested Class Summary
static class ParameterizedCoupling.LimitType
           
 
Field Summary
static double EPSILON
           
 
Fields inherited from class maspack.spatialmotion.RigidBodyCoupling
BILATERAL, LINEAR, ROTARY
 
Constructor Summary
ParameterizedCoupling(ParameterizedCoupling.LimitType type)
           
 
Method Summary
 void getConstraintInfo(maspack.spatialmotion.RigidBodyCoupling.ConstraintInfo[] info, RigidTransform3d XCD, RigidTransform3d XFD, RigidTransform3d XERR, boolean setEngaged)
          Computes the constraint frame C and the associated constraint information.
 ProjectedCurve3D getLimitCurve()
           
 ParameterizedCoupling.LimitType getLimitType()
           
 double getRoll(RigidTransform3d XCD)
           
 void getRollRange(double[] minmax)
          Gets the minimum and maximum values for the coupling's roll angle (in radians).
 boolean hasRestrictedRollRange()
          Returns true if this coupling has a range restriction;
 void initializeConstraintInfo(maspack.spatialmotion.RigidBodyCoupling.ConstraintInfo[] info)
           
 int maxUnilaterals()
          Returns the maximum number of unilateral constraints associated with this coupling.
 int numBilaterals()
          Returns the number of bilateral constraints associated with this coupling.
 void projectToConstraint(RigidTransform3d XCD, RigidTransform3d XFD)
          Computes the frame C on the constraint surface which is closest to a given frame F.
 void setLimitCurve(ProjectedCurve3D curve)
           
 void setRoll(RigidTransform3d XCD, double roll)
           
 void setRollRange(double min, double max)
          Sets the minimum and maximum values for the coupling's roll angle (in radians).
 
Methods inherited from class maspack.spatialmotion.RigidBodyCoupling
findNearestAngle, getAuxState, getBilateralConstraints, getBilateralForceF, getBilateralImpulses, getBreakAccel, getBreakSpeed, getCompliance, getConstraint, getConstraintInfo, getContactDistance, getDamping, getInitialAuxState, getUnilateralConstraints, getUnilateralForceF, getUnilateralImpulses, maxConstraints, numUnilaterals, scaleDistance, setAuxState, setBilateralImpulses, setBreakAccel, setBreakSpeed, setCompliance, setContactDistance, setDamping, setDistanceAndZeroDerivative, setDistancesAndZeroDerivatives, setUnilateralImpulses, skipAuxState, transformGeometry, updateBodyStates, updateConstraintsFromC, updateUnilateralConstraints, zeroImpulses
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

EPSILON

public static double EPSILON
Constructor Detail

ParameterizedCoupling

public ParameterizedCoupling(ParameterizedCoupling.LimitType type)
Method Detail

getLimitType

public ParameterizedCoupling.LimitType getLimitType()

setRollRange

public void setRollRange(double min,
                         double max)
Sets the minimum and maximum values for the coupling's roll angle (in radians). These only have an effect if the current range type is ParameterizedCoupling.LimitType.ROLL or ParameterizedCoupling.LimitType.ROLL_CURVE.

Parameters:
min - Minimum roll angle
max - Maximum roll angle

getRollRange

public void getRollRange(double[] minmax)
Gets the minimum and maximum values for the coupling's roll angle (in radians).

Parameters:
minmax - used to return the minimum and maximum values
See Also:
setRollRange(double, double)

setLimitCurve

public void setLimitCurve(ProjectedCurve3D curve)

getLimitCurve

public ProjectedCurve3D getLimitCurve()

maxUnilaterals

public int maxUnilaterals()
Description copied from class: RigidBodyCoupling
Returns the maximum number of unilateral constraints associated with this coupling.

Specified by:
maxUnilaterals in class RigidBodyCoupling
Returns:
maximum number of unilateral constraints

numBilaterals

public int numBilaterals()
Description copied from class: RigidBodyCoupling
Returns the number of bilateral constraints associated with this coupling.

Specified by:
numBilaterals in class RigidBodyCoupling
Returns:
number of bilateral constraints

projectToConstraint

public void projectToConstraint(RigidTransform3d XCD,
                                RigidTransform3d XFD)
Description copied from class: RigidBodyCoupling
Computes the frame C on the constraint surface which is closest to a given frame F. The input consists of the transform from F to D.

Specified by:
projectToConstraint in class RigidBodyCoupling
Parameters:
XCD - returns the transform from C to D
XFD - transform from frame F to D

setRoll

public void setRoll(RigidTransform3d XCD,
                    double roll)

initializeConstraintInfo

public void initializeConstraintInfo(maspack.spatialmotion.RigidBodyCoupling.ConstraintInfo[] info)
Specified by:
initializeConstraintInfo in class RigidBodyCoupling

getRoll

public double getRoll(RigidTransform3d XCD)

hasRestrictedRollRange

public boolean hasRestrictedRollRange()
Returns true if this coupling has a range restriction;


getConstraintInfo

public void getConstraintInfo(maspack.spatialmotion.RigidBodyCoupling.ConstraintInfo[] info,
                              RigidTransform3d XCD,
                              RigidTransform3d XFD,
                              RigidTransform3d XERR,
                              boolean setEngaged)
Description copied from class: RigidBodyCoupling
Computes the constraint frame C and the associated constraint information. C is determined by projecting F onto the constraint surface.

Information for each constraint wrench is returned through an array of ConstraintInfo objects supplied by the argument info. This array should have a fixed number of elements equal to the number of bilateral constraints plus the maximum number of unilateral constraints. Bilateral constraints appear first, followed by the unilateral constraints. Constraint wrenches and their derivatives (with respect to frame C) are set within the fields wrenchC and dotWrenchC, repsectively. Distances to set within the distance; each of these should be the dot product of the wrench with the linearization of the constraint error XFC. For computing wrench derivatives, this method may use myVelBA, which gives the current velocity of B with repsect to A, in coordinate frame D. Information only needs to be returned for constraints which are potentially active, or engaged. Constraints which are engaged have their ConstraintInfo.engaged field set to a non-zero value. Bilateral constraints are always engaged, and their ConstraintInfo.engaged field is automatically set to 1 by the system. For unilateral constraints, the determination of whether or not the constraint is engaged, and the setting of the engaged field, should be done by this method if the argument setEngaged is true. Otherwise, if setEngaged is false, the method should take the engaged settings as given. Constraints which are engaged are those which are returned by the calls getBilateralConstraints or getUnilateralConstraints.

Specified by:
getConstraintInfo in class RigidBodyCoupling
Parameters:
info - used to return information for each possible constraint wrenches
XCD - returns the transform from C to D
XFD - transform from operation frame F to D
XERR - TODO
setEngaged - if true, this method should determine if the constraint is engaged.