GithubHelp home page GithubHelp logo

volksfest / lilikin Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 228 KB

Library for Line Kinematics

License: European Union Public License 1.2

CMake 20.99% C++ 78.66% C 0.35%
dual-numbers kinematics kinematics-model line linear-algebra plucker-coordinates robotics

lilikin's Introduction

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)

lilikin's People

Contributors

volksfest avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.