KDL 1.5.1
Loading...
Searching...
No Matches
chainiksolvervel_wdls.hpp
Go to the documentation of this file.
1// Copyright (C) 2007 Ruben Smits <ruben dot smits at mech dot kuleuven dot be>
2
3// Version: 1.0
4// Author: Ruben Smits <ruben dot smits at mech dot kuleuven dot be>
5// Maintainer: Ruben Smits <ruben dot smits at mech dot kuleuven dot be>
6// URL: http://www.orocos.org/kdl
7
8// This library is free software; you can redistribute it and/or
9// modify it under the terms of the GNU Lesser General Public
10// License as published by the Free Software Foundation; either
11// version 2.1 of the License, or (at your option) any later version.
12
13// This library is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16// Lesser General Public License for more details.
17
18// You should have received a copy of the GNU Lesser General Public
19// License along with this library; if not, write to the Free Software
20// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
22#ifndef KDL_CHAIN_IKSOLVERVEL_WDLS_HPP
23#define KDL_CHAIN_IKSOLVERVEL_WDLS_HPP
24
25#include "chainiksolver.hpp"
27#include <Eigen/Core>
28
29namespace KDL
30{
64 {
65 public:
67 static const int E_CONVERGE_PINV_SINGULAR = +100;
68
81 explicit ChainIkSolverVel_wdls(const Chain& chain,double eps=0.00001,int maxiter=150);
82 //=ublas::identity_matrix<double>
84
100 virtual int CartToJnt(const JntArray& q_in, const Twist& v_in, JntArray& qdot_out);
105 virtual int CartToJnt(const JntArray& /*q_init*/, const FrameVel& /*v_in*/, JntArrayVel& /*q_out*/){return -1;};
106
131 int setWeightJS(const Eigen::MatrixXd& Mq);
132
158 int setWeightTS(const Eigen::MatrixXd& Mx);
159
163 void setLambda(const double lambda);
167 void setEps(const double eps_in);
171 void setMaxIter(const int maxiter_in);
172
178 unsigned int getNrZeroSigmas()const {return nrZeroSigmas;};
179
183 double getSigmaMin()const {return sigmaMin;};
184
188 int getSigma(Eigen::VectorXd& Sout);
189
193 double getEps()const {return eps;};
194
198 double getLambda()const {return lambda;};
199
204 double getLambdaScaled()const {return lambda_scaled;};
205
210 int getSVDResult()const {return svdResult;};
211
213 virtual const char* strError(const int error) const;
214
216 virtual void updateInternalDataStructures();
217
218 private:
219 const Chain& chain;
221 unsigned int nj;
223 Eigen::MatrixXd U;
224 Eigen::VectorXd S;
225 Eigen::MatrixXd V;
226 double eps;
228 Eigen::VectorXd tmp;
229 Eigen::MatrixXd tmp_jac;
230 Eigen::MatrixXd tmp_jac_weight1;
231 Eigen::MatrixXd tmp_jac_weight2;
232 Eigen::MatrixXd tmp_ts;
233 Eigen::MatrixXd tmp_js;
234 Eigen::MatrixXd weight_ts;
235 Eigen::MatrixXd weight_js;
236 double lambda;
238 unsigned int nrZeroSigmas ;
240 double sigmaMin;
241 };
242}
243#endif
244
Implementation of a inverse velocity kinematics algorithm based on the weighted pseudo inverse with d...
Definition: chainiksolvervel_wdls.hpp:64
Eigen::MatrixXd tmp_js
Definition: chainiksolvervel_wdls.hpp:233
unsigned int nj
Definition: chainiksolvervel_wdls.hpp:221
double sigmaMin
Definition: chainiksolvervel_wdls.hpp:240
~ChainIkSolverVel_wdls()
Definition: chainiksolvervel_wdls.cpp:72
int getSVDResult() const
Retrieve the latest return code from the SVD algorithm.
Definition: chainiksolvervel_wdls.hpp:210
virtual const char * strError(const int error) const
Return a description of the latest error.
Definition: chainiksolvervel_wdls.cpp:218
virtual void updateInternalDataStructures()
Update the internal data structures.
Definition: chainiksolvervel_wdls.cpp:54
virtual int CartToJnt(const JntArray &q_in, const Twist &v_in, JntArray &qdot_out)
Find an output joint velocity qdot_out, given a starting joint pose q_init and a desired cartesian ve...
Definition: chainiksolvervel_wdls.cpp:116
unsigned int nrZeroSigmas
Definition: chainiksolvervel_wdls.hpp:238
int svdResult
Definition: chainiksolvervel_wdls.hpp:239
double getEps() const
Request the value of eps.
Definition: chainiksolvervel_wdls.hpp:193
Eigen::MatrixXd tmp_ts
Definition: chainiksolvervel_wdls.hpp:232
double getSigmaMin() const
Request the minimum of the first six singular values.
Definition: chainiksolvervel_wdls.hpp:183
void setMaxIter(const int maxiter_in)
Set maxIter.
Definition: chainiksolvervel_wdls.cpp:103
const Chain & chain
Definition: chainiksolvervel_wdls.hpp:219
static const int E_CONVERGE_PINV_SINGULAR
solution converged but (pseudo)inverse is singular
Definition: chainiksolvervel_wdls.hpp:67
double eps
Definition: chainiksolvervel_wdls.hpp:226
int getSigma(Eigen::VectorXd &Sout)
Request the six singular values of the Jacobian.
Definition: chainiksolvervel_wdls.cpp:108
ChainJntToJacSolver jnt2jac
Definition: chainiksolvervel_wdls.hpp:220
Eigen::MatrixXd U
Definition: chainiksolvervel_wdls.hpp:223
double getLambda() const
Request the value of lambda for the minimum.
Definition: chainiksolvervel_wdls.hpp:198
virtual int CartToJnt(const JntArray &, const FrameVel &, JntArrayVel &)
not (yet) implemented.
Definition: chainiksolvervel_wdls.hpp:105
Eigen::MatrixXd tmp_jac_weight2
Definition: chainiksolvervel_wdls.hpp:231
void setLambda(const double lambda)
Set lambda.
Definition: chainiksolvervel_wdls.cpp:93
unsigned int getNrZeroSigmas() const
Request the number of singular values of the jacobian that are < eps; if the number of near zero sing...
Definition: chainiksolvervel_wdls.hpp:178
Eigen::MatrixXd weight_ts
Definition: chainiksolvervel_wdls.hpp:234
Eigen::MatrixXd weight_js
Definition: chainiksolvervel_wdls.hpp:235
void setEps(const double eps_in)
Set eps.
Definition: chainiksolvervel_wdls.cpp:98
Eigen::MatrixXd V
Definition: chainiksolvervel_wdls.hpp:225
Eigen::VectorXd tmp
Definition: chainiksolvervel_wdls.hpp:228
Jacobian jac
Definition: chainiksolvervel_wdls.hpp:222
int maxiter
Definition: chainiksolvervel_wdls.hpp:227
Eigen::VectorXd S
Definition: chainiksolvervel_wdls.hpp:224
int setWeightTS(const Eigen::MatrixXd &Mx)
Set the task space weighting matrix.
Definition: chainiksolvervel_wdls.cpp:86
Eigen::MatrixXd tmp_jac_weight1
Definition: chainiksolvervel_wdls.hpp:230
double lambda
Definition: chainiksolvervel_wdls.hpp:236
Eigen::MatrixXd tmp_jac
Definition: chainiksolvervel_wdls.hpp:229
double lambda_scaled
Definition: chainiksolvervel_wdls.hpp:237
int setWeightJS(const Eigen::MatrixXd &Mq)
Set the joint space weighting matrix.
Definition: chainiksolvervel_wdls.cpp:76
double getLambdaScaled() const
Request the scaled value of lambda for the minimum singular value 1-6.
Definition: chainiksolvervel_wdls.hpp:204
Definition: chainiksolver.hpp:66
Class to calculate the jacobian of a general KDL::Chain, it is used by other solvers.
Definition: chainjnttojacsolver.hpp:39
Definition: chain.hpp:35
Definition: framevel.hpp:219
Definition: jacobian.hpp:37
Definition: jntarrayvel.hpp:46
Definition: jntarray.hpp:70
int error
Latest error, initialized to E_NOERROR in constructor.
Definition: solveri.hpp:149
represents both translational and rotational velocities.
Definition: frames.hpp:720
Definition: articulatedbodyinertia.cpp:26