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 */
- References:
- minitetra?
- From: "Till Franitza" <xfa-at-isw.uni-stuttgart.de>
Date Index |
Thread Index |
Back to archive index |
Back to Mailing List Page
Problems or questions? Contact