kinematics-dynamics
Public Member Functions | Private Attributes | List of all members
roboticslab::PadenKahanThree Class Reference

Third Paden-Kahan subproblem. More...

#include <ScrewTheoryIkSubproblems.hpp>

Inheritance diagram for roboticslab::PadenKahanThree:
roboticslab::ScrewTheoryIkSubproblem

Public Member Functions

 PadenKahanThree (int id, const MatrixExponential &exp, const KDL::Vector &p, const KDL::Vector &k)
 Constructor. More...
 
bool solve (const KDL::Frame &rhs, const KDL::Frame &pointTransform, Solutions &solutions) const override
 Finds a closed geometric solution for this IK subproblem. More...
 
int solutions () const override
 Number of local IK solutions.
 
const char * describe () const override
 Return a human-readable description of this IK subproblem.
 
- Public Member Functions inherited from roboticslab::ScrewTheoryIkSubproblem
virtual ~ScrewTheoryIkSubproblem ()=default
 Destructor.
 

Private Attributes

const int id
 
const MatrixExponential exp
 
const KDL::Vector p
 
const KDL::Vector k
 
const KDL::Rotation axisPow
 

Additional Inherited Members

- Public Types inherited from roboticslab::ScrewTheoryIkSubproblem
using JointIdToSolution = std::pair< int, double >
 Maps a joint id to a screw magnitude.
 
using JointIdsToSolutions = std::vector< JointIdToSolution >
 At least one joint-id+value pair per solution.
 
using Solutions = std::vector< JointIdsToSolutions >
 Collection of local IK solutions.
 

Detailed Description

Dual solution, single revolute joint geometric IK subproblem given by \( \left \| e\,^{\hat{\xi}\,{\theta}} \cdot p - k \right \| = \delta \) (rotation screw for moving \( p \) to a distance \( \delta \) from \( k \)).

Constructor & Destructor Documentation

◆ PadenKahanThree()

PadenKahanThree::PadenKahanThree ( int  id,
const MatrixExponential exp,
const KDL::Vector &  p,
const KDL::Vector &  k 
)
Parameters
idZero-based joint id of the product of exponentials (POE) term.
expPOE term.
pFirst characteristic point.
kSecond characteristic point.

Member Function Documentation

◆ solve()

bool PadenKahanThree::solve ( const KDL::Frame &  rhs,
const KDL::Frame &  pointTransform,
Solutions solutions 
) const
overridevirtual

Given the product of exponentials (POE) formula \( \prod_i e\,^{\hat{\xi}_i\,{\theta_i}} \cdot H_{ST}(0) = H_{ST}(\theta) \) , , invariant and known terms are rearranged to the right side (rhs) as follows:

\[ \prod_{i=j}^{j+k} e\,^{\hat{\xi}_i\,{\theta_i}} = \left [ \prod_{i=1}^{j-1} e\,^{\hat{\xi}_i\,{\theta_i}} \right ]^{-1} \cdot H_{ST}(\theta) \cdot \left [ H_{ST}(0) \right ]^{-1} \cdot \left [ \prod_{i=j+k+1}^{N} e\,^{\hat{\xi}_i\,{\theta_i}} \right ]^{-1} \]

where \( j = \{1, 2, ..., N\}, k = \{1, 2, ..., N-1\}, 1 <= j+k <= N \) .

Given \( N \) terms in the POE formula, \( j \) of which are unknowns, any characteristic point \( p \) postmultiplying this expression could be rewritten as \( p' \) per:

\[ \prod_{i=1}^j e\,^{\hat{\xi}_i\,{\theta_i}} \cdot \prod_{i=j+1}^N e\,^{\hat{\xi}_i\,{\theta_i}} \cdot p = \prod_{i=1}^j e\,^{\hat{\xi}_i\,{\theta_i}} \cdot p' \]

where pointTransform is the transformation matrix that produces \( p' \) from \( p \) .

Parameters
rhsRight-hand side of the POE formula prior to being applied to the right-hand side of this subproblem.
pointTransformTransformation frame applied to the first (and perhaps only) characteristic point of this subproblem.
solutionsOutput vector of local solutions.
Returns
True if all solutions are reachable, false otherwise.

Implements roboticslab::ScrewTheoryIkSubproblem.


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