Kinematics.js
A forward and inverse kinematics package for a basic 6 axis robotic arm.
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
Kinematics Diagram