Simbody
Public Member Functions

SimTK::MobilizedBody::SphericalCoords Class Reference

Three mobilities -- body fixed 3-2 (z-y) rotation followed by translation along body z or body x. More...

#include <MobilizedBody.h>

Inheritance diagram for SimTK::MobilizedBody::SphericalCoords:

List of all members.

Public Member Functions

 SphericalCoords (Direction=Forward)
 SphericalCoords (MobilizedBody &parent, const Body &, Direction=Forward)
 By default the parent body frame and the body's own frame are used as the inboard and outboard mobilizer frames, resp.
 SphericalCoords (MobilizedBody &parent, const Transform &inbFrame, const Body &, const Transform &outbFrame, Direction=Forward)
 Use this constructor to specify mobilizer frames which are not coincident with the body frames.
 SphericalCoords (MobilizedBody &parent, const Transform &inbFrame, const Body &, const Transform &outbFrame, Real azimuthOffset, bool azimuthNegated, Real zenithOffset, bool zenithNegated, CoordinateAxis radialAxis, bool radialNegated, Direction=Forward)
 Use this constructor to specify the general case described above.
SphericalCoordsaddBodyDecoration (const Transform &X_BD, const DecorativeGeometry &g)
 Add decorative geometry specified relative to the new (outboard) body's reference frame B, or to the outboard mobilizer frame M attached to body B, or to the inboard mobilizer frame F attached to the parent body P.
SphericalCoordsaddOutboardDecoration (const Transform &X_MD, const DecorativeGeometry &g)
 Add decorative geometry specified relative to the outboard mobilizer frame M attached to body B.
SphericalCoordsaddInboardDecoration (const Transform &X_FD, const DecorativeGeometry &g)
 Add decorative geometry specified relative to the inboard mobilizer frame F attached to the parent body P.
SphericalCoordssetDefaultInboardFrame (const Transform &X_PF)
 Change this mobilizer's frame F on the parent body P.
SphericalCoordssetDefaultOutboardFrame (const Transform &X_BM)
 Change this mobilizer's frame M fixed on this (the outboard) body B.
SphericalCoordssetDefaultAngles (const Vec2 &a)
SphericalCoordssetDefaultRadius (Real r)
SphericalCoordssetRadialAxis (CoordinateAxis)
SphericalCoordssetNegateAzimuth (bool)
SphericalCoordssetNegateZenith (bool)
SphericalCoordssetNegateRadial (bool)
const Vec2getDefaultAngles () const
Real getDefaultTranslation () const
CoordinateAxis getRadialAxis () const
bool isAzimuthNegated () const
bool isZenithNegated () const
bool isRadialNegated () const
void setAngles (State &s, const Vec2 &a)
void setRadius (State &s, Real r)
const Vec2getAngles (const State &s) const
Real getRadius (const State &s) const
const Vec3getDefaultQ () const
SphericalCoordssetDefaultQ (const Vec3 &q)
const Vec3getQ (const State &) const
const Vec3getQDot (const State &) const
const Vec3getQDotDot (const State &) const
const Vec3getU (const State &) const
const Vec3getUDot (const State &) const
void setQ (State &, const Vec3 &) const
void setU (State &, const Vec3 &) const
const Vec3getMyPartQ (const State &, const Vector &qlike) const
const Vec3getMyPartU (const State &, const Vector &ulike) const
Vec3updMyPartQ (const State &, Vector &qlike) const
Vec3updMyPartU (const State &, Vector &ulike) const
 SimTK_INSERT_DERIVED_HANDLE_DECLARATIONS (SphericalCoords, SphericalCoordsImpl, MobilizedBody)

Detailed Description

Three mobilities -- body fixed 3-2 (z-y) rotation followed by translation along body z or body x.

Interpreted as spherical coordinates the first rotation is the azimuth angle, the second is the zenith, and the translation is the radius. We permit a simple mapping from generalized coordinates to (azimuth, zenith, radius):

     azimuth = s0*q0 + az0   (about Fz==Mz)
     zenith  = s1*q1 + ze0   (about My)
     radius  = s2*q2         (along Mz or Mx; Mz is default)
 

where s0,s1,s2 are signs (1 or -1) and az0 and ze0 are offset angles. The F and M frames are coincident when azimuth==zenith==radius==0. But note that with non-zero offsets the F and M frames will not be aligned in the reference configuration where q0==q1==q2==0. The F and M origins will always be coincident when q2==0, however.

This mobilizer can be used to give unrestricted 3-d motion to inertialess particles (as with a Cartesian mobilizer but parameterized torsion,bend,stretch instead of x,y,z) but in this case you must watch for two possible singularities: (1) radius==0, and (2) zenith==n*Pi (or equivalently q1==n*Pi-s1*ze0). If your operating range steers clear of those singularities, you're fine.


Constructor & Destructor Documentation

By default the parent body frame and the body's own frame are used as the inboard and outboard mobilizer frames, resp.

SimTK::MobilizedBody::SphericalCoords::SphericalCoords ( MobilizedBody parent,
const Transform inbFrame,
const Body ,
const Transform outbFrame,
Direction  = Forward 
)

Use this constructor to specify mobilizer frames which are not coincident with the body frames.

This gives you a pure spherical coordinate system in which q0=azimuth about Fz(==Mz), q1=zenith about My, and q2=radius along Mz.

SimTK::MobilizedBody::SphericalCoords::SphericalCoords ( MobilizedBody parent,
const Transform inbFrame,
const Body ,
const Transform outbFrame,
Real  azimuthOffset,
bool  azimuthNegated,
Real  zenithOffset,
bool  zenithNegated,
CoordinateAxis  radialAxis,
bool  radialNegated,
Direction  = Forward 
)

Use this constructor to specify the general case described above.


Member Function Documentation

SphericalCoords& SimTK::MobilizedBody::SphericalCoords::addBodyDecoration ( const Transform X_BD,
const DecorativeGeometry g 
) [inline]

Add decorative geometry specified relative to the new (outboard) body's reference frame B, or to the outboard mobilizer frame M attached to body B, or to the inboard mobilizer frame F attached to the parent body P.

Note that the body itself may already have had some decorative geometry on it when it was first put into this MobilizedBody; in that case this just adds more.

Reimplemented from SimTK::MobilizedBody.

SphericalCoords& SimTK::MobilizedBody::SphericalCoords::addOutboardDecoration ( const Transform X_MD,
const DecorativeGeometry  
) [inline]

Add decorative geometry specified relative to the outboard mobilizer frame M attached to body B.

If body B already has decorative geometry on it, this just adds some more.

Reimplemented from SimTK::MobilizedBody.

SphericalCoords& SimTK::MobilizedBody::SphericalCoords::addInboardDecoration ( const Transform X_FD,
const DecorativeGeometry  
) [inline]

Add decorative geometry specified relative to the inboard mobilizer frame F attached to the parent body P.

If body P already has decorative geometry on it, this just adds some more.

Reimplemented from SimTK::MobilizedBody.

SphericalCoords& SimTK::MobilizedBody::SphericalCoords::setDefaultInboardFrame ( const Transform X_PF) [inline]

Change this mobilizer's frame F on the parent body P.

Calling this method invalidates the MobilizedBody's topology, so the containing matter subsystem's realizeTopology() method must be called again. A reference to this MobilizedBody is returned so that this can be chained like an assignment operator.

Reimplemented from SimTK::MobilizedBody.

SphericalCoords& SimTK::MobilizedBody::SphericalCoords::setDefaultOutboardFrame ( const Transform X_BM) [inline]

Change this mobilizer's frame M fixed on this (the outboard) body B.

Calling this method invalidates the MobilizedBody's topology, so the containing matter subsystem's realizeTopology() method must be called again. A reference to this MobilizedBody is returned so that this can be chained like an assignment operator.

Reimplemented from SimTK::MobilizedBody.

SphericalCoords& SimTK::MobilizedBody::SphericalCoords::setDefaultAngles ( const Vec2 a) [inline]
SphericalCoords& SimTK::MobilizedBody::SphericalCoords::setDefaultRadius ( Real  r) [inline]
SphericalCoords& SimTK::MobilizedBody::SphericalCoords::setRadialAxis ( CoordinateAxis  )
SphericalCoords& SimTK::MobilizedBody::SphericalCoords::setNegateAzimuth ( bool  )
SphericalCoords& SimTK::MobilizedBody::SphericalCoords::setNegateZenith ( bool  )
SphericalCoords& SimTK::MobilizedBody::SphericalCoords::setNegateRadial ( bool  )
const Vec2& SimTK::MobilizedBody::SphericalCoords::getDefaultAngles ( ) const [inline]
Real SimTK::MobilizedBody::SphericalCoords::getDefaultTranslation ( ) const [inline]
CoordinateAxis SimTK::MobilizedBody::SphericalCoords::getRadialAxis ( ) const
bool SimTK::MobilizedBody::SphericalCoords::isAzimuthNegated ( ) const
bool SimTK::MobilizedBody::SphericalCoords::isZenithNegated ( ) const
bool SimTK::MobilizedBody::SphericalCoords::isRadialNegated ( ) const
void SimTK::MobilizedBody::SphericalCoords::setAngles ( State s,
const Vec2 a 
) [inline]
void SimTK::MobilizedBody::SphericalCoords::setRadius ( State s,
Real  r 
) [inline]
const Vec2& SimTK::MobilizedBody::SphericalCoords::getAngles ( const State s) const [inline]
Real SimTK::MobilizedBody::SphericalCoords::getRadius ( const State s) const [inline]
const Vec3& SimTK::MobilizedBody::SphericalCoords::getDefaultQ ( ) const
SphericalCoords& SimTK::MobilizedBody::SphericalCoords::setDefaultQ ( const Vec3 q)
const Vec3& SimTK::MobilizedBody::SphericalCoords::getQ ( const State ) const
const Vec3& SimTK::MobilizedBody::SphericalCoords::getQDot ( const State ) const
const Vec3& SimTK::MobilizedBody::SphericalCoords::getQDotDot ( const State ) const
const Vec3& SimTK::MobilizedBody::SphericalCoords::getU ( const State ) const
const Vec3& SimTK::MobilizedBody::SphericalCoords::getUDot ( const State ) const
void SimTK::MobilizedBody::SphericalCoords::setQ ( State ,
const Vec3  
) const
void SimTK::MobilizedBody::SphericalCoords::setU ( State ,
const Vec3  
) const
const Vec3& SimTK::MobilizedBody::SphericalCoords::getMyPartQ ( const State ,
const Vector qlike 
) const
const Vec3& SimTK::MobilizedBody::SphericalCoords::getMyPartU ( const State ,
const Vector ulike 
) const
Vec3& SimTK::MobilizedBody::SphericalCoords::updMyPartQ ( const State ,
Vector qlike 
) const
Vec3& SimTK::MobilizedBody::SphericalCoords::updMyPartU ( const State ,
Vector ulike 
) const
SimTK::MobilizedBody::SphericalCoords::SimTK_INSERT_DERIVED_HANDLE_DECLARATIONS ( SphericalCoords  ,
SphericalCoordsImpl  ,
MobilizedBody   
)

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines