Simbody
3.7

This class represents the path of a frictionless cable from an origin point fixed to a body, through via points and over geometric obstacles fixed to other bodies, to a final termination point. More...
Public Member Functions  
CablePath (CableTrackerSubsystem &cables, const MobilizedBody &originBody, const Vec3 &defaultOriginPoint, const MobilizedBody &terminationBody, const Vec3 &defaultTerminationPoint)  
Create a straightline cable path connecting a point fixed on one body with one fixed on another body. More...  
CablePath (CableTrackerSubsystem &cables, const MobilizedBody &originBody, const MobilizedBody &terminationBody)  
Constructor taking only the origin and terminal bodies with the expectation that you'll set the end point locations later. More...  
CablePath (const CablePath &source)  
Copy constructor is shallow and reference counted. More...  
CablePath &  operator= (const CablePath &source) 
Copy assignment is shallow and reference counted. More...  
~CablePath ()  
Delete the cable path if this handle was the last reference to it. More...  
void  solveForInitialCablePath (State &state) const 
TODO: Calculate the initial cable path, without using any prior solution. More...  
int  getNumObstacles () const 
Return the total number of obstacles (origin point, surfaces and via points, and termination point) that were provided for this cable path, regardless of whether they are currently in use. More...  
const CableObstacle &  getObstacle (CableObstacleIndex obstacleIx) const 
Return a const reference to one of the obstacles along this path, given by its index starting at zero for the origin point. More...  
Real  getCableLength (const State &state) const 
Return the total length of the cable that was calculated for the configuration supplied in state. More...  
Real  getCableLengthDot (const State &state) const 
Return the cable rate (time derivative of cable length) that was calculated for the configuration and velocities supplied in state. More...  
void  applyBodyForces (const State &state, Real tension, Vector_< SpatialVec > &bodyForcesInG) const 
Given a tension > 0 acting uniformly along this cable, apply the resulting forces to the bodies it touches. More...  
Real  calcCablePower (const State &state, Real tension) const 
Calculate the power this cable would apply or dissipate at the given tension (>0) value, using the velocities provided in the given state, which must already have been realized to Velocity stage. More...  
Real  getIntegratedCableLengthDot (const State &state) const 
(Advanced) Get the time integral of cable length dot. More...  
void  setIntegratedCableLengthDot (State &state, Real value) const 
(Advanced) Initialize the integral of the cable length rate. More...  
CablePath ()  
Default constructor creates an empty cable path not associated with any subsystem; don't use this. More...  
const Impl &  getImpl () const 
Impl &  updImpl () 
This class represents the path of a frictionless cable from an origin point fixed to a body, through via points and over geometric obstacles fixed to other bodies, to a final termination point.
The cable ends are attached at the origin and termination points while the cable is free to slide through the via points and along the obstacle surfaces. The cable follows a geodesic curve (usually the shortest path) over each surface.
During initialization, if there is more than one possible geodesic over a surface, or if a straight line path would miss the surface altogether, we'll take the shortest route unless the user has provided a "near point" on the surface. In that case whichever of the possible path segments runs closest to the near point is chosen. During continuation, only local path movement is allowed so the path segment will not flip from one side to the other once it has been initialized, even if that means it does not follow the shortest possible geodesic. The near point is ignored during continuation.
Note that a CablePath is a geometric object, not a force or constraint element. That is, a CablePath alone will not influence the behavior of a simulation. However, forces and constraint elements can be constructed that make use of a CablePath to generate forces. For an example, see CableSpring.
The auxiliary class CableObstacle and its subclasses are used to specify the via points and obstacles that affect a particular CablePath. CablePath objects must be registered with a CablePathSubsystem which manages their runtime evaluation.
For convenience, we include the origin and termination points as obstacles, with the origin being obstacle zero, followed by m via point and surface obstacles numbered 1 to m, followed by the termination point as obstacle t=m+1. Every obstacle is represented by two "contact points", P and Q, which we'll number Pi and Qi for obstacle i. The obstacles are separated by straightline segments running from Qi1 to Pi. Starting at the origin Q0, the path first touches the surface of obstacle 1 at P1, travels over the surface to Q1, and then leaves the surface towards the termination point Pt. That is, Pi's path coordinate must be less than Qi's. The segment from P to Q is a geodesic over the surface. For via points, points P and Q are in the same location but there are two different tangents associated with them in the incoming and outgoing straightline directions. For the origin obstacle, only point Q is relevant and for the termination obstacle only point P is relevant.
SimTK::CablePath::CablePath  (  CableTrackerSubsystem &  cables, 
const MobilizedBody &  originBody,  
const Vec3 &  defaultOriginPoint,  
const MobilizedBody &  terminationBody,  
const Vec3 &  defaultTerminationPoint  
) 
Create a straightline cable path connecting a point fixed on one body with one fixed on another body.
You can add additional obstacles and move the end points later.
SimTK::CablePath::CablePath  (  CableTrackerSubsystem &  cables, 
const MobilizedBody &  originBody,  
const MobilizedBody &  terminationBody  
) 
Constructor taking only the origin and terminal bodies with the expectation that you'll set the end point locations later.
The default locations are set to the body frame origins here.
SimTK::CablePath::CablePath  (  const CablePath &  source  ) 
Copy constructor is shallow and reference counted.

inline 
Delete the cable path if this handle was the last reference to it.

inline 
Default constructor creates an empty cable path not associated with any subsystem; don't use this.
Copy assignment is shallow and reference counted.
void SimTK::CablePath::solveForInitialCablePath  (  State &  state  )  const 
TODO: Calculate the initial cable path, without using any prior solution.
The result is saved in the supplied State which may then be used as the initial condition for a time simulation. This method will work hard to find a good starting solution, making use of any hints that have been supplied with the obstacles. This is substantially different (and much more time consuming) than the method used during a simulation, which always starts with the previous solution and is intentionally limited to finding a nearby solution.
The initial solution consists of both (a) which of the surface obstacles are active, and (b) the intersection of the cable with the active obstacles and the path taken by the cable over those obstacles (a geodesic curve). For inactive surface obstacles we determine the closest point between the obstacles and the path; that point will be tracked continuously during a simulation. The usersupplied ordering and near points are respected. The cable length and length rate of change are available immediately after this call; state will have been realized through Velocity stage.
An exception is thrown if no acceptable cable path can be found. In that case the state is still initialized and can be examined to see where the algorithm got stuck.
int SimTK::CablePath::getNumObstacles  (  )  const 
Return the total number of obstacles (origin point, surfaces and via points, and termination point) that were provided for this cable path, regardless of whether they are currently in use.
const CableObstacle& SimTK::CablePath::getObstacle  (  CableObstacleIndex  obstacleIx  )  const 
Return a const reference to one of the obstacles along this path, given by its index starting at zero for the origin point.
Return the total length of the cable that was calculated for the configuration supplied in state.
State must have been realized through Position stage.
Return the cable rate (time derivative of cable length) that was calculated for the configuration and velocities supplied in state.
State must have been realized through Velocity stage. Calculation of the cable rate may be initiated if necessary the first time this is called at this state but will be saved in the cache for subsequent accesses.
void SimTK::CablePath::applyBodyForces  (  const State &  state, 
Real  tension,  
Vector_< SpatialVec > &  bodyForcesInG  
)  const 
Given a tension > 0 acting uniformly along this cable, apply the resulting forces to the bodies it touches.
The body forces are added into the appropriate slots in the supplied Array which has one entry per body in the same format as is supplied to the calcForce() method of force elements. If the supplied tension is <= 0, signifying a slack cable, this method does nothing.
Calculate the power this cable would apply or dissipate at the given tension (>0) value, using the velocities provided in the given state, which must already have been realized to Velocity stage.
Power is positive if the cable is adding energy to the system; negative when dissipating. If the supplied tension is <= 0, power may still be dissipated while the cable shortens even though it can't apply forces to the system.
(Advanced) Get the time integral of cable length dot.
This should be the total change in cable length since start of a simulation. This is mostly useful for debugging and testing of cables.
(Advanced) Initialize the integral of the cable length rate.
This is used at the start of a simulation to initilize the integral to the value returned by getCableLength() so that getIntegratedCableLengthDot() will return the same values as getCableLength() during the simulations.

inline 

inline 