![]() |
ModelSpace
|
Frame class definition. More...
#include <Frame.hpp>
Public Member Functions | |
Frame (const std::string &name, Frame< T > *par=nullptr, bool free=false) | |
Constructor for the frame object. | |
Joint< T > & | tJoint () |
Function to get reference to the frame's translational joint. | |
Joint< T > & | rJoint () |
Function to get reference to the frame's rotational joint. | |
int | parent (Frame< T > *new_parent) |
Function to assign the frame's parent via pointer. | |
Frame< T > * | parent () |
void | setParentRelAcceleration (CartesianVector< T, 3 > accel) |
Function to set parent relative acceleration of frame. | |
void | setParentRelAngularAcceleration (CartesianVector< T, 3 > alpha) |
Function to set parent relative angular acceleration. | |
CartesianVector< T, 3 > | parentRelAcceleration () |
Function to get the acceleration of the frame relative to parent expressed in parent coords. | |
CartesianVector< T, 3 > | parentRelAngularAcceleration () |
Function to get angular acceleration relative to parent in frame coords. | |
void | rootRelPosition (CartesianVector< T, 3 > &pos_o_root__root) |
Returns the position of the frame origin wrt the root origin, in root coordinates. | |
CartesianVector< T, 3 > | rootRelPosition () |
void | rootRelVelocity (CartesianVector< T, 3 > &vel_o_root__root) |
Returns the velocity of the frame origin wrt the root origin, in root coordinates. | |
CartesianVector< T, 3 > | rootRelVelocity () |
void | rootRelAcceleration (CartesianVector< T, 3 > &acc_o_root__root) |
Returns the acceleration of the frame origin wrt the root origin, in root coordinates. | |
CartesianVector< T, 3 > | rootRelAcceleration () |
void | rootRelQuaternion (Quaternion< T > &quat_f_root) |
Returns the quaternion representing the frame origin wrt the root frame. | |
Quaternion< T > | rootRelQuaternion () |
void | rootRelDCM (DCM< T > &dcm_f_root) |
Returns the DCM of the frame origin wrt the root frame. | |
DCM< T > | rootRelDCM () |
void | rootRelAngularVelocity (CartesianVector< T, 3 > &w_f_root__f) |
Returns the angular velocity of the frame origin wrt the root, expressed in this frame's coordinates. | |
CartesianVector< T, 3 > | rootRelAngularVelocity () |
void | rootRelAngularAcceleration (CartesianVector< T, 3 > &alpha_f_root__f) |
Returns the angular acceleration of the frame origin wrt the root, expressed in this frame's coordinates. | |
CartesianVector< T, 3 > | rootRelAngularAcceleration () |
int | calcFrameTreeExtForcesMoments () |
Function to recurse through the body and its children to apply external forces and moments to the "correct" body by resolving them to locations where there are degrees of freedom. | |
int | calcFrameTreeExtAcceleration () |
Function to recurse through the body and its children to resolve applied external forces and moments into acceleration and angular acceleration. | |
void | integrator (void *integ_ptr) |
Getter and setter for integrator pointer. | |
void * | integrator () |
void | setStateFromStateVector (const std::array< T, 13 > &state_f_p__f) |
Function to set frame state based on NUM_INTEGRATED_STATES-element state vector. | |
void | getStateAsStateVector (std::array< T, 13 > &state_f_p__f) |
Function to return frame state as a NUM_INTEGRATED_STATES-element state vector. | |
void | getStateVectorDot (std::array< T, 13 > &state_dot) |
Function to get the rate of change in the frame state vector. | |
int | setRootRelPosition (const CartesianVector< T, 3 > &pos_f_root__root) |
Function to set the frame's position relative to root. | |
int | setRootRelVelocity (const CartesianVector< T, 3 > &vel_f_root__root) |
Function to set the frame's velocity relative to root. | |
int | setRootRelAttitude (const Quaternion< T > &quat_f_root) |
Function to set the frame's attitude relative to root. | |
int | setRootRelAngularVelocity (const CartesianVector< T, 3 > &w_f_root__f) |
Function to set the frame's position relative to root. | |
Frame< T > * | getFrameRootPointer () |
Function to get a pointer to this frame's root frame. | |
int | parent (GraphTreeObject *new_parent) |
Function to assign the node's parent via pointer. | |
int | parent (GraphTreeObject &new_parent) |
Function to assign the node's parent via reference. | |
std::vector< GraphTreeObject * > & | children () |
unsigned int | nChildren () |
Getters for number of children and descendants. | |
unsigned int | nDescendants () |
std::string | name () const |
Getter and setter for object name. | |
int | name (const std::string &new_name) |
int | rank () |
Getter for the object rank. | |
virtual int | type () |
Function to indicate type – -1 by default unless implemented downstream. | |
bool | loggable () |
Getter for object logability flag – note no setter because should only be set by this or a derived class in its definition. | |
std::string | address () |
Getter for object's string address. | |
std::vector< std::string > | search (const std::string &address) |
Function to search through the graph tree by string address. | |
GraphTreeObject * | getByAddress (const std::string &address) |
Function to get an object from the graph tree by string address. | |
void | dump (bool recursive=false) |
Function to dump the graph node, optionally including descendents. | |
void | graphNodeInfo () |
Function to return all info associated with a given graph node. | |
void | recurseGraphNodeInfo (unsigned int counter) |
Function to recurse through graph tree and print all node info. | |
virtual int | header (void *logger) |
Function to pass headers for this object to the logger. | |
virtual std::vector< std::string > | header_info () const |
void | findLoggable (std::vector< GraphTreeObject * > &matches) |
Function to find all loggable parameters in this node and its children. | |
virtual int | log (void *logger) |
Function to log data to a logger. | |
void | lock (bool recursive=true) |
Function to lock the graph tree object and its children to changes. | |
void | unlock (bool recursive=true) |
Function to unlock the graph tree and its children for changes. | |
bool | locked () |
Function to return whether graph tree object is locked. | |
Public Attributes | |
clockwerk::DataIO< CartesianVector< T, 3 > > | pos_f_p__p |
clockwerk::DataIO< CartesianVector< T, 3 > > | vel_f_p__p |
clockwerk::DataIO< Quaternion< T > > | quat_f_p |
clockwerk::DataIO< CartesianVector< T, 3 > > | ang_vel_f_p__f |
clockwerk::DataIO< Frame< T > * > | self_id = clockwerk::DataIO<Frame<T>*>(nullptr, "self_id", this) |
Protected Member Functions | |
void | recalculateDescendants () |
Function to recursively re-calculate the number of descendants of a given node on the tree. | |
void | recalculateRank () |
Function to recursively re-calculate the rank of a given node on the tree. | |
std::vector< std::string > | decomposeAddress (std::string address) |
Function to decompose a string into a series of substrings via indexing. | |
void | findMatches (const std::vector< std::string > &subaddresses, const unsigned int &num_subaddresses, unsigned int index, bool match_found, std::vector< GraphTreeObject * > &matches) |
Function to find all addresses mathcing the set of substrings @parem subaddresses A vector of subaddresses to match. | |
std::vector< GraphTreeObject * > | searchNodes (const std::string &address) |
Function to search through the graph tree by string address. | |
int | addChild (GraphTreeObject *child) |
Function to add a child to the graph tree object. | |
int | removeChild (GraphTreeObject *child) |
Function to remove a child from the graph node's children. | |
Protected Attributes | |
CartesianVector< T, 3 > | _acc_f_p__p |
Internal variables to store accelerations applied to this frame. Note: these are not states. They are temporary variables and treated slightly differently. | |
CartesianVector< T, 3 > | _alpha_f_p__f |
Joint< T > | _t_joint |
Translational and rotational joints relating this frame to its parent. Set locked by default. | |
Joint< T > | _r_joint |
Translational. | |
void * | _integrator_ptr = nullptr |
Rotational. | |
Frame< T > * | _parent |
Variable to hold our parent. | |
std::vector< GraphTreeObject * > | _children |
Pointers to the object's children – automatically set to an empty vector, and can be increased to any size. | |
std::string | _name = DEFAULT_NAME |
String name for object. | |
uint16_t | _num_descendants = 0 |
Total number of descendants (includes children of children) of the tree, again not including the tree itself. | |
uint8_t | _num_children = 0 |
Number of direct children of the tree (not including the tree itself) | |
uint8_t | _rank = 0 |
Rank for how far down on the graph tree the object is – starts at zero and maxes out at 256 via variable size. | |
uint8_t | _graph_tree_type = BASE_GRAPH_TREE |
Variable to store graph tree object type. | |
bool | _locked = false |
Variable to lock the graph tree object and prevent structural updates. | |
bool | _loggable = false |
Variable to indicate whether the selected object is loggable. Set to false by default. | |
Frame class definition.
This file defines the frame class, which is the base of all 6-DOF kinematics and dynamics. This frame class is designed for recursive chaining, and represents the relationship of a frame to its parent.
The frame class tracks the frame's relationship to its parent via the following four key parameters: pos_f_p__p - The position of the child frame relative to its parent, in PARENT coords vel_f_p__p - The velocity of the child frame IN THE PARENT FRAME, in PARENT coords. quat_f_p - The attitude quaternion of the child frame relative to its parent ang_vel_f_p__f - The angular velocity of the child frame relative to its parent, in FRAME coords
Frame relationships to their parents are also defined by the Joint class, which is a method for tracking the degrees of freedom (and thus, which channels can have a nonzero velocity value). Each frame has a translational and rotational joint, which sets degrees of freedom in the velocity (represented in parent coordinates) and angular velocity (represented in frame coordinates). The frame joint is set to fully fixed by default, but can be set to free or modified later.
Frame states may be set by calling the parent relative states directly (they are DataIO objects, but buyer beware that you can set the frame states with almost no restrictions.)
Alternatively, users may get and set frame states relative to the root frame by calling the root relative functions which are provided by this class. The functions rootRelPosition, rootRelVelocity, rootRel... and so on all return the frame state relative to root. The functions setRootRel... will set the frame's state relative to the root frame. For many applications it is better to work with the root functions, rather than parent relative functions.
clockwerk::Frame< T >::Frame | ( | const std::string & | name, |
Frame< T > * | par = nullptr , |
||
bool | free = false |
||
) |
Constructor for the frame object.
name | Name of the frame |
par | Parent of the frame. Defaults to nullptr |
free | Boolean indicating whether frame should be free or fixed. |
|
protectedinherited |
Function to add a child to the graph tree object.
child | A pointer to the graph tree object to add to the tree |
|
inherited |
Getter for object's string address.
int clockwerk::Frame< T >::calcFrameTreeExtAcceleration | ( | ) |
Function to recurse through the body and its children to resolve applied external forces and moments into acceleration and angular acceleration.
int clockwerk::Frame< T >::calcFrameTreeExtForcesMoments | ( | ) |
Function to recurse through the body and its children to apply external forces and moments to the "correct" body by resolving them to locations where there are degrees of freedom.
|
protectedinherited |
Function to decompose a string into a series of substrings via indexing.
address | The address to be decomposed |
|
inherited |
Function to dump the graph node, optionally including descendents.
recursive | Parameter indicating whether to dump only one node (default/false) or the entire tree (true) |
|
inherited |
Function to find all loggable parameters in this node and its children.
matches | Expandable vector to hold all matches in the tree |
|
protectedinherited |
Function to find all addresses mathcing the set of substrings @parem subaddresses A vector of subaddresses to match.
num_subaddresses | The number of subaddresses to match |
index | The index of subaddresses to search in |
match_found | Variable indicating whether a match was found higher in the tree |
matches | Implicit return of all matches to the specified address |
|
inherited |
Function to get an object from the graph tree by string address.
address | The exact string address to access the variable with |
Frame< T > * clockwerk::Frame< T >::getFrameRootPointer | ( | ) |
Function to get a pointer to this frame's root frame.
void clockwerk::Frame< T >::getStateAsStateVector | ( | std::array< T, 13 > & | state_f_p__f | ) |
Function to return frame state as a NUM_INTEGRATED_STATES-element state vector.
state | Return of NUM_INTEGRATED_STATES-element state vector as [pos][vel][quat][omega] |
void clockwerk::Frame< T >::getStateVectorDot | ( | std::array< T, 13 > & | state_dot | ) |
Function to get the rate of change in the frame state vector.
state_dot | Rate of change in each element of the state vector |
|
inlinevirtualinherited |
Function to pass headers for this object to the logger.
logger | Pointer to logger |
Reimplemented in clockwerk::DataIO< T >, clockwerk::DataIO< bool >, clockwerk::DataIO< clockwerk::Body< double > * >, clockwerk::DataIO< clockwerk::Body< T > * >, clockwerk::DataIO< clockwerk::CartesianVector< double, 2 > >, clockwerk::DataIO< clockwerk::CartesianVector< double, 3 > >, clockwerk::DataIO< clockwerk::CartesianVector< T, 3 > >, clockwerk::DataIO< clockwerk::Euler321< double > >, clockwerk::DataIO< clockwerk::Frame< double > * >, clockwerk::DataIO< clockwerk::Frame< T > * >, clockwerk::DataIO< clockwerk::Matrix< double, 2, 2 > >, clockwerk::DataIO< clockwerk::Matrix< double, 3, 3 > >, clockwerk::DataIO< clockwerk::Matrix< double, 6, 3 > >, clockwerk::DataIO< clockwerk::Matrix< double, 6, 6 > >, clockwerk::DataIO< clockwerk::Matrix< T, 3, 3 > >, clockwerk::DataIO< clockwerk::Node< double > * >, clockwerk::DataIO< clockwerk::Quaternion< double > >, clockwerk::DataIO< clockwerk::Quaternion< T > >, clockwerk::DataIO< clockwerk::Time >, clockwerk::DataIO< double >, clockwerk::DataIO< int >, clockwerk::DataIO< modelspace::integrator_type_e >, clockwerk::DataIO< std::string >, and clockwerk::DataIO< void * >.
|
inlinevirtualinherited |
Reimplemented in clockwerk::Time.
|
inherited |
Function to lock the graph tree object and its children to changes.
recursive | Flag to indicate whether lock should be recursive |
|
inlinevirtualinherited |
Function to log data to a logger.
logger | Pointer to logger |
Reimplemented in clockwerk::Time, clockwerk::DataIO< T >, clockwerk::DataIO< bool >, clockwerk::DataIO< clockwerk::Body< double > * >, clockwerk::DataIO< clockwerk::Body< T > * >, clockwerk::DataIO< clockwerk::CartesianVector< double, 2 > >, clockwerk::DataIO< clockwerk::CartesianVector< double, 3 > >, clockwerk::DataIO< clockwerk::CartesianVector< T, 3 > >, clockwerk::DataIO< clockwerk::Euler321< double > >, clockwerk::DataIO< clockwerk::Frame< double > * >, clockwerk::DataIO< clockwerk::Frame< T > * >, clockwerk::DataIO< clockwerk::Matrix< double, 2, 2 > >, clockwerk::DataIO< clockwerk::Matrix< double, 3, 3 > >, clockwerk::DataIO< clockwerk::Matrix< double, 6, 3 > >, clockwerk::DataIO< clockwerk::Matrix< double, 6, 6 > >, clockwerk::DataIO< clockwerk::Matrix< T, 3, 3 > >, clockwerk::DataIO< clockwerk::Node< double > * >, clockwerk::DataIO< clockwerk::Quaternion< double > >, clockwerk::DataIO< clockwerk::Quaternion< T > >, clockwerk::DataIO< clockwerk::Time >, clockwerk::DataIO< double >, clockwerk::DataIO< int >, clockwerk::DataIO< modelspace::integrator_type_e >, clockwerk::DataIO< std::string >, and clockwerk::DataIO< void * >.
int clockwerk::Frame< T >::parent | ( | Frame< T > * | new_parent | ) |
Function to assign the frame's parent via pointer.
new_parent | The new parent to assign the node to |
|
inherited |
Function to assign the node's parent via reference.
new_parent | The new parent to assign the node to |
|
inherited |
Function to assign the node's parent via pointer.
new_parent | The new parent to assign the node to |
|
inline |
Function to get the acceleration of the frame relative to parent expressed in parent coords.
|
inline |
Function to get angular acceleration relative to parent in frame coords.
|
inherited |
Function to recurse through graph tree and print all node info.
|
protectedinherited |
Function to remove a child from the graph node's children.
child | The child to remove |
|
inline |
Function to get reference to the frame's rotational joint.
void clockwerk::Frame< T >::rootRelAcceleration | ( | CartesianVector< T, 3 > & | acc_o_root__root | ) |
Returns the acceleration of the frame origin wrt the root origin, in root coordinates.
acc_o_root_root | Implicit return of acceleration of origin relative to root, in root |
void clockwerk::Frame< T >::rootRelAngularAcceleration | ( | CartesianVector< T, 3 > & | alpha_f_root__f | ) |
Returns the angular acceleration of the frame origin wrt the root, expressed in this frame's coordinates.
alpha_f_root__f | Implicit return of angular acceleration relative to root, expressed in f frame |
void clockwerk::Frame< T >::rootRelAngularVelocity | ( | CartesianVector< T, 3 > & | w_f_root__f | ) |
Returns the angular velocity of the frame origin wrt the root, expressed in this frame's coordinates.
w_f_root__f | Implicit return of angular velocity relative to root, expressed in f frame |
void clockwerk::Frame< T >::rootRelDCM | ( | DCM< T > & | dcm_f_root | ) |
Returns the DCM of the frame origin wrt the root frame.
att_f_root | Implicit return of attitude relative to root |
void clockwerk::Frame< T >::rootRelPosition | ( | CartesianVector< T, 3 > & | pos_o_root__root | ) |
Returns the position of the frame origin wrt the root origin, in root coordinates.
pos_o_root_root | Implicit return of position of origin relative to root, in root |
void clockwerk::Frame< T >::rootRelQuaternion | ( | Quaternion< T > & | quat_f_root | ) |
Returns the quaternion representing the frame origin wrt the root frame.
att_f_root | Implicit return of attitude relative to root |
void clockwerk::Frame< T >::rootRelVelocity | ( | CartesianVector< T, 3 > & | vel_o_root__root | ) |
Returns the velocity of the frame origin wrt the root origin, in root coordinates.
vel_o_root_root | Implicit return of velocity of origin relative to root in root |
|
inherited |
Function to search through the graph tree by string address.
address | `The address or address chunk to search for |
|
protectedinherited |
Function to search through the graph tree by string address.
address | `The address or address chunk to search for |
|
inline |
Function to set parent relative acceleration of frame.
accel | acceleration of frame relative to parent in parent frame coords |
|
inline |
Function to set parent relative angular acceleration.
alpha | angular accel of the frame relative to parent in parent frame coords |
int clockwerk::Frame< T >::setRootRelAngularVelocity | ( | const CartesianVector< T, 3 > & | w_f_root__f | ) |
Function to set the frame's position relative to root.
w_f_root__f | Angular velocity of this frame wrt root frame origin, as specified in this frame |
int clockwerk::Frame< T >::setRootRelAttitude | ( | const Quaternion< T > & | quat_f_root | ) |
Function to set the frame's attitude relative to root.
quat_f_root | Attitude of this frame wrt root frame |
int clockwerk::Frame< T >::setRootRelPosition | ( | const CartesianVector< T, 3 > & | pos_f_root__root | ) |
Function to set the frame's position relative to root.
pos_f_root__root | Position of this frame wrt root frame origin, as specified in the root frame |
int clockwerk::Frame< T >::setRootRelVelocity | ( | const CartesianVector< T, 3 > & | vel_f_root__root | ) |
Function to set the frame's velocity relative to root.
vel_f_root__root | Velocity of this frame wrt root frame origin, as specified in the root frame |
void clockwerk::Frame< T >::setStateFromStateVector | ( | const std::array< T, 13 > & | state_f_p__f | ) |
Function to set frame state based on NUM_INTEGRATED_STATES-element state vector.
state | NUM_INTEGRATED_STATES-element state vector as [pos][vel][quat][omega] |
|
inline |
Function to get reference to the frame's translational joint.
|
inlinevirtualinherited |
Function to indicate type – -1 by default unless implemented downstream.
|
inherited |
Function to unlock the graph tree and its children for changes.
recursive | Flag to indicate whether unlock should be recursive |
|
protected |
Rotational.
Pointer to the integrator that is integrating this frame. Nullptr if unused
clockwerk::DataIO<CartesianVector<T, 3> > clockwerk::Frame< T >::ang_vel_f_p__f |
Angular velocity of the frame with respect to parent, in frame coordinates
clockwerk::DataIO<CartesianVector<T, 3> > clockwerk::Frame< T >::pos_f_p__p |
Position of the frame with respect to parent, in parent coordinates
clockwerk::DataIO<Quaternion<T> > clockwerk::Frame< T >::quat_f_p |
Attitude quaternion of the frame with respect to parent
clockwerk::DataIO<CartesianVector<T, 3> > clockwerk::Frame< T >::vel_f_p__p |
Velocity of the frame with respect to parent, in parent coordinates. Note that this is the velocity IN the parent frame, which takes into account rotation.