Visual Servoing Platform
version 3.5.1 under development (2023-09-22)
|
#include <visp3/robot/vpViper.h>
Public Member Functions | |
vpViper () | |
virtual | ~vpViper () |
Modelisation of the ADEPT Viper robot.
This robot has six degrees of freedom. The model of the robot is the following:
The non modified Denavit-Hartenberg representation of the robot is given in the table below, where are the variable joint positions.
In this modelization, different frames have to be considered.
The forward kinematics of the robot is implemented in get_fMw(), get_fMe() and get_fMc().
The robot forward jacobian used to compute the cartesian velocities from joint ones is given and implemented in get_fJw(), get_fJe() and get_eJe().
vpViper::vpViper | ( | ) |
Default constructor.
Definition at line 62 of file vpViper.cpp.
References a1, a2, a3, c56, d1, d4, d6, d7, eMc, vpHomogeneousMatrix::eye(), joint_max, joint_min, njoint, vpMath::rad(), and vpColVector::resize().
void vpViper::get_cMe | ( | vpHomogeneousMatrix & | cMe | ) | const |
Get the geometric transformation between the camera frame and the end-effector frame. This transformation is constant and correspond to the extrinsic camera parameters estimated by calibration.
cMe | : Transformation between the camera frame and the end-effector frame. |
Definition at line 904 of file vpViper.cpp.
References eMc, and vpHomogeneousMatrix::inverse().
Referenced by vpSimulatorViper850::get_cMe(), vpRobotViper650::get_cMe(), vpRobotViper850::get_cMe(), vpSimulatorViper850::get_cVe(), vpRobotViper650::get_cVe(), vpRobotViper850::get_cVe(), and get_cVe().
void vpViper::get_cVe | ( | vpVelocityTwistMatrix & | cVe | ) | const |
Get the twist transformation from camera frame to end-effector frame. This transformation allows to compute a velocity expressed in the end-effector frame into the camera frame.
cVe | : Twist transformation . |
Definition at line 920 of file vpViper.cpp.
References vpVelocityTwistMatrix::buildFrom(), and get_cMe().
void vpViper::get_eJe | ( | const vpColVector & | q, |
vpMatrix & | eJe | ||
) | const |
Get the robot jacobian which gives the velocity of the origin of the end-effector frame expressed in end-effector frame.
q | : A six-dimension vector that contains the joint positions of the robot expressed in radians. |
eJe | : Robot jacobian that express the velocity of the end-effector in the robot end-effector frame. |
Definition at line 952 of file vpViper.cpp.
References vpHomogeneousMatrix::extract(), get_fJw(), get_fMw(), get_wMe(), vpHomogeneousMatrix::inverse(), vpRotationMatrix::inverse(), and vpTranslationVector::skew().
Referenced by vpSimulatorViper850::computeArticularVelocity(), vpRobotViper650::get_eJe(), vpRobotViper850::get_eJe(), vpSimulatorViper850::get_eJe(), and vpSimulatorViper850::getVelocity().
void vpViper::get_eMc | ( | vpHomogeneousMatrix & | eMc_ | ) | const |
Get the geometric transformation between the end-effector frame and the camera frame. This transformation is constant and correspond to the extrinsic camera parameters estimated by calibration.
eMc_ | : Transformation between the the end-effector frame and the camera frame. |
Definition at line 876 of file vpViper.cpp.
References eMc.
Referenced by getInverseKinematics().
void vpViper::get_eMs | ( | vpHomogeneousMatrix & | eMs | ) | const |
Get the geometric transformation between the end-effector frame and the force/torque sensor frame. This transformation is constant.
eMs | : Transformation between the the end-effector frame and the force/torque sensor frame. |
Definition at line 887 of file vpViper.cpp.
References d7, and vpHomogeneousMatrix::eye().
void vpViper::get_fJe | ( | const vpColVector & | q, |
vpMatrix & | fJe | ||
) | const |
Get the robot jacobian which gives the velocity of the origin of the end-effector frame expressed in the robot reference frame also called fix frame.
q | : A six-dimension vector that contains the joint positions of the robot expressed in radians. |
fJe | : Robot jacobian that express the velocity of the end-effector in the robot reference frame. |
Definition at line 1141 of file vpViper.cpp.
References vpHomogeneousMatrix::extract(), get_fJw(), get_fMw(), get_wMe(), and vpHomogeneousMatrix::inverse().
Referenced by vpSimulatorViper850::computeArticularVelocity(), vpRobotViper650::get_fJe(), vpRobotViper850::get_fJe(), vpSimulatorViper850::get_fJe(), and vpSimulatorViper850::getVelocity().
void vpViper::get_fJw | ( | const vpColVector & | q, |
vpMatrix & | fJw | ||
) | const |
Get the robot jacobian which express the velocity of the origin of the wrist frame in the robot reference frame also called fix frame.
with
q | : A six-dimension vector that contains the joint positions of the robot expressed in radians. |
fJw | : Robot jacobian that express the velocity of the point w (origin of the wrist frame) in the robot reference frame. |
Definition at line 1036 of file vpViper.cpp.
References a1, a2, a3, d4, and vpArray2D< Type >::resize().
vpHomogeneousMatrix vpViper::get_fMc | ( | const vpColVector & | q | ) | const |
Compute the forward kinematics (direct geometric model) as an homogeneous matrix.
By forward kinematics we mean here the position and the orientation of the camera relative to the base frame given the joint positions of all the six joints.
This method is the same than getForwardKinematics(const vpColVector & q).
q | : Vector of six joint positions expressed in radians. |
Definition at line 592 of file vpViper.cpp.
Referenced by vpSimulatorViper850::compute_fMi(), getForwardKinematics(), vpRobotViper650::getPosition(), vpRobotViper850::getPosition(), vpSimulatorViper850::getPosition(), vpRobotViper650::getVelocity(), vpRobotViper850::getVelocity(), vpRobotViper650::setPosition(), vpRobotViper850::setPosition(), and vpSimulatorViper850::setPosition().
void vpViper::get_fMc | ( | const vpColVector & | q, |
vpHomogeneousMatrix & | fMc | ||
) | const |
Compute the forward kinematics (direct geometric model) as an homogeneous matrix.
By forward kinematics we mean here the position and the orientation of the camera relative to the base frame given the six joint positions.
q | : Vector of six joint positions expressed in radians. |
fMc | The homogeneous matrix corresponding to the direct geometric model which expresses the transformation between the fix frame and the camera frame. |
Definition at line 621 of file vpViper.cpp.
void vpViper::get_fMe | ( | const vpColVector & | q, |
vpHomogeneousMatrix & | fMe | ||
) | const |
Compute the forward kinematics (direct geometric model) as an homogeneous matrix .
By forward kinematics we mean here the position and the orientation of the end effector with respect to the base frame given the motor positions of all the six joints.
with
q | : A 6-dimension vector that contains the 6 joint positions expressed in radians. |
fMe | The homogeneous matrix corresponding to the direct geometric model which expresses the transformation between the fix frame and the end effector frame. |
Note that this transformation can also be computed by considering the wrist frame .
Definition at line 707 of file vpViper.cpp.
References a1, a2, a3, d1, d4, and d6.
Referenced by get_fMc(), vpRobotViper650::getVelocity(), and vpRobotViper850::getVelocity().
void vpViper::get_fMw | ( | const vpColVector & | q, |
vpHomogeneousMatrix & | fMw | ||
) | const |
Compute the transformation between the fix frame and the wrist frame. The wrist frame is located on the intersection of the 3 last rotations.
q | : A 6-dimension vector that contains the 6 joint positions expressed in radians. |
fMw | The homogeneous matrix corresponding to the transformation between the fix frame and the wrist frame (fMw). |
with
Definition at line 797 of file vpViper.cpp.
void vpViper::get_wMe | ( | vpHomogeneousMatrix & | wMe | ) | const |
Return the transformation between the wrist frame and the end-effector. The wrist frame is located on the intersection of the 3 last rotations.
wMe | The homogeneous matrix corresponding to the transformation between the wrist frame and the end-effector frame (wMe). |
Definition at line 856 of file vpViper.cpp.
References d6, and vpHomogeneousMatrix::eye().
Referenced by get_eJe(), get_fJe(), and getInverseKinematics().
double vpViper::getCoupl56 | ( | ) | const |
Return the coupling factor between join 5 and joint 6.
This factor should be only useful when motor positions are considered. Since the positions returned by the robot are joint positions which takes into account the coupling factor, it has not to be considered in the modelization of the robot.
Definition at line 1202 of file vpViper.cpp.
References c56.
vpHomogeneousMatrix vpViper::getForwardKinematics | ( | const vpColVector & | q | ) | const |
Compute the forward kinematics (direct geometric model) as an homogeneous matrix.
By forward kinematics we mean here the position and the orientation of the camera relative to the base frame given the six joint positions.
This method is the same than get_fMc(const vpColVector & q).
q | : A six dimension vector corresponding to the robot joint positions expressed in radians. |
Definition at line 118 of file vpViper.cpp.
References get_fMc().
unsigned int vpViper::getInverseKinematics | ( | const vpHomogeneousMatrix & | fMc, |
vpColVector & | q, | ||
const bool & | verbose = false |
||
) | const |
Compute the inverse kinematics (inverse geometric model).
By inverse kinematics we mean here the six joint values given the position and the orientation of the camera frame relative to the base frame.
fMc | : Homogeneous matrix describing the transformation from base frame to the camera frame. |
q | : In input, a six dimension vector corresponding to the current joint positions expressed in radians. In output, the solution of the inverse kinematics, ie. the joint positions corresponding to . |
verbose | : Add extra printings. |
The code below shows how to compute the inverse geometric model:
Definition at line 555 of file vpViper.cpp.
References get_eMc(), get_wMe(), getInverseKinematicsWrist(), and vpHomogeneousMatrix::inverse().
Referenced by vpSimulatorViper850::initialiseCameraRelativeToObject(), vpRobotViper650::setPosition(), vpRobotViper850::setPosition(), and vpSimulatorViper850::setPosition().
unsigned int vpViper::getInverseKinematicsWrist | ( | const vpHomogeneousMatrix & | fMw, |
vpColVector & | q, | ||
const bool & | verbose = false |
||
) | const |
Compute the inverse kinematics (inverse geometric model).
By inverse kinematics we mean here the six joint values given the position and the orientation of the camera frame relative to the base frame.
fMw | : Homogeneous matrix describing the transformation from base frame to the wrist frame. |
q | : In input, a six dimension vector corresponding to the current joint positions expressed in radians. In output, the solution of the inverse kinematics, ie. the joint positions corresponding to . |
verbose | : Add extra printings. |
The code below shows how to compute the inverse geometric model:
Definition at line 219 of file vpViper.cpp.
References a1, a2, a3, d1, d4, vpArray2D< Type >::getRows(), njoint, vpMath::rad(), vpColVector::resize(), and vpMath::sqr().
Referenced by getInverseKinematics().
vpColVector vpViper::getJointMax | ( | ) | const |
Get maximal joint values.
Definition at line 1190 of file vpViper.cpp.
References joint_max.
vpColVector vpViper::getJointMin | ( | ) | const |
Get minimal joint values.
Definition at line 1181 of file vpViper.cpp.
References joint_min.
|
virtual |
Set the geometric transformation between the end-effector frame and the tool frame (commonly a camera).
eMc_ | : Transformation between the end-effector frame and the tool frame. |
Reimplemented in vpRobotViper850, and vpRobotViper650.
Definition at line 1212 of file vpViper.cpp.
References vpRxyzVector::buildFrom(), eMc, erc, etc, and vpHomogeneousMatrix::extract().
Referenced by vpViper650::init(), vpViper850::init(), vpViper650::parseConfigFile(), vpViper850::parseConfigFile(), vpRobotViper650::set_eMc(), and vpRobotViper850::set_eMc().
|
virtual |
Set the geometric transformation between the end-effector frame and the tool frame (commonly a camera frame).
etc_ | : Translation between the end-effector frame and the tool frame. |
erc_ | : Rotation between the end-effector frame and the tool frame using the Euler angles in radians with the XYZ convention. |
Reimplemented in vpRobotViper850, and vpRobotViper650.
Definition at line 1230 of file vpViper.cpp.
References vpHomogeneousMatrix::buildFrom(), eMc, erc, and etc.
|
friend |
Print on the output stream os the robot parameters (joint min/max, coupling factor between axis 5 and 6, hand-to-eye constant homogeneous matrix .
os | : Output stream. |
viper | : Robot parameters. |
Definition at line 1247 of file vpViper.cpp.
|
protected |
Definition at line 160 of file vpViper.h.
Referenced by vpSimulatorViper850::compute_fMi(), get_fJw(), get_fMe(), get_fMw(), getInverseKinematicsWrist(), vpSimulatorViper850::singularityTest(), vpViper(), vpViper650::vpViper650(), and vpViper850::vpViper850().
|
protected |
for joint 2
Definition at line 161 of file vpViper.h.
Referenced by vpSimulatorViper850::compute_fMi(), get_fJw(), get_fMe(), get_fMw(), getInverseKinematicsWrist(), vpSimulatorViper850::singularityTest(), vpViper(), vpViper650::vpViper650(), and vpViper850::vpViper850().
|
protected |
for joint 3
Definition at line 162 of file vpViper.h.
Referenced by vpSimulatorViper850::compute_fMi(), get_fJw(), get_fMe(), get_fMw(), getInverseKinematicsWrist(), vpSimulatorViper850::singularityTest(), vpViper(), vpViper650::vpViper650(), and vpViper850::vpViper850().
|
protected |
Mechanical coupling between joint 5 and joint 6.
Definition at line 166 of file vpViper.h.
Referenced by getCoupl56(), vpViper(), vpViper650::vpViper650(), and vpViper850::vpViper850().
|
protected |
for joint 1
Definition at line 160 of file vpViper.h.
Referenced by vpSimulatorViper850::compute_fMi(), get_fMe(), get_fMw(), getInverseKinematicsWrist(), vpViper(), vpViper650::vpViper650(), and vpViper850::vpViper850().
|
protected |
for joint 4
Definition at line 163 of file vpViper.h.
Referenced by vpSimulatorViper850::compute_fMi(), get_fJw(), get_fMe(), get_fMw(), getInverseKinematicsWrist(), vpSimulatorViper850::singularityTest(), vpViper(), vpViper650::vpViper650(), and vpViper850::vpViper850().
|
protected |
for joint 6
Definition at line 164 of file vpViper.h.
Referenced by vpSimulatorViper850::compute_fMi(), get_fMe(), get_wMe(), vpViper(), vpViper650::vpViper650(), and vpViper850::vpViper850().
|
protected |
|
protected |
End effector to camera transformation.
Definition at line 154 of file vpViper.h.
Referenced by vpSimulatorViper850::computeArticularVelocity(), get_cMe(), get_eMc(), get_fMc(), vpSimulatorViper850::getVelocity(), vpViper650::init(), vpSimulatorViper850::init(), vpViper850::init(), set_eMc(), and vpViper().
|
protected |
Definition at line 157 of file vpViper.h.
Referenced by vpRobotViper650::init(), vpViper650::init(), vpRobotViper850::init(), vpSimulatorViper850::init(), vpViper850::init(), vpRobotViper650::set_eMc(), vpRobotViper850::set_eMc(), and set_eMc().
|
protected |
Definition at line 156 of file vpViper.h.
Referenced by vpRobotViper650::init(), vpViper650::init(), vpRobotViper850::init(), vpSimulatorViper850::init(), vpViper850::init(), vpRobotViper650::set_eMc(), vpRobotViper850::set_eMc(), and set_eMc().
|
protected |
Definition at line 169 of file vpViper.h.
Referenced by getJointMax(), vpSimulatorViper850::init(), vpRobotViper650::init(), vpRobotViper850::init(), vpSimulatorViper850::isInJointLimit(), vpSimulatorViper850::setJointLimit(), vpSimulatorViper850::updateArticularPosition(), vpViper(), vpViper650::vpViper650(), and vpViper850::vpViper850().
|
protected |
Definition at line 170 of file vpViper.h.
Referenced by getJointMin(), vpSimulatorViper850::init(), vpRobotViper650::init(), vpRobotViper850::init(), vpSimulatorViper850::isInJointLimit(), vpSimulatorViper850::setJointLimit(), vpSimulatorViper850::updateArticularPosition(), vpViper(), vpViper650::vpViper650(), and vpViper850::vpViper850().
|
static |
Number of joint.
Definition at line 151 of file vpViper.h.
Referenced by vpRobotViper650::get_eJe(), vpRobotViper850::get_eJe(), vpRobotViper650::get_fJe(), vpRobotViper850::get_fJe(), vpRobotViper650::getDisplacement(), vpRobotViper850::getDisplacement(), getInverseKinematicsWrist(), vpRobotViper650::getPosition(), vpRobotViper850::getPosition(), vpSimulatorViper850::init(), vpRobotViper650::readPosFile(), vpRobotViper850::readPosFile(), vpSimulatorViper850::readPosFile(), vpRobotViper650::setPosition(), vpRobotViper850::setPosition(), vpRobotViper650::setVelocity(), vpRobotViper850::setVelocity(), and vpViper().