Simbody
3.7
|
This subsystem tracks the paths of massless, frictionless cables that take the shortest route between two distant points of a multibody system, passing smoothly over geometric obstacles that are attached to intermediate bodies. More...
Public Member Functions | |
CableTrackerSubsystem () | |
CableTrackerSubsystem (MultibodySystem &) | |
int | getNumCablePaths () const |
Get the number of cable paths being managed by this cable tracker subsystem. More... | |
const CablePath & | getCablePath (CablePathIndex cableIx) const |
Get const access to a particular cable path. More... | |
CablePath & | updCablePath (CablePathIndex cableIx) |
Get writable access to a particular cable path. More... | |
Public Member Functions inherited from SimTK::Subsystem | |
Subsystem () | |
Default constructor creates and empty handle with a null Subsystem::Guts pointer. More... | |
Subsystem (const Subsystem &) | |
Copy constructor clones the Subsystem::Guts object if there is one and makes this the owner handle of the new clone. More... | |
Subsystem & | operator= (const Subsystem &) |
Copy assignment deletes the Subsystem::Guts object if there is one and then behaves like the copy constructor. More... | |
~Subsystem () | |
Destructor deletes the referenced Subsystem::Guts object if this is the owner handle of that object, otherwise does nothing. More... | |
QIndex | allocateQ (State &s, const Vector &qInit) const |
UIndex | allocateU (State &s, const Vector &uInit) const |
ZIndex | allocateZ (State &s, const Vector &zInit) const |
DiscreteVariableIndex | allocateDiscreteVariable (State &s, Stage g, AbstractValue *v) const |
DiscreteVariableIndex | allocateAutoUpdateDiscreteVariable (State &s, Stage invalidates, AbstractValue *v, Stage updateDependsOn) const |
CacheEntryIndex | allocateCacheEntry (const State &s, Stage dependsOn, Stage computedBy, AbstractValue *v) const |
CacheEntryIndex | allocateCacheEntry (const State &state, Stage g, AbstractValue *v) const |
CacheEntryIndex | allocateLazyCacheEntry (const State &state, Stage earliest, AbstractValue *v) const |
QErrIndex | allocateQErr (const State &s, int nqerr) const |
UErrIndex | allocateUErr (const State &s, int nuerr) const |
UDotErrIndex | allocateUDotErr (const State &s, int nudoterr) const |
EventTriggerByStageIndex | allocateEventTriggersByStage (const State &s, Stage g, int ntriggers) const |
const Vector & | getQ (const State &s) const |
const Vector & | getU (const State &s) const |
const Vector & | getZ (const State &s) const |
const Vector & | getUWeights (const State &s) const |
const Vector & | getZWeights (const State &s) const |
Vector & | updQ (State &s) const |
Vector & | updU (State &s) const |
Vector & | updZ (State &s) const |
const Vector & | getQDot (const State &s) const |
const Vector & | getUDot (const State &s) const |
const Vector & | getZDot (const State &s) const |
const Vector & | getQDotDot (const State &s) const |
Vector & | updQDot (const State &s) const |
Vector & | updUDot (const State &s) const |
Vector & | updZDot (const State &s) const |
Vector & | updQDotDot (const State &s) const |
const Vector & | getQErr (const State &s) const |
const Vector & | getUErr (const State &s) const |
const Vector & | getQErrWeights (const State &s) const |
const Vector & | getUErrWeights (const State &s) const |
const Vector & | getUDotErr (const State &s) const |
const Vector & | getMultipliers (const State &s) const |
const Vector & | getEventTriggersByStage (const State &s, Stage g) const |
Vector & | updQErr (const State &s) const |
Vector & | updUErr (const State &s) const |
Vector & | updUDotErr (const State &s) const |
Vector & | updMultipliers (const State &s) const |
Vector & | updEventTriggersByStage (const State &s, Stage g) const |
SystemQIndex | getQStart (const State &s) const |
int | getNQ (const State &s) const |
SystemUIndex | getUStart (const State &s) const |
int | getNU (const State &s) const |
SystemZIndex | getZStart (const State &s) const |
int | getNZ (const State &s) const |
SystemQErrIndex | getQErrStart (const State &s) const |
int | getNQErr (const State &s) const |
SystemUErrIndex | getUErrStart (const State &s) const |
int | getNUErr (const State &s) const |
SystemUDotErrIndex | getUDotErrStart (const State &s) const |
int | getNUDotErr (const State &s) const |
SystemMultiplierIndex | getMultipliersStart (const State &s) const |
int | getNMultipliers (const State &s) const |
SystemEventTriggerByStageIndex | getEventTriggerStartByStage (const State &s, Stage g) const |
int | getNEventTriggersByStage (const State &s, Stage g) const |
void | setQ (State &s, const Vector &q) const |
void | setU (State &s, const Vector &u) const |
void | setZ (State &s, const Vector &z) const |
Stage | getStage (const State &s) const |
void | advanceToStage (const State &s, Stage g) const |
const AbstractValue & | getDiscreteVariable (const State &s, DiscreteVariableIndex index) const |
AbstractValue & | updDiscreteVariable (State &s, DiscreteVariableIndex index) const |
const AbstractValue & | getCacheEntry (const State &s, CacheEntryIndex index) const |
AbstractValue & | updCacheEntry (const State &s, CacheEntryIndex index) const |
Real | getDiscreteVarLastUpdateTime (const State &s, DiscreteVariableIndex dx) const |
CacheEntryIndex | getDiscreteVarUpdateIndex (const State &s, DiscreteVariableIndex dx) const |
const AbstractValue & | getDiscreteVarUpdateValue (const State &s, DiscreteVariableIndex dx) const |
AbstractValue & | updDiscreteVarUpdateValue (const State &s, DiscreteVariableIndex dx) const |
bool | isDiscreteVarUpdateValueRealized (const State &s, DiscreteVariableIndex dx) const |
void | markDiscreteVarUpdateValueRealized (const State &s, DiscreteVariableIndex dx) const |
bool | isCacheValueRealized (const State &s, CacheEntryIndex cx) const |
void | markCacheValueRealized (const State &s, CacheEntryIndex cx) const |
void | markCacheValueNotRealized (const State &s, CacheEntryIndex cx) const |
const String & | getName () const |
Obtain the Subsystem name if one was given on construction of the concrete Subsystem. More... | |
const String & | getVersion () const |
Obtain the Subsystem version string if one was given on construction. More... | |
bool | isInSystem () const |
Return true if this Subsystem is contained in a System. More... | |
bool | isInSameSystem (const Subsystem &otherSubsystem) const |
Return true if this Subsystem is contained in the same System as contains the given otherSubsystem. More... | |
const System & | getSystem () const |
Return a const reference to the System that contains this Subsystem. More... | |
System & | updSystem () |
Return a writable reference to the System that contains this Subsystem. More... | |
void | setSystem (System &system, SubsystemIndex subx) |
Inform this Subsystem of the System that contains it, as well as the SubsystemIndex which the System has assigned to it. More... | |
SubsystemIndex | getMySubsystemIndex () const |
Return the SubsystemIndex within the containing System. More... | |
bool | isEmptyHandle () const |
Return true if this handle has a null Subsystem::Guts pointer. More... | |
bool | isSameSubsystem (const Subsystem &otherSubsystem) const |
Determine if this Subsystem handle refers to the same Subsystem::Guts object as handle otherSubsystem. More... | |
bool | isOwnerHandle () const |
Is this Subsystem handle the owner of the Subsystem::Guts object it points to? This is true if the handle is empty or if its Guts object points back to this handle. More... | |
bool | subsystemTopologyHasBeenRealized () const |
Returns true if this Subsystem's realizeTopology() method has been called since the last topological change or call to invalidateSubsystemTopologyCache(). More... | |
void | invalidateSubsystemTopologyCache () const |
Always call this method when a topological change is made to this Subsystem to indicate that any Stage::Topology cache values may need recomputation. More... | |
MeasureIndex | adoptMeasure (AbstractMeasure &) |
Obtain the Subsystem name if one was given on construction of the concrete Subsystem. More... | |
AbstractMeasure | getMeasure (MeasureIndex) const |
Obtain the Subsystem name if one was given on construction of the concrete Subsystem. More... | |
template<class T > | |
Measure_< T > | getMeasure_ (MeasureIndex mx) const |
Obtain the Subsystem name if one was given on construction of the concrete Subsystem. More... | |
const Subsystem::Guts & | getSubsystemGuts () const |
Obtain the Subsystem name if one was given on construction of the concrete Subsystem. More... | |
Subsystem::Guts & | updSubsystemGuts () |
Obtain the Subsystem name if one was given on construction of the concrete Subsystem. More... | |
void | adoptSubsystemGuts (Subsystem::Guts *g) |
Obtain the Subsystem name if one was given on construction of the concrete Subsystem. More... | |
Subsystem (Subsystem::Guts *g) | |
Obtain the Subsystem name if one was given on construction of the concrete Subsystem. More... | |
bool | hasGuts () const |
Obtain the Subsystem name if one was given on construction of the concrete Subsystem. More... | |
This subsystem tracks the paths of massless, frictionless cables that take the shortest route between two distant points of a multibody system, passing smoothly over geometric obstacles that are attached to intermediate bodies.
The calculated path will consist of a series of straight line segments between obstacles, and geodesics over the obstacles.
Force elements defined elsewhere may make use of cable paths to apply forces to the system, by calculating a uniform tension in the cable that may depend on the cable kinematics calculated here. Cable kinematics includes the path, the cable length, and the cable "rate", defined as the time derivative of length. The path and length are available at Position stage, the rate is available at Velocity stage.
During construction, one or more CablePath objects are defined by giving for each CablePath an origin and end point and an ordered set of geometric obstacles represented either by surfaces or "via" points. Via points are like frictionless eyelets that the cable must pass through and can generate forces in any direction perpendicular to the cable; surfaces are one-sided and can only apply positive forces to the cable. Thus the cable path does not necessarily touch all the obstacles; the obstacles that it does touch are called the "active" obstacles. Via points are always active.
Every obstacle and point is rigidly fixed to Ground or some moving body of the multibody system, with its pose or station point provided. Any number of obstacles may be placed on one body.
SimTK::CableTrackerSubsystem::CableTrackerSubsystem | ( | ) |
|
explicit |
int SimTK::CableTrackerSubsystem::getNumCablePaths | ( | ) | const |
Get the number of cable paths being managed by this cable tracker subsystem.
These are identified by CablePathIndex values from 0 to getNumCablePaths()-1. This is available after realizeTopology() and does not change subsequently.
const CablePath& SimTK::CableTrackerSubsystem::getCablePath | ( | CablePathIndex | cableIx | ) | const |
Get const access to a particular cable path.
CablePath& SimTK::CableTrackerSubsystem::updCablePath | ( | CablePathIndex | cableIx | ) |
Get writable access to a particular cable path.