Interface to access certain robot kinematics and dynamics data.
More...
#include <model.hpp>
|
| Model (const Robot &robot, const Eigen::Vector3d &gravity_vector=Eigen::Vector3d(0.0, 0.0, -9.81)) |
| [Non-blocking] Create an instance and initialize the integrated dynamics engine. More...
|
|
void | Reload () |
| [Blocking] Reload robot model using the latest data synced from the connected robot. Tool model is also synced. More...
|
|
void | Update (const std::vector< double > &positions, const std::vector< double > &velocities) |
| [Non-blocking] Update robot model using new joint states data. More...
|
|
const Eigen::MatrixXd | J (const std::string &link_name) |
| [Non-blocking] Compute and get the Jacobian matrix at the frame of the specified link \( i \), expressed in world frame. More...
|
|
const Eigen::MatrixXd | dJ (const std::string &link_name) |
| [Non-blocking] Compute and get the time derivative of Jacobian matrix at the frame of the specified link \( i \), expressed in world frame. More...
|
|
const Eigen::MatrixXd | M () |
| [Non-blocking] Compute and get the mass matrix for the generalized coordinates, i.e. joint space. More...
|
|
const Eigen::MatrixXd | C () |
| [Non-blocking] Compute and get the Coriolis/centripetal matrix for the generalized coordinates, i.e. joint space. More...
|
|
const Eigen::VectorXd | g () |
| [Non-blocking] Compute and get the gravity force vector for the generalized coordinates, i.e. joint space. More...
|
|
const Eigen::VectorXd | c () |
| [Non-blocking] Compute and get the Coriolis force vector for the generalized coordinates, i.e. joint space. More...
|
|
const std::pair< bool, std::vector< double > > | reachable (const std::array< double, kPoseSize > &pose, const std::vector< double > &seed_positions, bool free_orientation) |
| [Blocking] Check if a Cartesian pose is reachable. If yes, also return an IK solution of the corresponding joint positions. More...
|
|
Interface to access certain robot kinematics and dynamics data.
- Examples
- intermediate7_robot_dynamics.cpp.
Definition at line 20 of file model.hpp.
◆ Model()
flexiv::rdk::Model::Model |
( |
const Robot & |
robot, |
|
|
const Eigen::Vector3d & |
gravity_vector = Eigen::Vector3d(0.0, 0.0, -9.81) |
|
) |
| |
[Non-blocking] Create an instance and initialize the integrated dynamics engine.
- Parameters
-
[in] | robot | Reference to the instance of flexiv::rdk::Robot. |
[in] | gravity_vector | Earth's gravity vector in world frame. Default to \( [0.0, 0.0, -9.81]^T \). Unit: \( [m/s^2] \). |
- Exceptions
-
std::runtime_error | if the initialization sequence failed. |
std::logic_error | if the connected robot does not have an RDK professional license; or the parsed robot model is not supported. |
◆ C()
const Eigen::MatrixXd flexiv::rdk::Model::C |
( |
| ) |
|
[Non-blocking] Compute and get the Coriolis/centripetal matrix for the generalized coordinates, i.e. joint space.
- Returns
- Coriolis/centripetal matrix: \( C(q,\dot{q}) \in \mathbb{R}^{n \times n} \).
- Note
- Call Update() before this function.
◆ c()
const Eigen::VectorXd flexiv::rdk::Model::c |
( |
| ) |
|
[Non-blocking] Compute and get the Coriolis force vector for the generalized coordinates, i.e. joint space.
- Returns
- Coriolis force vector: \( c(q,\dot{q}) \in \mathbb{R}^{n \times 1} \). Unit: \( [Nm] \).
- Note
- Call Update() before this function.
◆ dJ()
const Eigen::MatrixXd flexiv::rdk::Model::dJ |
( |
const std::string & |
link_name | ) |
|
[Non-blocking] Compute and get the time derivative of Jacobian matrix at the frame of the specified link \( i \), expressed in world frame.
- Parameters
-
[in] | link_name | Name of the link to get Jacobian derivative for. |
- Returns
- Time derivative of Jacobian matrix: \( ^{0}\dot{J_i} \in \mathbb{R}^{m \times n} \).
- Note
- Call Update() before this function.
-
Available links can be found in the provided URDF. They are {"base_link", "link1", "link2", "link3", "link4", "link5", "link6", "link7", "flange"}, plus "tool" if any flange tool is mounted.
- Exceptions
-
std::out_of_range | if the specified link_name does not exist. |
◆ g()
const Eigen::VectorXd flexiv::rdk::Model::g |
( |
| ) |
|
[Non-blocking] Compute and get the gravity force vector for the generalized coordinates, i.e. joint space.
- Returns
- Gravity force vector: \( g(q) \in \mathbb{R}^{n \times 1} \). Unit: \( [Nm] \).
- Note
- Call Update() before this function.
◆ J()
const Eigen::MatrixXd flexiv::rdk::Model::J |
( |
const std::string & |
link_name | ) |
|
[Non-blocking] Compute and get the Jacobian matrix at the frame of the specified link \( i \), expressed in world frame.
- Parameters
-
[in] | link_name | Name of the link to get Jacobian for. |
- Returns
- Jacobian matrix: \( ^{0}J_i \in \mathbb{R}^{m \times n} \).
- Note
- Call Update() before this function.
-
Available links can be found in the provided URDF. They are {"base_link", "link1", "link2", "link3", "link4", "link5", "link6", "link7", "flange"}, plus "tool" if any flange tool is mounted.
- Exceptions
-
std::out_of_range | if the specified link_name does not exist. |
◆ M()
const Eigen::MatrixXd flexiv::rdk::Model::M |
( |
| ) |
|
[Non-blocking] Compute and get the mass matrix for the generalized coordinates, i.e. joint space.
- Returns
- Symmetric positive definite mass matrix: \( M(q) \in \mathbb{S}^{n \times n}_{++} \). Unit: \( [kgm^2] \).
- Note
- Call Update() before this function.
◆ reachable()
const std::pair<bool, std::vector<double> > flexiv::rdk::Model::reachable |
( |
const std::array< double, kPoseSize > & |
pose, |
|
|
const std::vector< double > & |
seed_positions, |
|
|
bool |
free_orientation |
|
) |
| |
[Blocking] Check if a Cartesian pose is reachable. If yes, also return an IK solution of the corresponding joint positions.
- Parameters
-
[in] | pose | Cartesian pose to be checked. |
[in] | seed_positions | Joint positions to be used as the seed for solving IK. |
[in] | free_orientation | Only constrain position and allow orientation to move freely. |
- Returns
- A pair of <is_reachable, ik_solution>.
- Exceptions
-
std::invalid_argument | if size of [seed_positions] does not match robot DoF. |
std::runtime_error | if failed to get a reply from the connected robot. |
- Note
- Applicable control modes: All.
-
This function blocks until a reply is received.
◆ Reload()
void flexiv::rdk::Model::Reload |
( |
| ) |
|
[Blocking] Reload robot model using the latest data synced from the connected robot. Tool model is also synced.
- Exceptions
-
std::runtime_error | if failed to sync model data. |
std::logic_error | if the synced robot model contains invalid data. |
- Note
- This function blocks until the model data is synced and the reloading is finished.
-
Call this function if the robot tool has changed.
◆ Update()
void flexiv::rdk::Model::Update |
( |
const std::vector< double > & |
positions, |
|
|
const std::vector< double > & |
velocities |
|
) |
| |
[Non-blocking] Update robot model using new joint states data.
- Parameters
-
[in] | positions | Current joint positions: \( q \in \mathbb{R}^{n \times 1} \). Unit: \( [rad] \). |
[in] | velocities | Current joint velocities: \( \dot{q} \in \mathbb{R}^{n \times 1} \). Unit: \( [rad/s] \). |
- Exceptions
-
std::invalid_argument | if size of any input vector does not match robot DoF. |
The documentation for this class was generated from the following file: