template<typename T>
class drake::multibody::Frame< T >
Frame is an abstract class representing a material frame (also called a physical frame) of its underlying RigidBody (Link).
The Frame's origin is a material point of its RigidBody, and its axes have fixed directions in that body. A Frame's pose (position and orientation) with respect to its RigidBodyFrame (LinkFrame) may be parameterized, but is fixed (not time or state dependent) once parameters have been set.
An important characteristic of a Frame is that forces or torques applied to a Frame are applied to the Frame's underlying body. Force-producing elements like joints, actuators, and constraints usually employ two Frames, with one Frame connected to one body and the other connected to a different body. Every Frame F can report the Link (RigidBody) L to which it is attached and its pose X_LF with respect to L's LinkFrame (RigidBodyFrame).
A Frame's pose in World (or relative to other frames) is always calculated starting with its pose relative to its underlying LinkFrame. Subclasses derived from Frame differ in how kinematic calculations are performed. For example, the angular velocity of a FixedOffsetFrame or LinkFrame (RigidBodyFrame) is identical to the angular velocity of its underlying body, whereas the translational velocity of a FixedOffsetFrame differs from that of a LinkFrame.
Frame provides methods for obtaining its current orientation, position, motion, etc. from a Context passed to those methods.
- Note
- For historical reasons, many of the method names here use "Body" to mean "Link". The distinction matters when we form composite bodies, which consist of multiple links welded together. Those composites form a single rigid body in the physics sense. Frames only know about their Links, not how they may have been combined into a composite body.
- Template Parameters
-
|
| | ~Frame () override |
| FrameIndex | index () const |
| | Returns this element's unique index.
|
| const RigidBody< T > & | body () const |
| | Returns a const reference to the RigidBody (Link) to which this Frame is attached (synonym for link()).
|
| const Link< T > & | link () const |
| | Returns a const reference to the Link (RigidBody) to which this Frame is attached (synonym for body()).
|
| bool | is_world_frame () const |
| | Returns true if this is the world frame.
|
| bool | is_body_frame () const |
| | Returns true if this is the RigidBodyFrame (LinkFrame) of the associated RigidBody (Link).
|
| bool | is_link_frame () const |
| | Returns true if this is the LinkFrame (RigidBodyFrame) of the associated Link (RigidBody).
|
| const std::string & | name () const |
| | Returns the name of this frame. The name will never be empty.
|
| ScopedName | scoped_name () const |
| | Returns scoped name of this frame.
|
| const math::RigidTransform< T > & | EvalPoseInBodyFrame (const systems::Context< T > &context) const |
| | Returns a reference to the link-relative pose X_LF giving the pose of this Frame with respect to its link's LinkFrame (RigidBodyFrame).
|
| math::RigidTransform< T > | CalcPoseInBodyFrame (const systems::Context< T > &context) const |
| | Returns the pose X_LF of this frame F in the LinkFrame (RigidBodyFrame) L of this Frame's Link (RigidBody).
|
| math::RotationMatrix< T > | CalcRotationMatrixInBodyFrame (const systems::Context< T > &context) const |
| | Returns the rotation matrix R_LF that relates link frame L to this frame F (L is the LinkFrame of the Link (RigidBody) to which this frame F is attached).
|
| virtual math::RigidTransform< T > | GetFixedPoseInBodyFrame () const |
| | Variant of CalcPoseInBodyFrame() that returns the fixed pose X_LF of this frame F in the link frame L associated with this frame.
|
| virtual math::RotationMatrix< T > | GetFixedRotationMatrixInBodyFrame () const |
| | Returns the rotation matrix R_LF that relates link frame L to this frame F (L is the LinkFrame of the Link (RigidBody) to which this frame F is attached).
|
| math::RigidTransform< T > | CalcOffsetPoseInBody (const systems::Context< T > &context, const math::RigidTransform< T > &X_FQ) const |
| | Given the offset pose X_FQ of a frame Q in this frame F, this method computes the pose X_LQ of frame Q in the link frame L of the Link (RigidBody) to which this frame is attached.
|
| math::RotationMatrix< T > | CalcOffsetRotationMatrixInBody (const systems::Context< T > &context, const math::RotationMatrix< T > &R_FQ) const |
| | Calculates and returns the rotation matrix R_LQ that relates link frame L to frame Q via this intermediate frame F, i.e., R_LQ = R_LF * R_FQ (L is the link frame of the Link (RigidBody) to which this frame F is attached).
|
| virtual math::RigidTransform< T > | GetFixedOffsetPoseInBody (const math::RigidTransform< T > &X_FQ) const |
| | Variant of CalcOffsetPoseInBody() that given the offset pose X_FQ of a frame Q in this frame F, returns the pose X_LQ of frame Q in the link frame L to which this frame is attached.
|
| virtual math::RotationMatrix< T > | GetFixedRotationMatrixInBody (const math::RotationMatrix< T > &R_FQ) const |
| | Calculates and returns the rotation matrix R_LQ that relates link frame L to frame Q via this intermediate frame F, i.e., R_LQ = R_LF * R_FQ (L is the link frame of the Link (RigidBody) to which this frame F is attached).
|
| math::RigidTransform< T > | CalcPoseInWorld (const systems::Context< T > &context) const |
| | Computes and returns the pose X_WF of this frame F in the world frame W as a function of the state of the model stored in context.
|
| math::RigidTransform< T > | CalcPose (const systems::Context< T > &context, const Frame< T > &frame_M) const |
| | Computes and returns the pose X_MF of this frame F in measured in frame_M as a function of the state of the model stored in context.
|
| math::RotationMatrix< T > | CalcRotationMatrix (const systems::Context< T > &context, const Frame< T > &frame_M) const |
| | Calculates and returns the rotation matrix R_MF that relates frame_M and this frame F as a function of the state stored in context.
|
| math::RotationMatrix< T > | CalcRotationMatrixInWorld (const systems::Context< T > &context) const |
| | Calculates and returns the rotation matrix R_WF that relates the world frame W and this frame F as a function of the state stored in context.
|
| const Vector3< T > & | EvalAngularVelocityInWorld (const systems::Context< T > &context) const |
| | Evaluates this frame F's angular velocity measured and expressed in the world frame W.
|
| Vector3< T > | CalcAngularVelocity (const systems::Context< T > &context, const Frame< T > &measured_in_frame, const Frame< T > &expressed_in_frame) const |
| | Calculates this frame F's angular velocity measured in a frame M, expressed in a frame E.
|
| SpatialVelocity< T > | CalcSpatialVelocityInWorld (const systems::Context< T > &context) const |
| | Calculates this frame F's spatial velocity measured and expressed in the world frame W.
|
| SpatialVelocity< T > | CalcSpatialVelocity (const systems::Context< T > &context, const Frame< T > &frame_M, const Frame< T > &frame_E) const |
| | Calculates this frame F's spatial velocity measured in a frame M, expressed in a frame E.
|
| SpatialVelocity< T > | CalcRelativeSpatialVelocityInWorld (const systems::Context< T > &context, const Frame< T > &other_frame) const |
| | Calculates this frame F's spatial velocity relative to another frame B, measured and expressed in the world frame W.
|
| SpatialVelocity< T > | CalcRelativeSpatialVelocity (const systems::Context< T > &context, const Frame< T > &other_frame, const Frame< T > &measured_in_frame, const Frame< T > &expressed_in_frame) const |
| | Calculates this frame F's spatial velocity relative to another frame B, measured in a frame M, expressed in a frame E.
|
| SpatialAcceleration< T > | CalcSpatialAccelerationInWorld (const systems::Context< T > &context) const |
| | Calculates this frame F's spatial acceleration measured and expressed in the world frame W.
|
| SpatialAcceleration< T > | CalcSpatialAcceleration (const systems::Context< T > &context, const Frame< T > &measured_in_frame, const Frame< T > &expressed_in_frame) const |
| | Calculates this frame F's spatial acceleration measured in a frame M, expressed in a frame E.
|
| SpatialAcceleration< T > | CalcRelativeSpatialAccelerationInWorld (const systems::Context< T > &context, const Frame< T > &other_frame) const |
| | Calculates this frame F's spatial acceleration relative to another frame B, measured and expressed in the world frame W.
|
| SpatialAcceleration< T > | CalcRelativeSpatialAcceleration (const systems::Context< T > &context, const Frame< T > &other_frame, const Frame< T > &measured_in_frame, const Frame< T > &expressed_in_frame) const |
| | Calculates this frame F's spatial acceleration relative to another frame B, measured in a frame M, expressed in a frame E.
|
| template<typename ToScalar> |
| std::unique_ptr< Frame< ToScalar > > | CloneToScalar (const internal::MultibodyTree< ToScalar > &tree_clone) const |
| | (Advanced) NVI to DoCloneToScalar() templated on the scalar type of the new clone to be created.
|
| std::unique_ptr< Frame< T > > | ShallowClone () const |
| | (Internal use only) Returns a shallow clone (i.e., dependent elements such as bodies are aliased, not copied) that is not associated with any MbT (so the assigned index, if any, is discarded).
|
| | Frame (const Frame &)=delete |
| Frame & | operator= (const Frame &)=delete |
| | Frame (Frame &&)=delete |
| Frame & | operator= (Frame &&)=delete |
| Public Member Functions inherited from MultibodyElement< T > |
| virtual | ~MultibodyElement () |
| ModelInstanceIndex | model_instance () const |
| | Returns the ModelInstanceIndex of the model instance to which this element belongs.
|
| template<typename = void> |
| const MultibodyPlant< T > & | GetParentPlant () const |
| | Returns the MultibodyPlant that owns this MultibodyElement.
|
| void | DeclareParameters (internal::MultibodyTreeSystem< T > *tree_system) |
| | Declares MultibodyTreeSystem Parameters at MultibodyTreeSystem::Finalize() time.
|
| void | SetDefaultParameters (systems::Parameters< T > *parameters) const |
| | Sets default values of parameters belonging to each MultibodyElement in parameters at a call to MultibodyTreeSystem::SetDefaultParameters().
|
| void | DeclareDiscreteState (internal::MultibodyTreeSystem< T > *tree_system) |
| | Declares MultibodyTreeSystem discrete states.
|
| void | DeclareCacheEntries (internal::MultibodyTreeSystem< T > *tree_system) |
| | (Advanced) Declares all cache entries needed by this element.
|
| bool | is_ephemeral () const |
| | Returns true if this MultibodyElement was added during Finalize() rather than something a user added.
|
| void | set_is_ephemeral (bool is_ephemeral) |
| | (Internal use only) Sets the is_ephemeral flag to the indicated value.
|
| | MultibodyElement (const MultibodyElement &)=delete |
| MultibodyElement & | operator= (const MultibodyElement &)=delete |
| | MultibodyElement (MultibodyElement &&)=delete |
| MultibodyElement & | operator= (MultibodyElement &&)=delete |
|
| virtual math::RigidTransform< T > | DoCalcPoseInBodyFrame (const systems::Parameters< T > ¶meters) const =0 |
| virtual math::RotationMatrix< T > | DoCalcRotationMatrixInBodyFrame (const systems::Parameters< T > ¶meters) const =0 |
| virtual math::RigidTransform< T > | DoCalcOffsetPoseInBody (const systems::Parameters< T > ¶meters, const math::RigidTransform< T > &X_FQ) const |
| virtual math::RotationMatrix< T > | DoCalcOffsetRotationMatrixInBody (const systems::Parameters< T > ¶meters, const math::RotationMatrix< T > &R_FQ) const |
types.
The first three are meant to be called by MultibodyTree::CloneToScalar() when making a clone of the entire tree or a new instance templated on a different scalar type. The only const argument to these methods is the new MultibodyTree clone under construction. Specific Frame subclasses might specify a number of prerequisites on the cloned tree and therefore require it to be at a given state of cloning. See MultibodyTree::CloneToScalar() for a list of prerequisites that are guaranteed to be satisfied during the cloning process.
|
| virtual std::unique_ptr< Frame< double > > | DoCloneToScalar (const internal::MultibodyTree< double > &tree_clone) const =0 |
| | Clones this Frame (templated on T) to a frame templated on double.
|
| virtual std::unique_ptr< Frame< AutoDiffXd > > | DoCloneToScalar (const internal::MultibodyTree< AutoDiffXd > &tree_clone) const =0 |
| | Clones this Frame (templated on T) to a frame templated on AutoDiffXd.
|
| virtual std::unique_ptr< Frame< symbolic::Expression > > | DoCloneToScalar (const internal::MultibodyTree< symbolic::Expression > &) const =0 |
| virtual std::unique_ptr< Frame< T > > | DoShallowClone () const |
| | NVI for ShallowClone().
|
| Protected Member Functions inherited from MultibodyElement< T > |
| | MultibodyElement () |
| | Default constructor made protected so that sub-classes can still declare their default constructors if they need to.
|
| | MultibodyElement (ModelInstanceIndex model_instance) |
| | Constructor which allows specifying a model instance.
|
| | MultibodyElement (ModelInstanceIndex model_instance, int64_t index) |
| | Both the model instance and element index are specified.
|
| template<typename ElementIndexType> |
| ElementIndexType | index_impl () const |
| | Returns this element's unique index.
|
| template<typename ElementOrdinalType = int64_t> |
| ElementOrdinalType | ordinal_impl () const |
| | Returns this element's unique ordinal.
|
| const internal::MultibodyTree< T > & | get_parent_tree () const |
| | Returns a constant reference to the parent MultibodyTree that owns this element.
|
| const internal::MultibodyTreeSystem< T > & | GetParentTreeSystem () const |
| | Returns a constant reference to the parent MultibodyTreeSystem that owns the parent MultibodyTree that owns this element.
|
| void | SetTopology () |
| | (Internal use only) Gives MultibodyElement-derived objects the opportunity to set data members that depend on topology and coordinate assignments having been finalized.
|
| virtual void | DoDeclareDiscreteState (internal::MultibodyTreeSystem< T > *) |
| | Implementation of the NVI DeclareDiscreteState().
|
| virtual void | DoDeclareCacheEntries (internal::MultibodyTreeSystem< T > *) |
| | Derived classes must override this method to declare cache entries needed by this element.
|
| systems::NumericParameterIndex | DeclareNumericParameter (internal::MultibodyTreeSystem< T > *tree_system, const systems::BasicVector< T > &model_vector) |
| | To be used by MultibodyElement-derived objects when declaring parameters in their implementation of DoDeclareParameters().
|
| systems::AbstractParameterIndex | DeclareAbstractParameter (internal::MultibodyTreeSystem< T > *tree_system, const AbstractValue &model_value) |
| | To be used by MultibodyElement-derived objects when declaring parameters in their implementation of DoDeclareParameters().
|
| systems::DiscreteStateIndex | DeclareDiscreteState (internal::MultibodyTreeSystem< T > *tree_system, const VectorX< T > &model_value) |
| | To be used by MultibodyElement-derived objects when declaring discrete states in their implementation of DoDeclareDiscreteStates().
|
| systems::CacheEntry & | DeclareCacheEntry (internal::MultibodyTreeSystem< T > *tree_system, std::string description, systems::ValueProducer value_producer, std::set< systems::DependencyTicket > prerequisites_of_calc) |
| | To be used by MultibodyElement-derived objects when declaring cache entries in their implementation of DoDeclareCacheEntries().
|
| bool | has_parent_tree () const |
| | Returns true if this multibody element has a parent tree, otherwise false.
|
|
These functions work directly with the frame body pose cache entry.
|
| const math::RigidTransform< T > & | get_X_LF (const internal::FrameBodyPoseCache< T > &frame_body_poses) const |
| | (Internal use only) A Frame's pose-in-parent-frame X_PF can be parameterized, the parent frame's pose may also be parameterized, and so on.
|
| const math::RigidTransform< T > & | get_X_BF (const internal::FrameBodyPoseCache< T > &frame_body_poses) const |
| | (Internal use only) Given an already up-to-date frame body pose cache, extract X_BF for this Frame from it.
|
| const math::RigidTransform< T > & | get_X_FB (const internal::FrameBodyPoseCache< T > &frame_body_poses) const |
| | (Internal use only) Given an already up-to-date frame body pose cache, extract X_FB (=X_BF⁻¹) for this Frame from it.
|
| bool | is_X_BF_identity (const internal::FrameBodyPoseCache< T > &frame_body_poses) const |
| | (Internal use only) Given an already up-to-date frame body pose cache, returns whether X_BF (and thus X_FB) is exactly identity.
|
| | Frame (const std::string &name, const Link< T > &link, std::optional< ModelInstanceIndex > model_instance={}) |
| | Only derived classes can use this constructor.
|
| virtual void | DoDeclareFrameParameters (internal::MultibodyTreeSystem< T > *) |
| | Called by DoDeclareParameters().
|
| virtual void | DoSetDefaultFrameParameters (systems::Parameters< T > *) const |
| | Called by DoSetDefaultParameters().
|