KDL::ChainIkSolverVel_wdls Class Reference

Implementation of a inverse velocity kinematics algorithm based on the weighted pseudo inverse with damped least-square to calculate the velocity transformation from Cartesian to joint space of a general KDL::Chain. More...

#include <chainiksolvervel_wdls.hpp>

Inheritance diagram for KDL::ChainIkSolverVel_wdls:
KDL::ChainIkSolverVel

List of all members.

Public Member Functions

virtual int CartToJnt (const JntArray &q_init, const FrameVel &v_in, JntArrayVel &q_out)
 not (yet) implemented.
virtual int CartToJnt (const JntArray &q_in, const Twist &v_in, JntArray &qdot_out)
 Calculate inverse velocity kinematics, from joint positions and cartesian velocity to joint velocities.
 ChainIkSolverVel_wdls (const Chain &chain, double eps=0.00001, int maxiter=150)
 Constructor of the solver.
void setLambda (const double &lambda)
void setWeightJS (const Eigen::MatrixXd &Mq)
 Set the joint space weighting matrix.
void setWeightTS (const Eigen::MatrixXd &Mx)
 Set the task space weighting matrix.
 ~ChainIkSolverVel_wdls ()

Detailed Description

Implementation of a inverse velocity kinematics algorithm based on the weighted pseudo inverse with damped least-square to calculate the velocity transformation from Cartesian to joint space of a general KDL::Chain.

It uses a svd-calculation based on householders rotations.

J# = M_q*Vb*pinv_dls(Db)*Ub'*M_x

where B = Mx*J*Mq

and B = Ub*Db*Vb' is the SVD decomposition of B

Mq and Mx represent, respectively, the joint-space and task-space weighting matrices. Please refer to the documentation of setWeightJS(const Eigen::MatrixXd& Mq) and setWeightTS(const Eigen::MatrixXd& Mx) for details on the effects of these matrices.

For more details on Weighted Pseudo Inverse, see : 1) [Ben Israel 03] A. Ben Israel & T.N.E. Greville. Generalized Inverses : Theory and Applications, second edition. Springer, 2003. ISBN 0-387-00293-6.

2) [Doty 93] K. L. Doty, C. Melchiorri & C. Boniveto. A theory of generalized inverses applied to Robotics. The International Journal of Robotics Research, vol. 12, no. 1, pages 1-19, february 1993.

Definition at line 63 of file chainiksolvervel_wdls.hpp.


Constructor & Destructor Documentation

KDL::ChainIkSolverVel_wdls::ChainIkSolverVel_wdls ( const Chain chain,
double  eps = 0.00001,
int  maxiter = 150 
)

Constructor of the solver.

Parameters:
chain the chain to calculate the inverse velocity kinematics for
eps if a singular value is below this value, its inverse is set to zero, default: 0.00001
maxiter maximum iterations for the svd calculation, default: 150

Definition at line 28 of file chainiksolvervel_wdls.cpp.

KDL::ChainIkSolverVel_wdls::~ChainIkSolverVel_wdls (  ) 

Definition at line 49 of file chainiksolvervel_wdls.cpp.


Member Function Documentation

virtual int KDL::ChainIkSolverVel_wdls::CartToJnt ( const JntArray q_init,
const FrameVel v_in,
JntArrayVel q_out 
) [inline, virtual]

not (yet) implemented.

Implements KDL::ChainIkSolverVel.

Definition at line 87 of file chainiksolvervel_wdls.hpp.

int KDL::ChainIkSolverVel_wdls::CartToJnt ( const JntArray q_in,
const Twist v_in,
JntArray qdot_out 
) [virtual]

Calculate inverse velocity kinematics, from joint positions and cartesian velocity to joint velocities.

Parameters:
q_in input joint positions
v_in input cartesian velocity
qdot_out output joint velocities
Returns:
if < 0 something went wrong

Implements KDL::ChainIkSolverVel.

Definition at line 66 of file chainiksolvervel_wdls.cpp.

References KDL::Jacobian::columns(), KDL::JntArray::data, KDL::Jacobian::data, KDL::ChainJntToJacSolver::JntToJac(), KDL::Jacobian::rows(), and KDL::svd_eigen_HH().

void KDL::ChainIkSolverVel_wdls::setLambda ( const double &  lambda  ) 

Definition at line 61 of file chainiksolvervel_wdls.cpp.

void KDL::ChainIkSolverVel_wdls::setWeightJS ( const Eigen::MatrixXd &  Mq  ) 

Set the joint space weighting matrix.

weight_js joint space weighting symetric matrix, default : identity.

Parameters:
Mq : This matrix being used as a weight for the norm of the joint space speed it HAS TO BE symmetric and positive definite. We can actually deal with matrices containing a symmetric and positive definite block and 0s otherwise. Taking a diagonal matrix as an example, a 0 on the diagonal means that the corresponding joints will not contribute to the motion of the system. On the other hand, the bigger the value, the most the corresponding joint will contribute to the overall motion. The obtained solution q_dot will actually minimize the weighted norm sqrt(q_dot'*(M_q^-2)*q_dot). In the special case we deal with, it does not make sense to invert M_q but what is important is the physical meaning of all this : a joint that has a zero weight in M_q will not contribute to the motion of the system and this is equivalent to saying that it gets an infinite weight in the norm computation. For more detailed explanation : vincent.padois@upmc.fr

Definition at line 53 of file chainiksolvervel_wdls.cpp.

void KDL::ChainIkSolverVel_wdls::setWeightTS ( const Eigen::MatrixXd &  Mx  ) 

Set the task space weighting matrix.

weight_ts task space weighting symetric matrix, default: identity

Parameters:
Mx : This matrix being used as a weight for the norm of the error (in terms of task space speed) it HAS TO BE symmetric and positive definite. We can actually deal with matrices containing a symmetric and positive definite block and 0s otherwise. Taking a diagonal matrix as an example, a 0 on the diagonal means that the corresponding task coordinate will not be taken into account (ie the corresponding error can be really big). If the rank of the jacobian is equal to the number of task space coordinates which do not have a 0 weight in M_x, the weighting will actually not impact the results (ie there is an exact solution to the velocity inverse kinematics problem). In cases without an exact solution, the bigger the value, the most the corresponding task coordinate will be taken into account (ie the more the corresponding error will be reduced). The obtained solution will minimize the weighted norm sqrt(|x_dot-Jq_dot|'*(M_x^2)*|x_dot-Jq_dot|). For more detailed explanation : vincent.padois@upmc.fr

Definition at line 57 of file chainiksolvervel_wdls.cpp.


The documentation for this class was generated from the following files:

Generated on Wed Nov 23 19:02:16 2011 for FreeCAD by  doxygen 1.6.1