kinematics-dynamics
|
First Paden-Kahan subproblem. More...
#include <ScrewTheoryIkSubproblems.hpp>
Public Member Functions | |
PadenKahanOne (int id, const MatrixExponential &exp, const KDL::Vector &p) | |
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::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. | |
Single solution, single revolute joint geometric IK subproblem given by \( e\,^{\hat{\xi}\,{\theta}} \cdot p = k \) (rotation screw applied to a point).
PadenKahanOne::PadenKahanOne | ( | int | id, |
const MatrixExponential & | exp, | ||
const KDL::Vector & | p | ||
) |
id | Zero-based joint id of the product of exponentials (POE) term. |
exp | POE term. |
p | Characteristic point. |
|
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 \) .
rhs | Right-hand side of the POE formula prior to being applied to the right-hand side of this subproblem. |
pointTransform | Transformation frame applied to the first (and perhaps only) characteristic point of this subproblem. |
solutions | Output vector of local solutions. |
Implements roboticslab::ScrewTheoryIkSubproblem.