artisynth.core.mechmodels
Class Muscle

java.lang.Object
  extended by artisynth.core.modelbase.ModelComponentBase
      extended by artisynth.core.mechmodels.Spring
          extended by artisynth.core.mechmodels.PointSpringBase
              extended by artisynth.core.mechmodels.AxialSpring
                  extended by artisynth.core.mechmodels.Muscle
All Implemented Interfaces:
ExcitationComponent, ForceComponent, ForceEffector, RequiresInitialize, CopyableComponent, ModelComponent, RenderableComponent, ScalableUnits, java.lang.Cloneable, HasProperties, HierarchyNode, GLRenderable, GLSelectable, HasRenderProps, Renderable, RenderableLine, Scannable

public class Muscle
extends AxialSpring
implements ExcitationComponent


Nested Class Summary
 
Nested classes/interfaces inherited from interface artisynth.core.mechmodels.ExcitationComponent
ExcitationComponent.CombinationRule
 
Nested classes/interfaces inherited from interface artisynth.core.modelbase.ModelComponent
ModelComponent.NavpanelVisibility
 
Field Summary
static PropertyList myProps
           
 
Fields inherited from class artisynth.core.mechmodels.PointSpringBase
myIgnoreCoriolisInJacobian, useMaterial
 
Fields inherited from class artisynth.core.modelbase.ModelComponentBase
enforceUniqueCompositeNames, enforceUniqueNames, myNumber, NULL_OBJ, useCompactPathNames
 
Fields inherited from interface maspack.render.GLRenderable
TRANSLUCENT, TWO_DIMENSIONAL
 
Fields inherited from interface artisynth.core.modelbase.CopyableComponent
COPY_REFERENCES
 
Constructor Summary
Muscle()
           
Muscle(Point p1, Point p2)
           
Muscle(java.lang.String name)
           
 
Method Summary
 void addExcitationSource(ExcitationComponent ex)
          Adds a new excitation source to this Excitable, with an assumed gain of 1.
 void addExcitationSource(ExcitationComponent ex, double gain)
          Adds a new excitation source to this Excitable with a specified gain.
 double computeDFdl(double l, double ldot)
          Computes the derivative of spring force magnitude (acting along the unit vector from the first to the second particle) with respect to spring length.
 double computeDFdldot(double l, double ldot)
          Computes the derivative of spring force magnitude (acting along the unit vector from the first to the second particle)with respect to the time derivative of spring length.
 double computeF(double l, double ldot)
          Computes the force magnitude acting along the unit vector from the first to the second particle.
 double computePassiveF(double l, double ldot)
          Computes the force magnitude acting along the unit vector from the first to the second particle with zero excitation.
 void computePassiveForce(Vector3d f)
           
 PropertyList getAllPropertyInfo()
          Returns a list giving static information about all properties exported by this object.
 ExcitationComponent.CombinationRule getCombinationRule()
          Return the combination rule for excitations.
 double getDefaultActivationWeight()
          Returns the default weight that should be used when this excitation component is being used for inverse actuation control.
 double getExcitation()
          Returns the primary excitation for this component.
 java.awt.Color getExcitationColor()
           
 PropertyMode getExcitationColorMode()
           
 double getExcitationGain(ExcitationComponent ex)
          Gets the gain for an excitation source in this component.
 Vector3d getForce()
           
 double getForceNorm()
           
 int getJacobianType()
          Returns a code indicating the matrix type that results when the Jacobian terms of this force effector are added to the solve matrix.
 double getMaxColoredExcitation()
           
 PropertyMode getMaxColoredExcitationMode()
           
 double getNetExcitation()
          Returns the net excitation for this Excitable.
 Vector3d getPassiveForce()
           
 double getPassiveForceNorm()
           
 float[] getRenderColor()
          Returns the rgb components (in the range [0,1]) of a color that overrides the default color indicated by the render props.
 void getSoftReferences(java.util.List<ModelComponent> refs)
          Appends all soft references for this component to a list.
 void initialize(double t)
          Called from within the model's initialize() method.
 boolean isEnabled()
           
 void prerender(RenderList list)
          Prepare for rendering, and potentially add itself to a list to be drawn by a GLRenderer.
 void printMuscleDirection()
           
 boolean removeExcitationSource(ExcitationComponent ex)
          Removes an excitation source from this Excitable.
 void render(GLRenderer renderer, int flags)
          Render this object using Open GL via the JOGL.
 void resetLengthProps()
          sets the opt length to current muscle length and max length with the original ratio of opt to max length
 void scaleDistance(double s)
          Scales all distance coordinates.
 void scaleMass(double s)
          Scales all mass units.
 void setCombinationRule(ExcitationComponent.CombinationRule rule)
          Sets the rule for combining excitations.
 void setConstantMuscleMaterial(double maxF)
           
 void setConstantMuscleMaterial(double maxF, double forceScaling)
           
 void setEnabled(boolean enabled)
           
 void setExcitation(double a)
          Sets the primary excitation for this component.
 void setExcitationColor(java.awt.Color color)
           
 void setExcitationColorMode(PropertyMode mode)
           
 boolean setExcitationGain(ExcitationComponent ex, double gain)
          Sets the gain for an excitation source in this component.
 void setLinearMuscleMaterial(double maxF, double optL, double maxL, double pf)
           
 void setMaxColoredExcitation(double excitation)
           
 void setMaxColoredExcitationMode(PropertyMode mode)
           
 void setPeckMuscleMaterial(double maxF, double optL, double maxL, double tendonRatio)
           
 void setPeckMuscleMaterial(double maxF, double optL, double maxL, double tendonRatio, double passiveFraction, double damping)
           
 
Methods inherited from class artisynth.core.mechmodels.AxialSpring
addPosJacobian, addSolveBlocks, addVelJacobian, applyForces, computeForce, computeForcePositionJacobian, computeForceVelocityJacobian, copy, getCopyReferences, getDir, getFirstPoint, getHardReferences, getLength, getLengthDot, getRenderCoords0, getRenderCoords1, getSecondPoint, isDuplicatable, printPointReferences, setFirstPoint, setPoints, setPoints, setRestLengthFromPoints, setSecondPoint, updateBounds, write
 
Methods inherited from class artisynth.core.mechmodels.PointSpringBase
createDefaultMaterial, createRenderProps, getEffectiveMaterial, getMaterial, getMaxForce, getRenderHints, getRenderProps, getRestLength, getSelection, isSelectable, numSelectionQueriesNeeded, setDamping, setLinearMaterial, setMaterial, setMaxForce, setRenderProps, setRestLength, setStiffness
 
Methods inherited from class artisynth.core.modelbase.ModelComponentBase
checkFlag, checkName, checkNameUniqueness, clearFlag, clone, connectToHierarchy, createTempFlag, disconnectFromHierarchy, getChildren, getGrandParent, getName, getNameRange, getNavpanelVisibility, getNavpanelVisibility, getNumber, getParent, getProperty, hasChildren, hasState, isFixed, isMarked, isSelected, isWritable, makeValidName, makeValidName, notifyParentOfChange, postscan, printReferences, recursivelyContained, recursivelyContains, removeTempFlag, scan, setFixed, setFlag, setMarked, setName, setNavpanelVisibility, setNavpanelVisibility, setNumber, setParent, setSelected, updateReferences
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface artisynth.core.modelbase.ModelComponent
connectToHierarchy, disconnectFromHierarchy, getHardReferences, getName, getNavpanelVisibility, getNumber, getParent, hasState, isFixed, isMarked, isSelected, notifyParentOfChange, postscan, scan, setFixed, setMarked, setName, setNumber, setParent, setSelected, updateReferences
 
Methods inherited from interface maspack.properties.HasProperties
getProperty
 
Methods inherited from interface maspack.properties.HierarchyNode
getChildren, hasChildren
 
Methods inherited from interface maspack.util.Scannable
isWritable, write
 
Methods inherited from interface maspack.render.RenderableLine
isSelected
 
Methods inherited from interface maspack.render.GLSelectable
getSelection, isSelectable, numSelectionQueriesNeeded
 
Methods inherited from interface maspack.render.GLRenderable
getRenderHints
 
Methods inherited from interface maspack.render.HasRenderProps
createRenderProps, getRenderProps, setRenderProps
 

Field Detail

myProps

public static PropertyList myProps
Constructor Detail

Muscle

public Muscle()

Muscle

public Muscle(java.lang.String name)

Muscle

public Muscle(Point p1,
              Point p2)
Method Detail

setConstantMuscleMaterial

public void setConstantMuscleMaterial(double maxF)

setConstantMuscleMaterial

public void setConstantMuscleMaterial(double maxF,
                                      double forceScaling)

setLinearMuscleMaterial

public void setLinearMuscleMaterial(double maxF,
                                    double optL,
                                    double maxL,
                                    double pf)

setPeckMuscleMaterial

public void setPeckMuscleMaterial(double maxF,
                                  double optL,
                                  double maxL,
                                  double tendonRatio)

setPeckMuscleMaterial

public void setPeckMuscleMaterial(double maxF,
                                  double optL,
                                  double maxL,
                                  double tendonRatio,
                                  double passiveFraction,
                                  double damping)

getExcitationColor

public java.awt.Color getExcitationColor()

setExcitationColor

public void setExcitationColor(java.awt.Color color)

getExcitationColorMode

public PropertyMode getExcitationColorMode()

setExcitationColorMode

public void setExcitationColorMode(PropertyMode mode)

getMaxColoredExcitation

public double getMaxColoredExcitation()

setMaxColoredExcitation

public void setMaxColoredExcitation(double excitation)

getMaxColoredExcitationMode

public PropertyMode getMaxColoredExcitationMode()

setMaxColoredExcitationMode

public void setMaxColoredExcitationMode(PropertyMode mode)

getAllPropertyInfo

public PropertyList getAllPropertyInfo()
Description copied from interface: HasProperties
Returns a list giving static information about all properties exported by this object.

Specified by:
getAllPropertyInfo in interface HasProperties
Overrides:
getAllPropertyInfo in class AxialSpring
Returns:
static information for all exported properties

getExcitation

public double getExcitation()
Returns the primary excitation for this component.

Specified by:
getExcitation in interface ExcitationComponent
Returns:
primary excitation value

initialize

public void initialize(double t)
Called from within the model's initialize() method.

Specified by:
initialize in interface RequiresInitialize
Parameters:
t - initialization time (seconds)

setExcitation

public void setExcitation(double a)
Sets the primary excitation for this component.

Specified by:
setExcitation in interface ExcitationComponent
Parameters:
a - excitation value

addExcitationSource

public void addExcitationSource(ExcitationComponent ex)
Adds a new excitation source to this Excitable, with an assumed gain of 1.

Specified by:
addExcitationSource in interface ExcitationComponent
Parameters:
ex - excitatation source to be added

addExcitationSource

public void addExcitationSource(ExcitationComponent ex,
                                double gain)
Adds a new excitation source to this Excitable with a specified gain.

Specified by:
addExcitationSource in interface ExcitationComponent
Parameters:
ex - excitatation source to be added
gain - gain for the source

removeExcitationSource

public boolean removeExcitationSource(ExcitationComponent ex)
Removes an excitation source from this Excitable. Returns false if the source was not present.

Specified by:
removeExcitationSource in interface ExcitationComponent
Parameters:
ex - excitatation source to be removed
Returns:
true if the source was present and removed

getExcitationGain

public double getExcitationGain(ExcitationComponent ex)
Gets the gain for an excitation source in this component.

Specified by:
getExcitationGain in interface ExcitationComponent
Parameters:
ex - excitatation source whose gain is to be queried
Returns:
source gain value, or -1 if the source is not present in this component.

setExcitationGain

public boolean setExcitationGain(ExcitationComponent ex,
                                 double gain)
Sets the gain for an excitation source in this component.

Specified by:
setExcitationGain in interface ExcitationComponent
Parameters:
ex - excitatation source whose gain is to be modified
gain - new gain for the source
Returns:
false if the source is not present in this component.

setCombinationRule

public void setCombinationRule(ExcitationComponent.CombinationRule rule)
Sets the rule for combining excitations.

Specified by:
setCombinationRule in interface ExcitationComponent
Parameters:
rule - rule for combining excitations

getCombinationRule

public ExcitationComponent.CombinationRule getCombinationRule()
Return the combination rule for excitations.

Specified by:
getCombinationRule in interface ExcitationComponent
Returns:
combination rule for excitations

getRenderColor

public float[] getRenderColor()
Description copied from interface: RenderableLine
Returns the rgb components (in the range [0,1]) of a color that overrides the default color indicated by the render props. If there is no overriding color, then null should be returned.

Specified by:
getRenderColor in interface RenderableLine
Overrides:
getRenderColor in class PointSpringBase

prerender

public void prerender(RenderList list)
Description copied from interface: GLRenderable
Prepare for rendering, and potentially add itself to a list to be drawn by a GLRenderer.

Specified by:
prerender in interface GLRenderable
Overrides:
prerender in class PointSpringBase

render

public void render(GLRenderer renderer,
                   int flags)
Description copied from interface: GLRenderable
Render this object using Open GL via the JOGL.

Specified by:
render in interface GLRenderable
Overrides:
render in class AxialSpring
Parameters:
renderer - renderer object which is used to perform the rendering. Provides pointers to GL and GLU, along with helper functions.
flags - supplies flags that may be used to control different aspects of the rendering. Flags are defined in GLRenderer and currently include GLRenderer.SELECTED, GLRenderer.VERTEX_COLORING, GLRenderer.HSV_COLOR_INTERPOLATION, GLRenderer.SORT_FACES, and GLRenderer.CLEAR_MESH_DISPLAY_LISTS.

getNetExcitation

public double getNetExcitation()
Returns the net excitation for this Excitable. The net excitation is the combination of the primary excitation and the net excitations of all the excitation sources.

Specified by:
getNetExcitation in interface ExcitationComponent

computeF

public double computeF(double l,
                       double ldot)
Computes the force magnitude acting along the unit vector from the first to the second particle.

Overrides:
computeF in class PointSpringBase
Returns:
force magnitude

computePassiveF

public double computePassiveF(double l,
                              double ldot)
Computes the force magnitude acting along the unit vector from the first to the second particle with zero excitation.

Returns:
force magnitude

computeDFdl

public double computeDFdl(double l,
                          double ldot)
Computes the derivative of spring force magnitude (acting along the unit vector from the first to the second particle) with respect to spring length.

Overrides:
computeDFdl in class PointSpringBase
Returns:
force magnitude derivative with respect to length

computeDFdldot

public double computeDFdldot(double l,
                             double ldot)
Computes the derivative of spring force magnitude (acting along the unit vector from the first to the second particle)with respect to the time derivative of spring length.

Overrides:
computeDFdldot in class PointSpringBase
Returns:
force magnitude derivative with respect to length time derivative

resetLengthProps

public void resetLengthProps()
sets the opt length to current muscle length and max length with the original ratio of opt to max length


getForceNorm

public double getForceNorm()

getForce

public Vector3d getForce()

computePassiveForce

public void computePassiveForce(Vector3d f)

getPassiveForceNorm

public double getPassiveForceNorm()

getPassiveForce

public Vector3d getPassiveForce()

scaleDistance

public void scaleDistance(double s)
Description copied from interface: ScalableUnits
Scales all distance coordinates.

Specified by:
scaleDistance in interface ScalableUnits
Overrides:
scaleDistance in class AxialSpring
Parameters:
s - scaling factor

scaleMass

public void scaleMass(double s)
Description copied from interface: ScalableUnits
Scales all mass units.

Specified by:
scaleMass in interface ScalableUnits
Overrides:
scaleMass in class AxialSpring
Parameters:
s - scaling factor

printMuscleDirection

public void printMuscleDirection()

getJacobianType

public int getJacobianType()
Description copied from interface: ForceEffector
Returns a code indicating the matrix type that results when the Jacobian terms of this force effector are added to the solve matrix. This should be a logical or-ing of either Matrix.SYMMETRIC or Matrix.POSITIVE_DEFINITE. The former should be set if adding the Jacobian terms preserves symmetry, and the latter should be set if positive definiteness if preserved. Both should be set if there is no Jacobian for this effector (i.e., the Jacobian methods are not implemented). Matrix types from all the force effectors are logically and-ed together to determine the type for the entire solve matrix.

Specified by:
getJacobianType in interface ForceEffector
Overrides:
getJacobianType in class AxialSpring
Returns:
solve matrix type resulting from adding Jacobian terms

isEnabled

public boolean isEnabled()

setEnabled

public void setEnabled(boolean enabled)

getDefaultActivationWeight

public double getDefaultActivationWeight()
Description copied from interface: ExcitationComponent
Returns the default weight that should be used when this excitation component is being used for inverse actuation control.

Specified by:
getDefaultActivationWeight in interface ExcitationComponent

getSoftReferences

public void getSoftReferences(java.util.List<ModelComponent> refs)
Description copied from class: ModelComponentBase
Appends all soft references for this component to a list. References are other components, outside of this component's immediate ancestry, on which this component depends. For example, an ExcitationComponent may refer to one or more other ExcitationComponents to act as excitation sources. A soft reference is one which can be removed from the referring component. In particular, if any soft references for a component are deleted, then that component's updateReferences() method will be called to update its internal reference information.

Specified by:
getSoftReferences in interface ModelComponent
Overrides:
getSoftReferences in class ModelComponentBase
Parameters:
refs - list to which soft references are appended