Represents a chain or tree of robot elements (rigid bodies and joints). More...
#include <robot_model.hpp>
Public Types | |
using | ActuatorType = robot_model::ActuatorType |
using | BracketType = robot_model::BracketType |
using | LinkType = robot_model::LinkType |
Public Member Functions | |
bool | addActuator (robot_model::ActuatorType actuator_type) |
Add an element to the robot model with the kinematics/dynamics of an X5 actuator. More... | |
bool | addBracket (robot_model::BracketType bracket_type) |
Add an element to the robot model with the kinematics/dynamics of a bracket between two actuators. More... | |
bool | addEndEffector (EndEffectorType end_effector_type) |
Add an end effector element to the robot model. More... | |
bool | addJoint (HebiJointType joint_type) |
Adds a degree of freedom about the specified axis. More... | |
bool | addJoint (JointType joint_type) |
Adds a degree of freedom about the specified axis. More... | |
bool | addLink (robot_model::LinkType link_type, double extension, double twist, LinkInputType input_type=LinkInputType::RightAngle, LinkOutputType output_type=LinkOutputType::RightAngle) |
Add an element to the robot model with the kinematics/dynamics of a link between two actuators. More... | |
bool | addRigidBody (const Eigen::Matrix4d &com, const Eigen::VectorXd &inertia, double mass, const Eigen::Matrix4d &output) |
Adds a rigid body with the specified properties to the robot model. More... | |
Eigen::Matrix4d | getBaseFrame () const |
Returns the transform from the world coordinate system to the root kinematic body, as set by the setBaseFrame function. More... | |
size_t | getDoFCount () const |
Returns the number of settable degrees of freedom in the kinematic tree. (This is equal to the number of actuators added). More... | |
void | getEndEffector (const Eigen::VectorXd &positions, Eigen::Matrix4d &transform) const |
Generates the forward kinematics to the end effector (leaf node) frame(s). More... | |
void | getFK (FrameType, const Eigen::VectorXd &positions, Matrix4dVector &frames) const |
Generates the forward kinematics for the given robot model. More... | |
void | getFK (HebiFrameType frame_type, const Eigen::VectorXd &positions, Matrix4dVector &frames) const |
Generates the forward kinematics for the given robot model. More... | |
void | getForwardKinematics (FrameType, const Eigen::VectorXd &positions, Matrix4dVector &frames) const |
Generates the forward kinematics for the given robot model. More... | |
void | getForwardKinematics (HebiFrameType frame_type, const Eigen::VectorXd &positions, Matrix4dVector &frames) const |
Generates the forward kinematics for the given robot model. More... | |
size_t | getFrameCount (FrameType frame_type) const |
Return the number of frames in the forward kinematics. More... | |
size_t | getFrameCount (HebiFrameType frame_type) const |
Return the number of frames in the forward kinematics. More... | |
void | getJ (FrameType, const Eigen::VectorXd &positions, MatrixXdVector &jacobians) const |
Generates the Jacobian for each frame in the given kinematic tree. More... | |
void | getJ (HebiFrameType frame_type, const Eigen::VectorXd &positions, MatrixXdVector &jacobians) const |
Generates the Jacobian for each frame in the given kinematic tree. More... | |
void | getJacobianEndEffector (const Eigen::VectorXd &positions, Eigen::MatrixXd &jacobian) const |
Generates the Jacobian for the end effector (leaf node) frames(s). More... | |
void | getJacobians (FrameType, const Eigen::VectorXd &positions, MatrixXdVector &jacobians) const |
Generates the Jacobian for each frame in the given kinematic tree. More... | |
void | getJacobians (HebiFrameType frame_type, const Eigen::VectorXd &positions, MatrixXdVector &jacobians) const |
Generates the Jacobian for each frame in the given kinematic tree. More... | |
void | getJEndEffector (const Eigen::VectorXd &positions, Eigen::MatrixXd &jacobian) const |
Generates the Jacobian for the end effector (leaf node) frames(s). More... | |
void | getMasses (Eigen::VectorXd &masses) const |
Returns the mass of each rigid body (or combination of rigid bodies) in the robot model. More... | |
void | getMetadata (std::vector< MetadataBase > &metadata) const |
Returns the metadata of each component of the robot model. More... | |
RobotModel () | |
Creates a robot model object with no bodies and an identity base frame. More... | |
void | setBaseFrame (const Eigen::Matrix4d &base_frame) |
Set the transform from a world coordinate system to the input of the root element in this robot model object. Defaults to an identity 4x4 matrix. More... | |
template<typename... Args> | |
IKResult | solveIK (const Eigen::VectorXd &initial_positions, Eigen::VectorXd &result, Args... objectives) const |
Solves for an inverse kinematics solution given a set of objectives. More... | |
template<typename... Args> | |
IKResult | solveInverseKinematics (const Eigen::VectorXd &initial_positions, Eigen::VectorXd &result, Args... args) const |
Solves for an inverse kinematics solution given a set of objectives. More... | |
~RobotModel () noexcept | |
Destructor cleans up robot model object, including all managed elements. More... | |
Static Public Member Functions | |
static std::unique_ptr< RobotModel > | loadHRDF (const std::string &file) |
Creates a robot model object with no bodies and an identity base frame. More... | |
Private Member Functions | |
template<typename T > | |
HebiStatusCode | addObjectives (HebiIKPtr ik, const T &objective) const |
template<typename T , typename... Args> | |
HebiStatusCode | addObjectives (HebiIKPtr ik, const T &objective, Args... args) const |
RobotModel (HebiRobotModelPtr) | |
bool | tryAdd (HebiRobotModelElementPtr element) |
Private Attributes | |
const HebiRobotModelPtr | internal_ |
friend | Objective |
Represents a chain or tree of robot elements (rigid bodies and joints).
(Currently, only chains of elements are fully supported)
Definition at line 419 of file robot_model.hpp.
Definition at line 465 of file robot_model.hpp.
Definition at line 466 of file robot_model.hpp.
Definition at line 467 of file robot_model.hpp.
|
private |
Internal function for constructing a RobotModel object from a C API pointer.
Definition at line 93 of file robot_model.cpp.
hebi::robot_model::RobotModel::RobotModel | ( | ) |
Creates a robot model object with no bodies and an identity base frame.
Definition at line 95 of file robot_model.cpp.
|
noexcept |
Destructor cleans up robot model object, including all managed elements.
Definition at line 115 of file robot_model.cpp.
bool hebi::robot_model::RobotModel::addActuator | ( | robot_model::ActuatorType | actuator_type | ) |
Add an element to the robot model with the kinematics/dynamics of an X5 actuator.
actuator_type | The type of actuator to add. |
Definition at line 178 of file robot_model.cpp.
bool hebi::robot_model::RobotModel::addBracket | ( | robot_model::BracketType | bracket_type | ) |
Add an element to the robot model with the kinematics/dynamics of a bracket between two actuators.
bracket_type | The type of bracket to add. |
Definition at line 197 of file robot_model.cpp.
bool hebi::robot_model::RobotModel::addEndEffector | ( | EndEffectorType | end_effector_type | ) |
Add an end effector element to the robot model.
For a "custom" type end effector, indentity transforms and zero mass and inertia parameters are used.
end_effector_type | The type of end_effector to add. |
Definition at line 204 of file robot_model.cpp.
|
inline |
Adds a degree of freedom about the specified axis.
Definition at line 564 of file robot_model.hpp.
bool hebi::robot_model::RobotModel::addJoint | ( | JointType | joint_type | ) |
Adds a degree of freedom about the specified axis.
This does not represent an element with size or mass, but only a connection between two other elements about a particular axis.
joint_type | The axis of rotation or translation about which this joint allows motion. |
Definition at line 174 of file robot_model.cpp.
bool hebi::robot_model::RobotModel::addLink | ( | robot_model::LinkType | link_type, |
double | extension, | ||
double | twist, | ||
LinkInputType | input_type = LinkInputType::RightAngle , |
||
LinkOutputType | output_type = LinkOutputType::RightAngle |
||
) |
Add an element to the robot model with the kinematics/dynamics of a link between two actuators.
link_type | The type of link between the actuators, e.g. a tube link between two X5 or X8 actuators. |
extension | The center-to-center distance between the actuator rotational axes. |
twist | The rotation (in radians) between the actuator axes of rotation. Note that a 0 radian rotation will result in a z-axis offset between the two actuators, and a pi radian rotation will result in the actuator interfaces to this tube being in the same plane, but the rotational axes being anti-parallel. |
input_type | The style of input adapter on the link. |
output_type | The style of input adapter on the link. |
Definition at line 185 of file robot_model.cpp.
|
inlineprivate |
Internal function for resolving variadic template (stops recursion and detects invalid arguments).
Definition at line 433 of file robot_model.hpp.
|
inlineprivate |
Internal function for resolving variadic template.
Definition at line 443 of file robot_model.hpp.
bool hebi::robot_model::RobotModel::addRigidBody | ( | const Eigen::Matrix4d & | com, |
const Eigen::VectorXd & | inertia, | ||
double | mass, | ||
const Eigen::Matrix4d & | output | ||
) |
Adds a rigid body with the specified properties to the robot model.
com | 4x4 matrix of the homogeneous transform to the center of mass location, relative to the input frame of the element. Note that this frame is also the frame the inertia tensor is given in. |
inertia | The 6 element representation (Ixx, Iyy, Izz, Ixy, Ixz, Iyz) of the inertia tensor, in the frame given by the COM. |
output | 4x4 matrix of the homogeneous transform to the output frame, relative to the input frame of the element. |
mass | The mass of this element. |
Definition at line 144 of file robot_model.cpp.
Eigen::Matrix4d hebi::robot_model::RobotModel::getBaseFrame | ( | ) | const |
Returns the transform from the world coordinate system to the root kinematic body, as set by the setBaseFrame function.
Definition at line 125 of file robot_model.cpp.
size_t hebi::robot_model::RobotModel::getDoFCount | ( | ) | const |
Returns the number of settable degrees of freedom in the kinematic tree. (This is equal to the number of actuators added).
Definition at line 141 of file robot_model.cpp.
void hebi::robot_model::RobotModel::getEndEffector | ( | const Eigen::VectorXd & | positions, |
Eigen::Matrix4d & | transform | ||
) | const |
Generates the forward kinematics to the end effector (leaf node) frame(s).
Note – for center of mass frames, this is one per leaf node; for output frames, this is one per output per leaf node, in depth first order.
This overload is for kinematic chains that only have a single leaf node frame.
(Currently, kinematic trees are not fully supported – only kinematic chains – and so there are not other overloads for this function).
positions | A vector of joint positions/angles (in SI units of meters or radians) equal in length to the number of DoFs of the kinematic tree. |
transform | A 4x4 transform that is resized as necessary in the function and filled in with the homogeneous transform to the end effector frame. |
Definition at line 238 of file robot_model.cpp.
void hebi::robot_model::RobotModel::getFK | ( | FrameType | frame_type, |
const Eigen::VectorXd & | positions, | ||
Matrix4dVector & | frames | ||
) | const |
Generates the forward kinematics for the given robot model.
The order of the returned frames is in a depth-first tree. As an example, assume a body A has one output, to which body B is connected to. Body B has two outputs; actuator C is attached to the first output and actuator E is attached to the second output. Body D is attached to the only output of actuator C:
(BASE) A - B(1) - C - D (2) | E
For center of mass frames, the returned frames would be A-B-C-D-E.
For output frames, the returned frames would be A-B(1)-C-D-B(2)-E.
frame_type | Which type of frame to consider – see FrameType enum. |
positions | A vector of joint positions/angles (in SI units of meters or radians) equal in length to the number of DoFs of the kinematic tree. |
frames | An array of 4x4 transforms; this is resized as necessary in the function and filled in with the 4x4 homogeneous transform of each frame. Note that the number of frames depends on the frame type. |
Definition at line 217 of file robot_model.cpp.
|
inline |
Generates the forward kinematics for the given robot model.
Definition at line 662 of file robot_model.hpp.
void hebi::robot_model::RobotModel::getForwardKinematics | ( | FrameType | frame_type, |
const Eigen::VectorXd & | positions, | ||
Matrix4dVector & | frames | ||
) | const |
Generates the forward kinematics for the given robot model.
See getFK for details.
Definition at line 212 of file robot_model.cpp.
|
inline |
Generates the forward kinematics for the given robot model.
Definition at line 625 of file robot_model.hpp.
size_t hebi::robot_model::RobotModel::getFrameCount | ( | FrameType | frame_type | ) | const |
Return the number of frames in the forward kinematics.
Note that this depends on the type of frame requested – for center of mass frames, there is one per added body; for output frames, there is one per output per body.
frame_type | Which type of frame to consider – see HebiFrameType enum. |
Definition at line 137 of file robot_model.cpp.
|
inline |
Return the number of frames in the forward kinematics.
Definition at line 523 of file robot_model.hpp.
void hebi::robot_model::RobotModel::getJ | ( | FrameType | frame_type, |
const Eigen::VectorXd & | positions, | ||
MatrixXdVector & | jacobians | ||
) | const |
Generates the Jacobian for each frame in the given kinematic tree.
frame_type | Which type of frame to consider – see FrameType enum. |
positions | A vector of joint positions/angles (in SI units of meters or radians) equal in length to the number of DoFs of the kinematic tree. |
jacobians | A vector (length equal to the number of frames) of matrices; each matrix is a (6 x number of dofs) jacobian matrix for the corresponding frame of reference on the robot. This vector is resized as necessary inside this function. |
Definition at line 259 of file robot_model.cpp.
|
inline |
Generates the Jacobian for each frame in the given kinematic tree.
Definition at line 788 of file robot_model.hpp.
void hebi::robot_model::RobotModel::getJacobianEndEffector | ( | const Eigen::VectorXd & | positions, |
Eigen::MatrixXd & | jacobian | ||
) | const |
Generates the Jacobian for the end effector (leaf node) frames(s).
See getJEndEffector for details.
Definition at line 281 of file robot_model.cpp.
void hebi::robot_model::RobotModel::getJacobians | ( | FrameType | frame_type, |
const Eigen::VectorXd & | positions, | ||
MatrixXdVector & | jacobians | ||
) | const |
Generates the Jacobian for each frame in the given kinematic tree.
See getJ for details.
Definition at line 255 of file robot_model.cpp.
|
inline |
Generates the Jacobian for each frame in the given kinematic tree.
Definition at line 763 of file robot_model.hpp.
void hebi::robot_model::RobotModel::getJEndEffector | ( | const Eigen::VectorXd & | positions, |
Eigen::MatrixXd & | jacobian | ||
) | const |
Generates the Jacobian for the end effector (leaf node) frames(s).
Note – for center of mass frames, this is one per leaf node; for output frames, this is one per output per leaf node, in depth first order.
This overload is for kinematic chains that only have a single leaf node frame.
(Currently, kinematic trees are not fully supported – only kinematic chains – and so there are not other overloads for this function).
positions | A vector of joint positions/angles (in SI units of meters or radians) equal in length to the number of DoFs of the kinematic tree. |
jacobian | A (6 x number of dofs) jacobian matrix for the corresponding end effector frame of reference on the robot. This vector is resized as necessary inside this function. |
Definition at line 284 of file robot_model.cpp.
void hebi::robot_model::RobotModel::getMasses | ( | Eigen::VectorXd & | masses | ) | const |
Returns the mass of each rigid body (or combination of rigid bodies) in the robot model.
masses | A vector which is filled with the masses in the robot model. This vector is resized as necessary inside this function (it is set to have length equal to the number of com frames). |
Definition at line 296 of file robot_model.cpp.
void hebi::robot_model::RobotModel::getMetadata | ( | std::vector< MetadataBase > & | metadata | ) | const |
Returns the metadata of each component of the robot model.
Definition at line 307 of file robot_model.cpp.
|
static |
Creates a robot model object with no bodies and an identity base frame.
Definition at line 97 of file robot_model.cpp.
void hebi::robot_model::RobotModel::setBaseFrame | ( | const Eigen::Matrix4d & | base_frame | ) |
Set the transform from a world coordinate system to the input of the root element in this robot model object. Defaults to an identity 4x4 matrix.
The world coordinate system is used for all position, vector, and transformation matrix parameters in the member functions.
base_frame | The 4x4 homogeneous transform from the world frame to the root kinematic body frame. |
Definition at line 117 of file robot_model.cpp.
|
inline |
Solves for an inverse kinematics solution given a set of objectives.
initial_positions | The seed positions/angles (in SI units of meters or radians) to start the IK search from; equal in length to the number of DoFs of the kinematic tree. |
result | A vector equal in length to the number of DoFs of the kinematic tree; this will be filled in with the IK solution (in SI units of meters or radians), and resized as necessary. |
objectives | A variable number of objectives used to define the IK search (e.g., target end effector positions, etc). Each argument must have a base class of Objective. |
Definition at line 714 of file robot_model.hpp.
|
inline |
Solves for an inverse kinematics solution given a set of objectives.
See solveIK for details.
Definition at line 694 of file robot_model.hpp.
|
private |
Internal function for adding robot model elements
Definition at line 84 of file robot_model.cpp.
|
private |
C-style robot model object
Definition at line 426 of file robot_model.hpp.
|
private |
Definition at line 420 of file robot_model.hpp.