public class UniversalJoint extends JointBase implements CopyableComponent
roll
about the z axis, followed by a
rotation pitch
about the rotated y axis. All rotations are
counter-clockwise.
The roll
and pitch
angles are available (in degrees) as
properties which can be read and also, under appropriate circumstances, set.
Setting these values causes an adjustment in the positions of one or both
bodies connected to this joint, along with adjacent bodies connected to
them, with preference given to bodies that are not attached to ``ground''.
If this is done during simulation, and particularly if one or both of the
bodies connected to this joint are moving dynamically, the results will be
unpredictable and will likely conflict with the simulation.
Modifier and Type | Class and Description |
---|---|
static class |
UniversalJoint.AxisSet
Specifies whether the roll-pitch-yaw angles of this joint describe
instrinic rotations about the Z-Y-X or X-Y-Z axes.
|
ModelComponent.NavpanelVisibility
Modifier and Type | Field and Description |
---|---|
static double |
DEFAULT_JOINT_RADIUS |
static PropertyList |
myProps |
static int |
PITCH_IDX |
static int |
ROLL_IDX |
DEFAULT_SHAFT_LENGTH, DEFAULT_SHAFT_RADIUS
debug, useOldDerivativeMethod
enforceUniqueCompositeNames, enforceUniqueNames, myNumber, NULL_OBJ, useCompactPathNames
COPY_REFERENCES, REST_POSITION
TG_ARTICULATED, TG_DRAGGER, TG_PRESERVE_ORIENTATION, TG_SIMULATING
TRANSPARENT, TWO_DIMENSIONAL
Constructor and Description |
---|
UniversalJoint()
Creates a
UniversalJoint which is not attached to any bodies. |
UniversalJoint(ConnectableBody bodyA,
ConnectableBody bodyB,
RigidTransform3d TDW)
Creates a
UniversalJoint connecting two connectable bodies,
bodyA and bodyB . |
UniversalJoint(ConnectableBody bodyA,
ConnectableBody bodyB,
RigidTransform3d TCW,
RigidTransform3d TDW)
Creates a
UniversalJoint connecting two connectable bodies,
bodyA and bodyB . |
UniversalJoint(ConnectableBody bodyA,
RigidTransform3d TDW)
Creates a
UniversalJoint connecting a single connectable body,
bodyA , to ground. |
UniversalJoint(RigidBody bodyA,
RigidTransform3d TCA,
RigidBody bodyB,
RigidTransform3d TDB)
Creates a
UniversalJoint connecting two rigid bodies, bodyA and bodyB . |
UniversalJoint(UniversalJoint.AxisSet axes) |
Modifier and Type | Method and Description |
---|---|
PropertyList |
getAllPropertyInfo()
Returns a list giving static information about all properties exported by
this object.
|
UniversalJoint.AxisSet |
getAxes() |
double |
getJointRadius()
Returns a radius used for rendering this joint as a sphere.
|
double |
getMaxPitch()
Queries the upper pitch range limit for this joint, in degrees.
|
double |
getMaxRoll()
Queries the upper roll range limit for this joint, in degrees.
|
double |
getMinPitch()
Queries the lower pitch range limit for this joint, in degrees.
|
double |
getMinRoll()
Queries the lower roll range limit for this joint, in degrees.
|
double |
getPitch()
Queries this joint's pitch value, in degrees.
|
DoubleInterval |
getPitchRange()
Queries the pitch range limits for this joint, in degrees.
|
double |
getRoll()
Queries this joint's roll value, in degrees.
|
double[] |
getRollPitchRad()
Returns the roll and pitch angles for this joint, in radians.
|
DoubleInterval |
getRollRange()
Queries the roll range limits for this joint, in degrees.
|
boolean |
isPitchLocked()
Queries whether the pitch coordinate for this joint is locked.
|
boolean |
isRollLocked()
Queries whether the roll coordinate for this joint is locked.
|
void |
render(Renderer renderer,
int flags)
Render this object using the functionality of the supplied
Renderer . |
void |
setJointRadius(double r)
Sets a radius used for rendering this joint as a sphere.
|
void |
setMaxPitch(double max)
Sets the upper pitch range limit for this joint, in degrees.
|
void |
setMaxRoll(double max)
Sets the upper roll range limit for this joint, in degrees.
|
void |
setMinPitch(double min)
Sets the lower pitch range limit for this joint, in degrees.
|
void |
setMinRoll(double min)
Sets the lower roll range limit for this joint, in degrees.
|
void |
setPitch(double pitch)
Sets this joint's pitch value, in degrees.
|
void |
setPitchLocked(boolean locked)
Set whether the pitch coordinate for this joint is locked.
|
void |
setPitchRange(double min,
double max)
Sets the pitch range limits for this joint, in degrees.
|
void |
setPitchRange(DoubleInterval range)
Sets the pitch range limits for this joint, in degrees.
|
void |
setRoll(double roll)
Sets this joint's roll value, in degrees.
|
void |
setRollLocked(boolean locked)
Set whether the roll coordinate for this joint is locked.
|
void |
setRollPitchRad(double[] angs)
Sets the roll and pitch angles for this joint, in radians.
|
void |
setRollRange(double min,
double max)
Sets the roll range limits for this joint, in degrees.
|
void |
setRollRange(DoubleInterval range)
Sets the roll range limits for this joint, in degrees.
|
void |
updateBounds(Vector3d pmin,
Vector3d pmax)
Update the minimum and maximum points for this object.
|
addCoordinateSolveBlocks, addCoordinateVelJacobian, applyCoordinateForce, coordinatesToTCD, getCoordinate, getCoordinateDeg, getCoordinateIndex, getCoordinateMotionType, getCoordinateName, getCoordinateRange, getCoordinateRangeDeg, getCoordinates, getCoordinateSpeed, getCoordinateValue, getMaxCoordinate, getMaxCoordinateDeg, getMinCoordinate, getMinCoordinateDeg, getPosition, getShaftLength, getShaftRadius, getStoredCoordinates, getStoredTCD, getStoredTCD, isCoordinateLocked, numCoordinates, setCoordinate, setCoordinateDeg, setCoordinateLocked, setCoordinateName, setCoordinateRange, setCoordinateRangeDeg, setCoordinates, setShaftLength, setShaftRadius
addBilateralConstraints, addFrictionConstraints, addMasterBlocks, addTransformableDependencies, addUnilateralConstraints, computeConstraintMatrixA, computeConstraintMatrixB, connectToHierarchy, copy, disconnectFromHierarchy, findAttachedBodies, getActivation, getAxisLength, getBilateralForceInA, getBilateralForceInA, getBilateralForceInB, getBilateralForceInB, getBilateralForceInC, getBilateralForceInC, getBilateralForces, getBilateralInfo, getBilateralSizes, getBodyA, getBodyB, getCompliance, getConstrainedComponents, getConstraint, getConstraintFlags, getConstraintForce, getCopyReferences, getCoupling, getCurrentTCD, getCurrentTCW, getCurrentTCW, getCurrentTDW, getCurrentTDW, getDamping, getDrawFrameC, getDrawFrameD, getFrameAttachmentA, getFrameAttachmentB, getFrictionForces, getFrictionState, getHardReferences, getLinearCompliance, getPenetrationTol, getPenetrationTolMode, getPose, getRenderFrame, getRotaryCompliance, getRotaryLimitTol, getRotaryLimitTolMode, getState, getStateVersion, getTransformDGeometryOnly, getTransformPositionOnly, getUnilateralForceInA, getUnilateralForceInA, getUnilateralForceInB, getUnilateralForceInB, getUnilateralForceInC, getUnilateralForceInC, getUnilateralForces, getUnilateralInfo, getUnilateralSizes, getUnilateralState, hasState, isActive, isConnectedToBodies, isDuplicatable, isEnabled, isNotAttached, maxFrictionConstraintSets, numBilateralConstraints, numConstraints, numEngagedUnilateralConstraints, numUnilateralConstraints, prerender, printConnectedBodies, printConstraintInfo, scaleDistance, scaleMass, setAlwaysAdjustBodyA, setAxisLength, setBilateralForces, setBodies, setBodies, setBodies, setBodies, setCompliance, setCurrentTCW, setCurrentTDW, setDamping, setDrawFrameC, setDrawFrameD, setEnabled, setFrictionForces, setFrictionState, setLinearCompliance, setPenetrationTol, setPenetrationTolMode, setRotaryCompliance, setRotaryLimitTol, setRotaryLimitTolMode, setState, setTransformDGeometryOnly, setTransformPositionOnly, setUnilateralForces, setUnilateralState, transformGeometry, transformGeometry, updateAttachments, updateConstraints, zeroForces
createRenderProps, defaultRenderPropsAreNull, getRenderHints, getRenderProps, getSelection, isSelectable, isVisible, numSelectionQueriesNeeded, setRenderProps, setVisible, updateRenderProps
checkFlag, checkName, checkNameUniqueness, clearFlag, clone, createTempFlag, getChildren, getGrandParent, getName, getNameRange, getNavpanelVisibility, getNavpanelVisibility, getNumber, getParent, getProperty, getSoftReferences, hasChildren, isFixed, isMarked, isScanning, isSelected, isWritable, makeValidName, makeValidName, notifyParentOfChange, postscan, printReferences, recursivelyContained, recursivelyContains, removeTempFlag, scan, setFixed, setFlag, setMarked, setName, setNavpanelVisibility, setNavpanelVisibility, setNumber, setParent, setScanning, setSelected, setWritable, updateReferences, write
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
copy, getCopyReferences, isDuplicatable
connectToHierarchy, disconnectFromHierarchy, getHardReferences, getName, getNavpanelVisibility, getNumber, getParent, getSoftReferences, hasState, isFixed, isMarked, isSelected, notifyParentOfChange, scan, setFixed, setMarked, setName, setNumber, setParent, setSelected, setWritable, updateReferences
getProperty
getChildren, hasChildren
postscan
isWritable, write
transformPriority
advanceState, getAuxVarDerivative, getAuxVarState, numAuxVars, requiresAdvance, setAuxVarState
public static final int ROLL_IDX
public static final int PITCH_IDX
public static final double DEFAULT_JOINT_RADIUS
public static PropertyList myProps
public UniversalJoint()
UniversalJoint
which is not attached to any bodies. It
can subsequently be connected using one of the setBodies
methods.public UniversalJoint(UniversalJoint.AxisSet axes)
public UniversalJoint(RigidBody bodyA, RigidTransform3d TCA, RigidBody bodyB, RigidTransform3d TDB)
UniversalJoint
connecting two rigid bodies, bodyA
and bodyB
. If A and B describe the coordinate frames of
bodyA
and bodyB
, then TCA
and TDB
give
the (fixed) transforms from the joint's C and D frames to A and B,
respectively. Since C and D are specified independently, the joint
transform TCD may not necessarily be initialized to the identity.
Specifying bodyB
as null
will cause bodyA
to
be connected to ground, with TDB
then being the same as TDW
.
bodyA
- rigid body ATCA
- transform from joint frame C to body frame AbodyB
- rigid body B (or null
)TDB
- transform from joint frame D to body frame Bpublic UniversalJoint(ConnectableBody bodyA, ConnectableBody bodyB, RigidTransform3d TCW, RigidTransform3d TDW)
UniversalJoint
connecting two connectable bodies,
bodyA
and bodyB
. The joint frames C and D are located
independently with respect to world coordinates by TCW
and TDW
.
Specifying bodyB
as null
will cause bodyA
to
be connected to ground.
bodyA
- body AbodyB
- body B (or null
)TCW
- initial transform from joint frame C to worldTDW
- initial transform from joint frame D to worldpublic UniversalJoint(ConnectableBody bodyA, ConnectableBody bodyB, RigidTransform3d TDW)
UniversalJoint
connecting two connectable bodies,
bodyA
and bodyB
. The joint frames D and C are assumed to
be initially coincident, so that roll
and pitch
will have
initial values of 0. D (and C) is located by TDW
, which gives the
transform from D to world coordinates.bodyA
- body AbodyB
- body BTDW
- initial transform from joint frames D and C to worldpublic UniversalJoint(ConnectableBody bodyA, RigidTransform3d TDW)
UniversalJoint
connecting a single connectable body,
bodyA
, to ground. The joint frames D and C are assumed to be
initially coincident, so that roll
and pitch
will have
initial values of 0. D (and C) is located by TDW
, which gives the
transform from D to world coordinates.bodyA
- body ATDW
- initial transform from joint frames D and C to worldpublic PropertyList getAllPropertyInfo()
HasProperties
getAllPropertyInfo
in interface HasProperties
getAllPropertyInfo
in class JointBase
public UniversalJoint.AxisSet getAxes()
public double[] getRollPitchRad()
setRoll(double)
and setPitch(double)
for the definition of these angles.public void setRollPitchRad(double[] angs)
setRoll(double)
and setPitch(double)
for the definition of these angles and
what happens when they are set.angs
- new roll and pitch angles, in an array of length 2public double getRoll()
setRoll(double)
for
more details.public void setRoll(double roll)
roll
- new roll valuepublic DoubleInterval getRollRange()
setRollRange(DoubleInterval)
for more details.public double getMinRoll()
public double getMaxRoll()
public void setRollRange(DoubleInterval range)
[-inf, inf]
, which implies no limits. If roll travels beyond
these limits during dynamic simulation, unilateral constraints will be
activated to enforce them. Setting the lower limit to -inf
or the
upper limit to inf
removes the lower or upper limit,
respectively. Specifying range
as null
will set the range
to (-inf, inf)
.range
- roll range limits for this jointpublic void setRollRange(double min, double max)
setRollRange(DoubleInterval)
.min
- minimum roll valuemax
- maximum roll valuepublic void setMaxRoll(double max)
inf
removes the upper limit.max
- upper roll range limitpublic void setMinRoll(double min)
-inf
removes the lower limit.min
- lower roll range limitpublic boolean isRollLocked()
true
if roll is lockedpublic void setRollLocked(boolean locked)
locked
- if true
, locks rollpublic double getPitch()
setPitch(double)
for
more details.public void setPitch(double pitch)
pitch
- new pitch valuepublic DoubleInterval getPitchRange()
setPitchRange(DoubleInterval)
for more details.public double getMinPitch()
public double getMaxPitch()
public void setPitchRange(DoubleInterval range)
[-inf, inf]
, which implies no limits. If pitch travels beyond
these limits during dynamic simulation, unilateral constraints will be
activated to enforce them. Setting the lower limit to -inf
or the
upper limit to inf
removes the lower or upper limit,
respectively. Specifying range
as null
will set the range
to (-inf, inf)
.range
- pitch range limits for this jointpublic void setPitchRange(double min, double max)
setPitchRange(DoubleInterval)
.min
- minimum pitch valuemax
- maximum pitch valuepublic void setMaxPitch(double max)
inf
removes the upper limit.max
- upper pitch range limitpublic void setMinPitch(double min)
-inf
removes the lower limit.min
- lower pitch range limitpublic boolean isPitchLocked()
true
if pitch is lockedpublic void setPitchLocked(boolean locked)
locked
- if true
, locks pitchpublic double getJointRadius()
getJointRadius()
for details.public void setJointRadius(double r)
r
- joint rendering radiuspublic void updateBounds(Vector3d pmin, Vector3d pmax)
IsRenderable
updateBounds
in interface IsRenderable
updateBounds
in class BodyConnector
pmin
- minimum pointpmax
- maximum pointpublic void render(Renderer renderer, int flags)
IsRenderable
Renderer
.render
in interface IsRenderable
render
in class BodyConnector
renderer
- provides the functionality used to perform the rendering.flags
- flags that may be used to control different
aspects of the rendering. Flags are defined in Renderer
and currently include
Renderer.HIGHLIGHT
and
Renderer.SORT_FACES
.