Hi Viesturs,

I wanted to reply to your private email too (same matter) but didn't get 
around to it.
Let me try to address your questions one at a time:

<snipped and rearranged a bit>

> I have another 2 minor questions:
> 1) I need to control rotary head (because long, round parts will need
> to be welded along perimeter). Looking at genserkins.c I suspect that
> A, B and C letters are hardcoded for the arm. It does not matter, what
> letter, the question is, where exactly in KinematicsForward and
> KinematicsInverse sections should I paste these lines:
> pos->u = joint[6]
> joints[6] = pos->u

The kinematics in emc2 don't care if it's the arm or the workpiece that 
move. they both move relative to each other, so you have to take care of 
both in your kinematic file.
If only the workpiece rotates then surely it's a lot simpler and your 
assumption above is correct (pos->u = joint[6]...)

> 2) what do I do about these lines? It is from genserkins.h:
>  67 #define DEFAULT_A6 0
>  68 #define DEFAULT_ALPHA6 -PI_2
>  69 #define DEFAULT_D6 0;
> The arm is designed to have 5 joints, the 6th joint should a rotary
> head, so I would like to exclude it from all the calculations of the
> arm.

well, the "problem" with genserkins is that it's a generic serial kinematic 
solver.
That means it's supposed to work for any/all cases of serial linked joints 
(rotary and linear).
Currently (addressing you next point) the joint type is fixed to rotary, but 
that doesn't mean the calculations aren't working for linear joints.
Just that currently there is no way of telling genserkins that you first 
joint is linear. To fix this, you would have to add some HAL pins (if you 
want to make it configurable, like it should be) to specify each joint type 
(linear or angular), then init the joint accordingly :
at line 81 [1] the current assumption is rotary:
    genser->links[t].quantity = GO_QUANTITY_ANGLE;
that needs to be changed to GO_QUANTITY_LENGTH (defined in 
src/libnml/posemath/gotypes.h) [2]

Once you fixed that, you can select for each joint if it's linear or rotary.
You would still need to define 6 joints for the genserkins part, because the 
solver won't work otherwise (so try to define an extra joint, which you 
won't use), and the rotary table you can add as joint 7.

Hope this gets you started,

Alex


[1] - 
http://git.linuxcnc.org/gitweb?p=emc2.git;a=blob;f=src/emc/kinematics/genserkins.c;h=1331cb3204bb8f47545305132fb4657498e61c79;hb=HEAD#l81
[2] - 
http://git.linuxcnc.org/gitweb?p=emc2.git;a=blob;f=src/libnml/posemath/gotypes.h;h=c94df69e2d9a44e7de3375fd8883a6b5cb4e14fd;hb=HEAD#l67


> Hello, folks!
>
> Genserkins.c says that "Currently the type of the joints is hardcoded
> to ANGULAR".
> I would appreciate, if anyone could share some advice, how the linear
> joint could be implemented.
> My need is to move small robot arm along 3000 mm long linear slide in
> implementation of robotic MIG welder.
> My initial design contains 5 joints:
> 1) linear joint, along which the whole arm will move:
> 2) "shoulder up/down";
> 3) "elbow up/down";
> 4) "wrist rotate";
> 5) "wrist up/down".
>
> They are supposed to be serially linked in the exact order as I wrote 
> them.
>
> So my main question is - how can linear joint be introduced here? I
> feel that hardcoding that only joint_0 (first joint in the series) is
> linear would satisfy vast majority of necessity to combine robotic
> arms and linear joints.
>
>
> Thank You in advance!
>
> Viesturs
> 

------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users

Reply via email to