DART
6.10.1
|
The Frame class serves as the backbone of DART's kinematic tree structure. More...
#include <Frame.hpp>
Public Types | |
using | EntitySignal = common::Signal< void(const Entity *)> |
using | FrameChangedSignal = common::Signal< void(const Entity *, const Frame *_oldFrame, const Frame *_newFrame)> |
using | NameChangedSignal = common::Signal< void(const Entity *, const std::string &_oldName, const std::string &_newName)> |
Public Member Functions | |
Frame (const Frame &)=delete | |
~Frame () override | |
Destructor. More... | |
virtual const Eigen::Isometry3d & | getRelativeTransform () const =0 |
Get the transform of this Frame with respect to its parent Frame. More... | |
const Eigen::Isometry3d & | getWorldTransform () const |
Get the transform of this Frame with respect to the World Frame. More... | |
Eigen::Isometry3d | getTransform (const Frame *_withRespectTo=Frame::World()) const |
Get the transform of this Frame with respect to some other Frame. More... | |
Eigen::Isometry3d | getTransform (const Frame *withRespectTo, const Frame *inCoordinatesOf) const |
Get the transform of this Frame with respect to some other Frame. More... | |
virtual const Eigen::Vector6d & | getRelativeSpatialVelocity () const =0 |
Get the spatial velocity of this Frame relative to its parent Frame, in its own coordinates. More... | |
const Eigen::Vector6d & | getSpatialVelocity () const |
Get the total spatial velocity of this Frame in the coordinates of this Frame. More... | |
Eigen::Vector6d | getSpatialVelocity (const Frame *_relativeTo, const Frame *_inCoordinatesOf) const |
Get the spatial velocity of this Frame relative to some other Frame. More... | |
Eigen::Vector6d | getSpatialVelocity (const Eigen::Vector3d &_offset) const |
Get the spatial velocity of a fixed point in this Frame. More... | |
Eigen::Vector6d | getSpatialVelocity (const Eigen::Vector3d &_offset, const Frame *_relativeTo, const Frame *_inCoordinatesOf) const |
Get the spatial velocity of a fixed point in this Frame. More... | |
Eigen::Vector3d | getLinearVelocity (const Frame *_relativeTo=Frame::World(), const Frame *_inCoordinatesOf=Frame::World()) const |
Get the linear portion of classical velocity of this Frame relative to some other Frame. More... | |
Eigen::Vector3d | getLinearVelocity (const Eigen::Vector3d &_offset, const Frame *_relativeTo=Frame::World(), const Frame *_inCoordinatesOf=Frame::World()) const |
Get the linear velocity of a point that is fixed in this Frame. More... | |
Eigen::Vector3d | getAngularVelocity (const Frame *_relativeTo=Frame::World(), const Frame *_inCoordinatesOf=Frame::World()) const |
Get the angular portion of classical velocity of this Frame relative to some other Frame. More... | |
virtual const Eigen::Vector6d & | getRelativeSpatialAcceleration () const =0 |
Get the spatial acceleration of this Frame relative to its parent Frame, in the coordinates of this Frame. More... | |
virtual const Eigen::Vector6d & | getPrimaryRelativeAcceleration () const =0 |
The Featherstone ABI algorithm exploits a component of the spatial acceleration which we refer to as the partial acceleration, accessible by getPartialAcceleration(). More... | |
virtual const Eigen::Vector6d & | getPartialAcceleration () const =0 |
The Featherstone ABI algorithm exploits a component of the spatial acceleration which we refer to as the partial acceleration. More... | |
const Eigen::Vector6d & | getSpatialAcceleration () const |
Get the total spatial acceleration of this Frame in the coordinates of this Frame. More... | |
Eigen::Vector6d | getSpatialAcceleration (const Frame *_relativeTo, const Frame *_inCoordinatesOf) const |
Get the spatial acceleration of this Frame relative to some other Frame. More... | |
Eigen::Vector6d | getSpatialAcceleration (const Eigen::Vector3d &_offset) const |
Get the spatial acceleration of a fixed point in this Frame. More... | |
Eigen::Vector6d | getSpatialAcceleration (const Eigen::Vector3d &_offset, const Frame *_relativeTo, const Frame *_inCoordinatesOf) const |
Get the spatial acceleration of a fixed point in this Frame. More... | |
Eigen::Vector3d | getLinearAcceleration (const Frame *_relativeTo=Frame::World(), const Frame *_inCoordinatesOf=Frame::World()) const |
Get the linear portion of classical acceleration of this Frame relative to some other Frame. More... | |
Eigen::Vector3d | getLinearAcceleration (const Eigen::Vector3d &_offset, const Frame *_relativeTo=Frame::World(), const Frame *_inCoordinatesOf=Frame::World()) const |
Eigen::Vector3d | getAngularAcceleration (const Frame *_relativeTo=Frame::World(), const Frame *_inCoordinatesOf=Frame::World()) const |
Get the angular portion of classical acceleration of this Frame relative to some other Frame. More... | |
const std::set< Entity * > & | getChildEntities () |
Get a container with the Entities that are children of this Frame. More... | |
const std::set< const Entity * > | getChildEntities () const |
Get a container with the Entities that are children of this Frame. More... | |
std::size_t | getNumChildEntities () const |
Get the number of Entities that are currently children of this Frame. More... | |
const std::set< Frame * > & | getChildFrames () |
Get a container with the Frames that are children of this Frame. More... | |
std::set< const Frame * > | getChildFrames () const |
Get a container with the Frames that are children of this Frame. More... | |
std::size_t | getNumChildFrames () const |
Get the number of Frames that are currently children of this Frame. More... | |
bool | isShapeFrame () const |
Returns true if this Frame is a ShapeFrame. More... | |
virtual ShapeFrame * | asShapeFrame () |
Convert 'this' into a ShapeFrame pointer if Frame is a ShapeFrame, otherwise return nullptr. More... | |
virtual const ShapeFrame * | asShapeFrame () const |
Convert 'const this' into a ShapeFrame pointer if Frame is a ShapeFrame, otherwise return nullptr. More... | |
bool | isWorld () const |
Returns true if this Frame is the World Frame. More... | |
virtual void | dirtyTransform () override |
Notify the transformation updates of this Frame and all its children are needed. More... | |
virtual void | dirtyVelocity () override |
Notify the velocity updates of this Frame and all its children are needed. More... | |
virtual void | dirtyAcceleration () override |
Notify the acceleration updates of this Frame and all its children are needed. More... | |
virtual const std::string & | setName (const std::string &_name)=0 |
Set name. More... | |
virtual const std::string & | getName () const =0 |
Return the name of this Entity. More... | |
Frame * | getParentFrame () |
Get the parent (reference) frame of this Entity. More... | |
const Frame * | getParentFrame () const |
Get the parent (reference) frame of this Entity. More... | |
bool | descendsFrom (const Frame *_someFrame) const |
Returns true if and only if this Entity is itself (i.e. More... | |
bool | isFrame () const |
True iff this Entity is also a Frame. More... | |
bool | isQuiet () const |
Returns true if this Entity is set to be quiet. More... | |
virtual void | notifyTransformUpdate () |
Notify the transformation update of this Entity that its parent Frame's pose is needed. More... | |
bool | needsTransformUpdate () const |
Returns true iff a transform update is needed for this Entity. More... | |
virtual void | notifyVelocityUpdate () |
Notify the velocity update of this Entity that its parent Frame's velocity is needed. More... | |
bool | needsVelocityUpdate () const |
Returns true iff a velocity update is needed for this Entity. More... | |
virtual void | notifyAccelerationUpdate () |
Notify the acceleration of this Entity that its parent Frame's acceleration is needed. More... | |
bool | needsAccelerationUpdate () const |
Returns true iff an acceleration update is needed for this Entity. More... | |
Static Public Member Functions | |
static Frame * | World () |
static std::shared_ptr< Frame > | WorldShared () |
Protected Types | |
enum | ConstructAbstractTag { ConstructAbstract } |
Used when constructing a pure abstract class, because calling the Frame constructor is just a formality. More... | |
enum | ConstructFrameTag { ConstructFrame } |
Used when constructing a Frame class, because the Frame constructor will take care of setting up the parameters you pass into it. More... | |
Protected Member Functions | |
Frame (Frame *_refFrame) | |
Constructor for typical usage. More... | |
Frame () | |
Default constructor, delegates to Frame(ConstructAbstract_t) More... | |
Frame (ConstructAbstractTag) | |
Constructor for use by pure abstract classes. More... | |
virtual void | changeParentFrame (Frame *_newParentFrame) override |
Used by derived classes to change their parent frames. More... | |
virtual void | processNewEntity (Entity *_newChildEntity) |
Called during a parent Frame change to allow extensions of the Frame class to handle new children in customized ways. More... | |
virtual void | processRemovedEntity (Entity *_oldChildEntity) |
Called when a child Entity is removed from its parent Frame. More... | |
void | sendDestructionNotification () const |
Send a destruction notification to all Observers. More... | |
void | addObserver (Observer *_observer) const |
Add an Observer to the list of Observers. More... | |
void | removeObserver (Observer *_observer) const |
Remove an Observer from the list of Observers. More... | |
Protected Attributes | |
Eigen::Isometry3d | mWorldTransform |
World transform of this Frame. More... | |
Eigen::Vector6d | mVelocity |
Total velocity of this Frame, in the coordinates of this Frame. More... | |
Eigen::Vector6d | mAcceleration |
Total acceleration of this Frame, in the coordinates of this Frame. More... | |
std::set< Frame * > | mChildFrames |
Container of this Frame's child Frames. More... | |
std::set< Entity * > | mChildEntities |
Container of this Frame's child Entities. More... | |
Frame * | mParentFrame |
Parent frame of this Entity. More... | |
bool | mNeedTransformUpdate |
Does this Entity need a Transform update. More... | |
bool | mNeedVelocityUpdate |
Does this Entity need a Velocity update. More... | |
bool | mNeedAccelerationUpdate |
Does this Entity need an Acceleration update. More... | |
FrameChangedSignal | mFrameChangedSignal |
Frame changed signal. More... | |
NameChangedSignal | mNameChangedSignal |
Name changed signal. More... | |
EntitySignal | mTransformUpdatedSignal |
Transform changed signal. More... | |
EntitySignal | mVelocityChangedSignal |
Velocity changed signal. More... | |
EntitySignal | mAccelerationChangedSignal |
Acceleration changed signal. More... | |
std::set< Observer * > | mObservers |
List of current Observers. More... | |
Private Types | |
enum | ConstructWorldTag { ConstructWorld } |
Used when constructing the World. More... | |
Private Member Functions | |
Frame (ConstructWorldTag) | |
Constructor only to be used by the WorldFrame class. More... | |
Private Attributes | |
const bool | mAmWorld |
Contains whether or not this is the World Frame. More... | |
bool | mAmShapeFrame |
Contains whether or not this is a ShapeFrame. More... | |
Friends | |
class | Entity |
class | WorldFrame |
class | ShapeFrame |
Slot registers | |
const bool | mAmQuiet |
Whether or not this Entity is set to be quiet. More... | |
bool | mAmFrame |
Whether or not this Entity is a Frame. More... | |
common::SlotRegister< FrameChangedSignal > | onFrameChanged |
Slot register for frame changed signal. More... | |
common::SlotRegister< NameChangedSignal > | onNameChanged |
Slot register for name changed signal. More... | |
common::SlotRegister< EntitySignal > | onTransformUpdated |
Slot register for transform updated signal. More... | |
common::SlotRegister< EntitySignal > | onVelocityChanged |
Slot register for velocity updated signal. More... | |
common::SlotRegister< EntitySignal > | onAccelerationChanged |
Slot register for acceleration updated signal. More... | |
The Frame class serves as the backbone of DART's kinematic tree structure.
Frame inherits Entity, so it exists within a reference Frame. This class keeps track of both its local (relative) and global (world) transforms, velocities, and accelerations. It also notifies every child Entity when a transform, velocity, or acceleration has changed locally or globally.
Entity class is inherited by using virtual inheritence to solve the so-called "diamond problem". Because of that, the Entity's constructor will be called directly by the most derived class's constructor.
|
inherited |
|
inherited |
|
inherited |
|
protected |
Used when constructing a pure abstract class, because calling the Frame constructor is just a formality.
Enumerator | |
---|---|
ConstructAbstract |
|
protectedinherited |
|
private |
|
delete |
|
override |
Destructor.
|
explicitprotected |
Constructor for typical usage.
|
protected |
Default constructor, delegates to Frame(ConstructAbstract_t)
|
explicitprotected |
Constructor for use by pure abstract classes.
|
explicitprivate |
Constructor only to be used by the WorldFrame class.
|
protectedinherited |
Add an Observer to the list of Observers.
|
virtual |
Convert 'this' into a ShapeFrame pointer if Frame is a ShapeFrame, otherwise return nullptr.
Reimplemented in dart::dynamics::ShapeFrame.
|
virtual |
Convert 'const this' into a ShapeFrame pointer if Frame is a ShapeFrame, otherwise return nullptr.
Reimplemented in dart::dynamics::ShapeFrame.
|
overrideprotectedvirtual |
Used by derived classes to change their parent frames.
Reimplemented from dart::dynamics::Entity.
|
inherited |
|
overridevirtual |
Notify the acceleration updates of this Frame and all its children are needed.
Reimplemented from dart::dynamics::Entity.
Reimplemented in dart::dynamics::BodyNode.
|
overridevirtual |
Notify the transformation updates of this Frame and all its children are needed.
Reimplemented from dart::dynamics::Entity.
Reimplemented in dart::dynamics::BodyNode.
|
overridevirtual |
Notify the velocity updates of this Frame and all its children are needed.
Reimplemented from dart::dynamics::Entity.
Reimplemented in dart::dynamics::BodyNode.
Eigen::Vector3d dart::dynamics::Frame::getAngularAcceleration | ( | const Frame * | _relativeTo = Frame::World() , |
const Frame * | _inCoordinatesOf = Frame::World() |
||
) | const |
Eigen::Vector3d dart::dynamics::Frame::getAngularVelocity | ( | const Frame * | _relativeTo = Frame::World() , |
const Frame * | _inCoordinatesOf = Frame::World() |
||
) | const |
const std::set< Entity * > & dart::dynamics::Frame::getChildEntities | ( | ) |
const std::set< const Entity * > dart::dynamics::Frame::getChildEntities | ( | ) | const |
Get a container with the Entities that are children of this Frame.
Note that this is version is slightly less efficient than the non-const version because it needs to rebuild a set where each pointer is converted to be a const pointer.
const std::set< Frame * > & dart::dynamics::Frame::getChildFrames | ( | ) |
std::set< const Frame * > dart::dynamics::Frame::getChildFrames | ( | ) | const |
Get a container with the Frames that are children of this Frame.
Note that this version is less efficient than the non-const version because it needs to rebuild a set so that the entries are const.
Eigen::Vector3d dart::dynamics::Frame::getLinearAcceleration | ( | const Eigen::Vector3d & | _offset, |
const Frame * | _relativeTo = Frame::World() , |
||
const Frame * | _inCoordinatesOf = Frame::World() |
||
) | const |
Eigen::Vector3d dart::dynamics::Frame::getLinearAcceleration | ( | const Frame * | _relativeTo = Frame::World() , |
const Frame * | _inCoordinatesOf = Frame::World() |
||
) | const |
Eigen::Vector3d dart::dynamics::Frame::getLinearVelocity | ( | const Eigen::Vector3d & | _offset, |
const Frame * | _relativeTo = Frame::World() , |
||
const Frame * | _inCoordinatesOf = Frame::World() |
||
) | const |
Eigen::Vector3d dart::dynamics::Frame::getLinearVelocity | ( | const Frame * | _relativeTo = Frame::World() , |
const Frame * | _inCoordinatesOf = Frame::World() |
||
) | const |
|
pure virtualinherited |
Return the name of this Entity.
Implemented in dart::dynamics::WorldFrame, dart::dynamics::SimpleFrame, dart::dynamics::PointMassNotifier, and dart::dynamics::BodyNode.
std::size_t dart::dynamics::Frame::getNumChildEntities | ( | ) | const |
Get the number of Entities that are currently children of this Frame.
std::size_t dart::dynamics::Frame::getNumChildFrames | ( | ) | const |
Get the number of Frames that are currently children of this Frame.
|
inherited |
Get the parent (reference) frame of this Entity.
|
inherited |
Get the parent (reference) frame of this Entity.
|
pure virtual |
The Featherstone ABI algorithm exploits a component of the spatial acceleration which we refer to as the partial acceleration.
This function returns that component of acceleration.
Implemented in dart::dynamics::WorldFrame, dart::dynamics::SimpleFrame, dart::dynamics::FixedFrame, and dart::dynamics::BodyNode.
|
pure virtual |
The Featherstone ABI algorithm exploits a component of the spatial acceleration which we refer to as the partial acceleration, accessible by getPartialAcceleration().
We save operations during our forward kinematics by computing and storing the partial acceleration separately from the rest of the Frame's acceleration. getPrimaryRelativeAcceleration() will return the portion of the relative spatial acceleration that is not contained in the partial acceleration. To get the full spatial acceleration of this Frame relative to its parent Frame, use getRelativeSpatialAcceleration(). To get the full spatial acceleration of this Frame relative to the World Frame, use getSpatialAcceleration().
Implemented in dart::dynamics::WorldFrame, dart::dynamics::SimpleFrame, dart::dynamics::FixedFrame, and dart::dynamics::BodyNode.
|
pure virtual |
Get the spatial acceleration of this Frame relative to its parent Frame, in the coordinates of this Frame.
Implemented in dart::dynamics::WorldFrame, dart::dynamics::SimpleFrame, dart::dynamics::FixedFrame, and dart::dynamics::BodyNode.
|
pure virtual |
Get the spatial velocity of this Frame relative to its parent Frame, in its own coordinates.
Implemented in dart::dynamics::WorldFrame, dart::dynamics::SimpleFrame, dart::dynamics::FixedFrame, and dart::dynamics::BodyNode.
|
pure virtual |
Get the transform of this Frame with respect to its parent Frame.
Implemented in dart::dynamics::WorldFrame, dart::dynamics::SimpleFrame, dart::dynamics::FixedFrame, and dart::dynamics::BodyNode.
const Eigen::Vector6d & dart::dynamics::Frame::getSpatialAcceleration | ( | ) | const |
Eigen::Vector6d dart::dynamics::Frame::getSpatialAcceleration | ( | const Eigen::Vector3d & | _offset | ) | const |
Eigen::Vector6d dart::dynamics::Frame::getSpatialAcceleration | ( | const Eigen::Vector3d & | _offset, |
const Frame * | _relativeTo, | ||
const Frame * | _inCoordinatesOf | ||
) | const |
Get the spatial acceleration of a fixed point in this Frame.
Eigen::Vector6d dart::dynamics::Frame::getSpatialAcceleration | ( | const Frame * | _relativeTo, |
const Frame * | _inCoordinatesOf | ||
) | const |
const Eigen::Vector6d & dart::dynamics::Frame::getSpatialVelocity | ( | ) | const |
Eigen::Vector6d dart::dynamics::Frame::getSpatialVelocity | ( | const Eigen::Vector3d & | _offset | ) | const |
Eigen::Vector6d dart::dynamics::Frame::getSpatialVelocity | ( | const Eigen::Vector3d & | _offset, |
const Frame * | _relativeTo, | ||
const Frame * | _inCoordinatesOf | ||
) | const |
Get the spatial velocity of a fixed point in this Frame.
Eigen::Vector6d dart::dynamics::Frame::getSpatialVelocity | ( | const Frame * | _relativeTo, |
const Frame * | _inCoordinatesOf | ||
) | const |
Eigen::Isometry3d dart::dynamics::Frame::getTransform | ( | const Frame * | _withRespectTo = Frame::World() | ) | const |
const Eigen::Isometry3d & dart::dynamics::Frame::getWorldTransform | ( | ) | const |
|
inherited |
Returns true if this Entity is set to be quiet.
A quiet entity is unknown to its parent Frame. It will not be tracked by its parent; it will not receive notifications from its parent, and it will not be rendered. The advantage to a quiet Entity is that it has less overhead when constructing and deconstructing, which makes it more suitable for temporary objects.
bool dart::dynamics::Frame::isShapeFrame | ( | ) | const |
Returns true if this Frame is a ShapeFrame.
|
inherited |
Returns true iff an acceleration update is needed for this Entity.
|
inherited |
Returns true iff a transform update is needed for this Entity.
|
inherited |
Returns true iff a velocity update is needed for this Entity.
|
virtualinherited |
|
virtualinherited |
|
virtualinherited |
|
protectedvirtual |
Called during a parent Frame change to allow extensions of the Frame class to handle new children in customized ways.
This function is a no op unless an inheriting class (such as BodyNode) overrides it.
Reimplemented in dart::dynamics::BodyNode.
|
protectedvirtual |
Called when a child Entity is removed from its parent Frame.
This allows special post-processing to be performed for extensions of the Frame class.
Reimplemented in dart::dynamics::BodyNode.
|
protectedinherited |
Remove an Observer from the list of Observers.
|
protectedinherited |
Send a destruction notification to all Observers.
This will cause all Observers to behave as if this Subject has been permanently deleted, so it should only be called when that behavior is desired.
|
pure virtualinherited |
Set name.
Some implementations of Entity may make alterations to the name that gets passed in. The final name that this entity will use gets passed back in the return of this function.
Implemented in dart::dynamics::WorldFrame, dart::dynamics::SimpleFrame, dart::dynamics::PointMassNotifier, and dart::dynamics::BodyNode.
|
static |
|
static |
|
friend |
|
friend |
|
friend |
|
mutableprotected |
Total acceleration of this Frame, in the coordinates of this Frame.
Do not use directly! Use getSpatialAcceleration() to access this quantity
|
protectedinherited |
Acceleration changed signal.
|
privateinherited |
Whether or not this Entity is set to be quiet.
|
private |
Contains whether or not this is a ShapeFrame.
|
private |
Contains whether or not this is the World Frame.
|
protected |
Container of this Frame's child Entities.
|
protected |
Container of this Frame's child Frames.
|
protectedinherited |
Frame changed signal.
|
protectedinherited |
Name changed signal.
|
mutableprotectedinherited |
Does this Entity need an Acceleration update.
|
mutableprotectedinherited |
Does this Entity need a Transform update.
|
mutableprotectedinherited |
Does this Entity need a Velocity update.
|
mutableprotectedinherited |
List of current Observers.
|
protectedinherited |
Transform changed signal.
|
mutableprotected |
Total velocity of this Frame, in the coordinates of this Frame.
Do not use directly! Use getSpatialVelocity() to access this quantity
|
protectedinherited |
Velocity changed signal.
|
mutableprotected |
World transform of this Frame.
This object is mutable to enable auto-updating to happen in the const member getWorldTransform() function
Do not use directly! Use getWorldTransform() to access this quantity
|
inherited |
Slot register for acceleration updated signal.
|
inherited |
Slot register for frame changed signal.
|
inherited |
Slot register for name changed signal.
|
inherited |
Slot register for transform updated signal.
|
inherited |
Slot register for velocity updated signal.