Re: Minitetra kinematics, following error



Good morning Fred and other users!
Thank You for the long answer. I will try this as soon as possible. But isnt
it practically necessary to go into MDI or Auto mode at any time? The
solution to achieve this is, i think, that a forward trnsformation is done
in the moment, the user switches. Then the Platform position that fits to
the actual cable length is computed and used as the new cartesian position.
The inverse cinematics result in the actual cable lengths and no following
error is present. A necessary condition for this should nevertheless be,
that a homing is done once. In order to assure that the axes really are
where the emc assumes them to be.
Dont you think this can be inserted in the code easily?
Till
-----Ursprüngliche Nachricht-----
Von: Fred Proctor <frederick.proctor-at-nist.gov>
An: Multiple recipients of list <emc-at-nist.gov>
Datum: Dienstag, 18. Juli 2000 00:27
Betreff: Minitetra kinematics, following error


>
>EMC users,
>
>Till Franitza had trouble with the minitetra Stewart Platform
>controller. I forget his exact troubles but I recall a problem with the
>following error. I just ran a metal cutting test of the minitetra here
>last week, and here are my notes on how to get this to work.
>
>1. In the .ini file, you need to set the home position in world
>coordinates to be something physically achievable. In my case this is
>about 20 inches down from the top (where the cables would be purely
>horizontal). I have this:
>
>[TRAJ]
>AXES = 6
>COORDINATES = X Y Z R P W
>HOME = 0 0 -20 0 0 0
>
>2. Specify "yemc" as the display, e.g., in the .ini file have this:
>
>[DISPLAY]
>DISPLAY = yemc
>
>"yemc" is a version of the X-windows GUI "xemc" that has 6-axis support.
>We should put this in the TkEmc but don't have it yet.
>
>3. You have to home the machine before going into auto or MDI mode. The
>trick here is to jog the cables to the lengths they have to be to result
>in the home position specified above, then click the home button. Set
>the .ini file params for limit switch polarity so that the cables don't
>move during a home, and it just registers the home position (digits go
>green) right away. Here's the procedure I used:
>
>a. Go into manual mode, estop-off, machine on.
>b. Specify "joint frame" in the display, which I do with the "$" key
>that toggles between world and joint frames. Joint frame units show
>0-1-2-3-4-5 instead of X-Y-Z-R-P-W as labels for the position.
>c. Select the 0th axis, click the home button/hit the home key, and note
>the length. Mine was about 28 point something inches.
>d. Jog the cable so that its length is that value. I took a tape measure
>and marked off this length in black marker pen on the cable, then jogged
>so that the mark was just tangent to the pulley on the platform. Use the
>letter keys below the digits 1-6 to jog up/down, e.g., q/a for first
>cable, w/s for second, ..., y/h for last.
>e. Click the home button again, once the cable is the correct length.
>Now it's homed at the right length. Do this for all cables.
>
>If you mark the cable with a marker pen, the procedure is pretty quick
>in the future.
>
>4. You can just home them at arbitrary points, but the kinematics will
>be all screwed up and a G1 move won't be in a line. If you jog the
>cables to the known home lengths, then home, the kinematics will be
>fairly good.
>
>5. To change the kinematic parameters (not just the Cartesian home
>position), you need to edit emc/src/emcmot/genhexkins.h. I made some
>changes to this so that you just enter four parameters and the rest are
>computed at compile time. I've appended that file to this message, and
>it's also the one on SourceForge. There are a bunch of different values
>for the vertex coordinates, selected with an ifdef at the top. The one I
>added was #ifdef GEN_TETRA, and the parameters are at the end of the
>file.
>
>The ones you would be concerned with are:
>
>#define BASE_LENGTH 40.0
>#define BASE_CORNER 1.75
>#define PLATFORM_LENGTH 18.9
>#define PLATFORM_CORNER 0.5
>
>The geometry is assumed to be such that the cables attach at hooks to
>the base (surrounding frame) and go through pulleys on the platform. The
>base and platform are roughly triangular, but the cables don't meet at
>points but are offset a bit due to physical limits. The base/platform
>looks like this:
>
>            ---
>           /   \
>          /     \
>         /       \
>        \________/
>
>where the PLATFORM_LENGTH or BASE_LENGTH is the length of the long sides
>of the above figure (not the full side of the imaginary whole triangle),
>and the PLATFORM_CORNER or BASE_CORNER is the length of the short sides
>that cut off the vertices.
>
>
>------------genhexkins.h------------
>/*
>  genhex.h
>  Written by: R. Brian Register
>  1999
>
>  This is the header file to accompany genhexkins.c.  This header file
>is used
>  to configure genhexkins.c to solve the kinematics for a particular
>Stewart
>  Platform configuration.
>
>  Defined are the parameters necessary to configure the functions to
>solve
>  several different Stewart Platform configurations.  To choose a
>particular
>  configuration #define the configuration you are interested in and
>  comment out any others.
>
>  Modification history:
>
>  25-Apr-2000  FMP took out STRUT_OFFSET values, which weren't used;
>added
>  OCTA_TETRA values based on MINI_TETRA but using the cool octahedral
>frame.
>  */
>
>#define GEN_TETRA
>
>#define NUM_STRUTS 6
>
>#ifdef INGERSOLL_HEXAPOD
>
>/* Define position of base strut ends in base (world) coordinates for */
>/* Ingersoll Hexapod */
>#define BASE_0_X  1.7580
>#define BASE_1_X  1.6021
>#define BASE_2_X -1.7580
>#define BASE_3_X -1.6021
>#define BASE_4_X  0.0
>#define BASE_5_X  0.0
>
>#define BASE_0_Y  2.8
>#define BASE_1_Y  3.07
>#define BASE_2_Y  2.8
>#define BASE_3_Y  3.07
>#define BASE_4_Y  2.8
>#define BASE_5_Y  3.07
>
>#define BASE_0_Z -1.015
>#define BASE_1_Z -0.925
>#define BASE_2_Z -1.015
>#define BASE_3_Z -0.925
>#define BASE_4_Z  2.03
>#define BASE_5_Z  1.85
>
>/* Define position of platform strut end in platform coordinate system
>*/
>/* for Ingersoll Hexapod  */
>#define PLATFORM_0_X  0.225
>#define PLATFORM_1_X  0.1125
>#define PLATFORM_2_X -0.1125
>#define PLATFORM_3_X -0.225
>#define PLATFORM_4_X -0.1125
>#define PLATFORM_5_X  0.1125
>
>#define PLATFORM_0_Y  0.0
>#define PLATFORM_1_Y  0.1949
>#define PLATFORM_2_Y  0.1949
>#define PLATFORM_3_Y  0.0
>#define PLATFORM_4_Y -0.1949
>#define PLATFORM_5_Y -0.1949
>
>#define PLATFORM_0_Z -0.228
>#define PLATFORM_1_Z -0.228
>#define PLATFORM_2_Z -0.228
>#define PLATFORM_3_Z -0.228
>#define PLATFORM_4_Z -0.228
>#define PLATFORM_5_Z -0.228
>
>#endif
>
>#ifdef UF_HEXAPOD
>
>/* Define position of base strut ends in base (world) coordinates for */
>/* UF Hexapod */
>#define BASE_0_X -16.00
>#define BASE_1_X -10.00
>#define BASE_2_X  16.00
>#define BASE_3_X  13.00
>#define BASE_4_X   0.00
>#define BASE_5_X  -3.00
>
>#define BASE_0_Y  -9.24
>#define BASE_1_Y  -9.24
>#define BASE_2_Y  -9.24
>#define BASE_3_Y  -4.04
>#define BASE_4_Y  18.48
>#define BASE_5_Y  13.28
>
>#define BASE_0_Z  18.00
>#define BASE_1_Z  18.00
>#define BASE_2_Z  18.00
>#define BASE_3_Z  18.00
>#define BASE_4_Z  18.00
>#define BASE_5_Z  18.00
>
>/* Define position of platform strut end in platform coordinate system
>*/
>/* for UF Hexapod  */
>#define PLATFORM_0_X  -9.00
>#define PLATFORM_1_X   0.00
>#define PLATFORM_2_X   3.00
>#define PLATFORM_3_X  12.00
>#define PLATFORM_4_X   6.00
>#define PLATFORM_5_X -12.00
>
>#define PLATFORM_0_Y   1.73
>#define PLATFORM_1_Y -13.86
>#define PLATFORM_2_Y  -8.66
>#define PLATFORM_3_Y   6.93
>#define PLATFORM_4_Y   6.93
>#define PLATFORM_5_Y   6.93
>
>#define PLATFORM_0_Z   0.00
>#define PLATFORM_1_Z   0.00
>#define PLATFORM_2_Z   0.00
>#define PLATFORM_3_Z   0.00
>#define PLATFORM_4_Z   0.00
>#define PLATFORM_5_Z   0.00
>
>#endif
>
>#ifdef MINI_TETRA
>
>/* Define position of base strut ends in base (world) coordinates for */
>/* mini tetra */
>#define BASE_0_X -22.950
>#define BASE_0_Y 13.250
>
>#define BASE_1_X 22.950
>#define BASE_1_Y 13.250
>
>#define BASE_2_X 22.950
>#define BASE_2_Y 13.250
>
>#define BASE_3_X 0
>#define BASE_3_Y -26.5
>
>#define BASE_4_X 0
>#define BASE_4_Y -26.5
>
>#define BASE_5_X -22.950
>#define BASE_5_Y 13.250
>
>#define BASE_0_Z  0
>#define BASE_1_Z  0
>#define BASE_2_Z  0
>#define BASE_3_Z  0
>#define BASE_4_Z  0
>#define BASE_5_Z  0
>
>/* Define position of platform strut end in platform coordinate system
>*/
>/* for mini tetra */
>#define PLATFORM_0_X -1
>#define PLATFORM_0_Y 11.5
>
>#define PLATFORM_1_X 1
>#define PLATFORM_1_Y 11.5
>
>#define PLATFORM_2_X 10.459
>#define PLATFORM_2_Y -4.884
>
>#define PLATFORM_3_X 9.459
>#define PLATFORM_3_Y -6.616
>
>#define PLATFORM_4_X -9.459
>#define PLATFORM_4_Y -6.616
>
>#define PLATFORM_5_X -10.459
>#define PLATFORM_5_Y -4.884
>
>#define PLATFORM_0_Z  0
>#define PLATFORM_1_Z  0
>#define PLATFORM_2_Z  0
>#define PLATFORM_3_Z  0
>#define PLATFORM_4_Z  0
>#define PLATFORM_5_Z  0
>
>#endif
>
>#ifdef OCTA_TETRA
>
>/* Define position of base strut ends in base (world) coordinates for
>   minitetra with octahedral outside frame. Let A be side length of
>   base triangle. Here A = 39 inches. */
>#define BASE_0_X -19.5 /* -A/2 */
>#define BASE_0_Y 11.258 /* A cos 30 * 1/3 */
>
>#define BASE_1_X 19.5 /* A/2 */
>#define BASE_1_Y 11.258 /* A cos 30 * 1/3 */
>
>#define BASE_2_X 19.5 /* same as BASE_1_X */
>#define BASE_2_Y 11.258 /* same as BASE_1_Y */
>
>#define BASE_3_X 0 /* 0 */
>#define BASE_3_Y -22.517 /* -A cos 30 * 2/3 */
>
>#define BASE_4_X 0 /* same as BASE_3_X */
>#define BASE_4_Y -22.517 /* same as BASE_3_Y */
>
>#define BASE_5_X -19.5 /* same as BASE_0_X */
>#define BASE_5_Y 11.258 /* same as BASE_0_Y */
>
>#define BASE_0_Z  0 /* all 0 */
>#define BASE_1_Z  0
>#define BASE_2_Z  0
>#define BASE_3_Z  0
>#define BASE_4_Z  0
>#define BASE_5_Z  0
>
>/* Define position of platform strut end in platform coordinate system
>   for minitetra with octahedral outside frame */
>#define PLATFORM_0_X -1
>#define PLATFORM_0_Y 11.5
>
>#define PLATFORM_1_X 1
>#define PLATFORM_1_Y 11.5
>
>#define PLATFORM_2_X 10.459
>#define PLATFORM_2_Y -4.884
>
>#define PLATFORM_3_X 9.459
>#define PLATFORM_3_Y -6.616
>
>#define PLATFORM_4_X -9.459
>#define PLATFORM_4_Y -6.616
>
>#define PLATFORM_5_X -10.459
>#define PLATFORM_5_Y -4.884
>
>#define PLATFORM_0_Z  0
>#define PLATFORM_1_Z  0
>#define PLATFORM_2_Z  0
>#define PLATFORM_3_Z  0
>#define PLATFORM_4_Z  0
>#define PLATFORM_5_Z  0
>
>#endif
>
>#ifdef GEN_TETRA
>
>/*
>  GEN_TETRA uses 4 parameters for the side and corner lengths of the
>  base and platform. Set these and recompile, and you don't have to
>  figure out all the vertex coordinates yourself.
>*/
>
>#define BASE_LENGTH 40.0
>#define BASE_CORNER 1.75
>#define PLATFORM_LENGTH 18.9
>#define PLATFORM_CORNER 0.5
>#define Q 0.2886751346 /* 1/3 cos 30 */
>
>#define BASE_0_X (0.5 * BASE_CORNER)
>#define BASE_0_Y (Q * (2.0 * BASE_LENGTH + BASE_CORNER))
>
>#define BASE_1_X (0.5 * (BASE_LENGTH + BASE_CORNER))
>#define BASE_1_Y (Q * (BASE_CORNER - BASE_LENGTH))
>
>#define BASE_2_X (0.5 * BASE_LENGTH)
>#define BASE_2_Y (-Q * (BASE_LENGTH + 2.0 * BASE_CORNER))
>
>#define BASE_3_X -BASE_2_X
>#define BASE_3_Y BASE_2_Y
>
>#define BASE_4_X -BASE_1_X
>#define BASE_4_Y BASE_1_Y
>
>#define BASE_5_X -BASE_0_X
>#define BASE_5_Y BASE_0_Y
>
>#define BASE_0_Z 0 /* all 0 */
>#define BASE_1_Z 0
>#define BASE_2_Z 0
>#define BASE_3_Z 0
>#define BASE_4_Z 0
>#define BASE_5_Z 0
>
>/* Define position of platform strut end in platform coordinate system
>   for minitetra with octahedral outside frame */
>





Date Index | Thread Index | Back to archive index | Back to Mailing List Page

Problems or questions? Contact