Volksfest / LiLiKin

Library for Line Kinematics

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Remark

This repository is quite abandoned. Don't expect any updates. If you have questions, especially more on the theory side, you ware welcomed to ask (just create an issue)

LiLiKin - Library for Line Kinematics

The basic idea is to create a CCC mechanism, which is a fully actuated mechanism in a 6D Task Space.

This library provides the basic structures to describe the problem and the FK/IK, analytically! Basically, Pluecker lines, Dual Algebra and advanced operations on the Pluecker lines are used.

Use-Case diagram

CCC Mechanism

A CCC mechanism consists of three cylindrical (C) joints. A cylindrical joint has two degree of freedoms as it can translate and rotate around the cylinder's main axis, respectively its joint axis. The joint axis can be mathematically described as a line, hence Line Kinematics, where points are actuated on the surface of a cylinder around the line. Lines can also be transformed by other lines.

Vizualization of a line transformation

Image from "An analysis of the dual-complex unit circle with applications to line geometry" by Bongardt.

Construction

The concept of Line Kinematics is based on the product of exponentials:

x = exp(phi_1 * lambda_1) * exp(varphi_2 lambda_2) * exp(varphi_3 lambda_3) * s_zp

Thus, to compute a FK ({phi_1, phi_2, phi_3} -> x) or an IK (x -> {phi_1, phi_2, phi_3}) with phi_1, phi_2, and phi_3 being dual angles containing a translation and rotation information, the parameters of the mechanism have to be specified. The parameters are the joint axes (lines) lambda_1, lambda_2, lambda_3 and the zero posture pose s_zp, which is the initial end-effector pose describing ({0,0,0} -> s_zp).

These parameters are necessary to uniquely define a mechanism.

Line Geometry

There are different ways to describe a line and a frame. Right now, a mixture of vectors and matrices including some sort of dual algebra is used, in this library. Future works may reduce or seperate different formalisms a bit better.

Dual Matrices

Historically motivated, the matrices, which could be described as dual 3x3 matrices, are embedded as 6x6 real matrices. The embedding follows the dual number matrix representation but blown up to 6x6 for embedding the 3x3 matrices.

Lines

The lines and screws are described as 6 vectors, where the upper three form the direction and the lower three elements form the moment. Again, this is historically grown. The lines could also be described as a dual 3 vector with the dual part being the moment of the line.

Operations

The heart of the library are the operation based on or motivated by Pluecker lines.

Motor product

Initially developed as one motor product by Richard von Mises in 1924, the motor product gives the transformation from one line to the other via a transformation defined by a screw.

But seperating the screw into a line and the dual angle is not always uniquely possible. Some kind of tricks were developed here to avoid ambiguity.

Dual Trigonometric Equation

There are some problems which can be described by the equation:

a cos(phi) + b sin(phi) = c

a, b and c are given parameters and the task would be to find phi. This yields to an equivalent quadratic equation with at most two solutions, which can be retrieved analytically via half-tangens substitutions or geometrically.

This equation can also be formulated as dual number problem according to Kotelnikov's principle of transference. This is also done by Bongardt in 2020.

See DualNumberAlgebra::solve_trigonometric_equation()

Acos3

The acos3 for lines describes the dual angle between two lines projected to a third reference line as proposed by Bongardt in 2020.

It is used to find phi in:

lambda_b = exp(phi * lambda_ref) * \lambda_a

See UnitLine::acos3()

Rodrigues Formula

Another important operation is the Generalized Rodrigues-Formula for lines to actually compute the transformation generated by a line lambda and a dual angle phi:

exp(phi * lambda)

See DualFrame::DualFrame(const DualSkewProduct &argument)

About

Library for Line Kinematics

License:European Union Public License 1.2


Languages

Language:C++ 78.7%Language:CMake 21.0%Language:C 0.3%