Go Down

Topic: Kinematics and reverse kinematics lib for 6-7 DOF robot arms  (Read 4827 times) previous topic - next topic

dsyleixa

thanks for your update!
As to Denavit-Hardenberg, this is still too complicated for me to understand with all it's axis and arms transformations. Perhaps some examples for standard robotarms (e.g., like posted by me above) would make it more easy to find into all those details.
About github, I actually think that this is an almost perfect place for hosting, download, and especially to open and discuss issues; tbh, I would appreciate very much if it wioll be still there in the future. But perhaps for explanations, diagrams, charts, pictures, and tutorials an additaional website will have some benefits.
Thank you very much for your efforts and I wish you great success!

henriksod

It will still be on GitHub, but maybe with a different name. I think that you should start with a much simpler robotic arm and use my other library to get a hang of what is going on. I think going straight for 6DOF manipulators is a bit too ambitious given that you don't know how to perceive the concept of Denavit-Hardenberg. My other library is tailored for people with no knowledge in the field, so they can get to controlling their robotic arm right away. Who knows, maybe you can still use it for a 6DOF manipulator with some modifications or smart use of the library?

I will continue with working on this library, but I cannot guarantee it will be near as fast as other libraries out there.

I have updated my other library with possibilities for a rotating base and adjustment of gripper offset.
https://github.com/henriksod/Fabrik2DArduino

dsyleixa

as to 6DOF vs simpler robot arms I have to disagree - IMO it's a matter of the user interface to make it useable for common Arduino users. e.g., also the Arduino Braccio robot arm provides 6DOF.
As sated,  some examples for standard robotarms (e.g., like shown by me above) would make it more easy to enter all correct settings and details for either proprietary robot arm.

Once having entered  measures and dimensions of arm lengths and angle orientations by a simplified, user-friendly pattern, then the library would make no difference for the end user, no matter how many DOFs it has, both for FK and for RK, because finally one would need just
a) for FK: enter the actual  single actual angle values (3...7 angles depending on the number of provided DOFs)
b) for RK: enter the 3D target point for the claw  position (claw base position plus offset) and the claw vector orientation (yaw, pitch, roll).



dsyleixa

It will still be on GitHub, but maybe with a different name.
Just having returned from vacation, I took a look at your 6DOF example
https://github.com/henriksod/6DOFLib/blob/master/src/6dof/src.ino
tbh, I have to admit that I can't see a way to enter the actual arm segment lengths of all legs:

Code: [Select]
#include "SixDOF.h"
#include "MatrixMath.h"
#include "MemoryFree.h"

double thetas[] = {0, PI/2, -PI/2, 0, PI, 0};
double ds[] = {0.25, 0, 0, 0.2, 0, 0.2};
double alphas[] = {PI/2, 0, -PI/2, PI/2, PI/2, 0};
double as[] = {0, 0.25, 0, 0, 0, 0};

double jointAngles[] = {0, PI/3, PI/2, 0, -PI/4, 0};
double jointAngles2[] = {0, PI/4, 0, 0, PI/3, 0};

double pose[] = {0, 0, 0, 0, 0, 0};

double desiredPose1[] = {-0.4501, 0.15, 0.5777, 2.2923, 1.5234, -0.6599};
double desiredPose2[] = {-0.4485, 0.1225, 0.1147, 2.3934, 2.0215, 0.5019};
double desiredPose3[] = {0, -0.45, 0.05, -1.5708, 1.5708, -3.1416};

SixDOF manipulator(thetas, ds, alphas, as, 6);

dsyleixa

how to use the example program for a proprietary robot arm?

https://github.com/henriksod/6DOFLib/blob/master/src/6dof/src.ino

e.g, this is my current design, just to show what I am talking about:

Code: [Select]

\   /
 \ /      finger length       50 mm
 |-|  6   claw spread   
  |       metacarpal length   55 mm
  |       
  o   5   metacarpal rotate
  |     
  |       wrist length        95 mm
  |     
  v   4   wrist tilt       
  |       
  |       forearm segment2    50 mm
  |       
  o   3   forearm rotate
  |
  |       forearm segment1   100 mm
  |
  v   2   elbow tilt     
  |       
  |
  |       upper arm length   180 mm
  |
  |         
  v   1   shoulder tilt
  |
  |       shoulder height     15 mm
  o   0   trunc rotate horiz   
  |     
  |       trunc base          85 mm
  |
 ___      floor



andypugh

I am trying to decide whether to use this or a modification of the "genserkins" module from LinuxCNC.
(The latter has the advantage of being more familiar, but includes some rather "excessive" libraries.)

I am wanting to use forward kins only, to determine the position of the end of a Faro arm. (Which I found cheap on eBay).


dsyleixa

I am trying to decide whether to use this or a modification of the "genserkins" module from LinuxCNC.
(The latter has the advantage of being more familiar, but includes some rather "excessive" libraries.)

I am wanting to use forward kins only, to determine the position of the end of a Faro arm. (Which I found cheap on eBay).


for my purposes, both FK and RK actually are crucial.

dsyleixa

any updates about a adjustable FK+RK lib for 6-7  DOF  robotic arms?
AFAIK neither lib  of the ones mentioned above would work so far actually for proprietary arm constructions (CMIIW)...?

BlueCobalt

Hi,

haven been trough this, years ago.
Have done the forward and reverse KIN, from zero.

Reverse KIN is the difficult part.
Unfortunately, I don't have a LIB or something for you.

If your accuracy is not high, you could make a multidimensional ARRAY.
( is a lot of work in case of 6 DOF  )

ARRAY [x,y,z, u,v,w] as input and [a, b, c, d, e, f] as output, the 6 angles of the servo's  .

x,y,z are the coordinates of the gripper(tip) and u,v,w the orientation.

But this is allmost undoable...

Kind regards.


dsyleixa

well, the required precision should be close to 2mm.
The workspace of the arm is a 3/4 sphere by a radius of a about 500mm, that's
4*pi*r³*3/4 = 3*pi*r³ ≈ 1,250,000,000mm³ .
CMIIW, but that would require ≈100,000,000 (x,y,z) coordinates plus relates joint angles,
plus all additional gripper orientations -
and finally:
I cannot even determine the joint angles because the servos don't return angle positions. :P
So unfortunately, I'm afraid, your proposal about look-up tables is really not doable... ;)

Nonetheless, mathematically it should be solvable though (by theory), using inverse and transposed matrices from FK (but that is far beyond my skills 8) ) .


BlueCobalt

Sorry, i can't help you further.

I aproached my FW and BW in my own way!
( at the end, it looks like a kinda array/matrix-system, too )

Good luck and succes with the progress!
 

dsyleixa

anyone who knows how to control a 6-7DOF robot arm like the following by Reverse Kinematics?
Just define the spatial coordinates to move the gripper to, and the lib is supposed to calculate either required servo angle?
And the same (easier task)  vice versa for Forward Kinematics?
I still can't find a working lib for that purpose... :(
 
Code: [Select]

\   /
 \ /      finger length       50 mm
 |-|  6   claw spread   
  |       metacarpal length   55 mm
  |       
  o   5   metacarpal rotate
  |     
  |       wrist length        95 mm
  |     
  v   4   wrist tilt       
  |       
  |       forearm segment2    50 mm
  |       
  o   3   forearm rotate
  |
  |       forearm segment1   100 mm
  |
  v   2   elbow tilt     
  |       
  |
  |       upper arm length   180 mm
  |
  |         
  v   1   shoulder tilt
  |
  |       shoulder height     15 mm
  o   0   trunc rotate horiz   
  |     
  |       trunc base          85 mm
  |
 ___      floor

Northof49

Look at the AR2 robot arm software.  


https://github.com/Chris-Annin/AR2

It is all open source.  You can set the segment lengths in the python interface, which does all of the inverse kinematics for a 6 axis robot arm.  You will have to re-write the Arduino portion to control the servo position, as it is written for a stepper motor instead of a servo.

Go Up