Kinematics.js
A forward and inverse kinematics package for a basic 6 axis robotic arm.
![Robot Move](https://camo.githubusercontent.com/57aa834c9a118b9d88b8767fc3515a9f487a6701ac1bed0b5e58735e7a5e2af5/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f3752625935556b75556546703539646f5a6b2f67697068792e676966)
![Robot Euler](https://camo.githubusercontent.com/2d735cd3c924bdb7c0cf594beb2057d8e01ec6cf698e7b72b9ffe4a865c6ee55/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f6b3837434d4f636979727653706256304b552f67697068792e676966)
Inverse
import { inverse } from 'kinematics-js';
inverse(5, 0, 11, 0, 0, 0, {
base: 1,
v1: 2.5,
v2: 3,
v3: 2.5,
v4: 2.5,
v5: 2.5,
v6: 2,
});
Parameter |
Description |
x |
x cartesian coordinate in the three dimensional space relative to the base frame |
y |
y cartesian coordinate in the three dimensional space relative to the base frame |
z |
z cartesian coordinate in the three dimensional space relative to the base frame |
r1 |
euler angle 1, the rotation around the z1 axis of the end effector |
r2 |
euler angle 2, the rotation around the x axis of the end effector |
r3 |
euler angle 3, the rotation around the z2 axis of the end effector |
config |
robot configuration see table below |
Key |
required |
Description |
base |
no |
height of the base |
v1 |
yes |
length between joint 1 and 2 |
v2 |
yes |
length between joint 2 and 3 |
v3 |
yes |
length between joint 3 and 4 |
v4 |
yes |
length between joint 4 and 5 |
v5 |
yes |
length between joint 5 and 6 |
v6 |
yes |
length between joint 6 and the end effector |
Examples:
// First define a config for the robot
const config == {
v1: 2.5,
v2: 3,
v3: 2.5,
v4: 2.5,
v5: 2.5,
v6: 2,
};
/**
* |
* [ ]
* |
* ( )
* |
* [ ]
* |
* ( )
* |
* ( )
* |
* [ ]
*/
inverse(0, 0, 15, 0, 0, 0, config)
// ==> [0, 0, 0, 0, 0, 0]
/**
* [ ]
* |
* ( ) -- [ ] -- ( )
* |
* ( )
* |
* [ ]
*/
inverse(5, 0, 10, 0, 0, 0, config)
// ==> [0, 0, -Math.PI / 2, 0, Math.PI / 2, 0 ]
/**
* [ ]
* |
* ( ) -- [ ] -- ( )
* |
* ( )
* |
* [ ]
*/
inverse(5, 0, 11, 0, 0, 0, { ...config, base: 1 })
// ==> [0, 0, -Math.PI / 2, 0, Math.PI / 2, 0 ]
Forward
import { forward } from 'kinematics-js';
forward(0, 0, -Math.PI / 2, Math.PI, -Math.PI / 2, 0, {
v1: 2.5,
v2: 3,
v3: 2.5,
v4: 2.5,
v5: 2.5,
v6: 2,
});
// ==>
// [-1, 0, 0, 5],
// [0, -1, 0, 0],
// [0, 0, 1, 10],
// [0, 0, 0, 1],
//
// The return value gives you the rotation matrix and also the cartesian location which you can get below
// const x = res[0][3];
// const y = res[1][3];
// const z = res[2][3];
Parameter |
Description |
theta1 |
angle of joint j1 in radians |
theta2 |
angle of joint j2 in radians |
theta3 |
angle of joint j3 in radians |
theta4 |
angle of joint j4 in radians |
theta5 |
angle of joint j5 in radians |
theta6 |
angle of joint j6 in radians |
config |
robot configuration see table below |
Key |
required |
Description |
base |
no |
height of the base |
v1 |
yes |
length between joint 1 and 2 |
v2 |
yes |
length between joint 2 and 3 |
v3 |
yes |
length between joint 3 and 4 |
v4 |
yes |
length between joint 4 and 5 |
v5 |
yes |
length between joint 5 and 6 |
v6 |
yes |
length between joint 6 and the end effector |
Live Demo
See the kinematics in action here
![Robot Move](https://camo.githubusercontent.com/06e22d7e4837e5e3d6e6620ec3392fad5fa78fb0edd96282ae7822c3043c1c03/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f584567515a6b3259357a6e31626f5853784d2f67697068792e676966)
Kinematics Diagram
![Kinematics Diagram](https://github.com/joepuzzo/robot-viewer/raw/main/src/server/static/KinematicsDiagram.jpg?raw=true)