Вы находитесь на странице: 1из 5

Configuration Strings

Ever notice those funny NUT or FUT things within your FANUC robot's
positions or position registers? Those tell the robot which solution to use to
reach the same position and orientation. We didn't discuss orientation
previously, and with a two-axis robot, there would be only one solution if we
included orientation in the requirement. However, with a six-axis robot, there
are often multiple solutions that reach both the required position AND
orientation.

Flip vs. No-Flip


Let's take your standard R-2000iB/165F, a big six-axis robot and drive it to
this position:
1
2

X: 1500.000mm Y:
0.000mm Z: 360.000mm
W: 135.000deg P: -45.000deg R:
0.000deg

For the configuration "NUT 000", the joint angles are:


1
2

J1:
J4:

7.962deg J2: -5.284deg J3: -36.250deg


77.661deg J5: -51.975deg J6: -79.273deg

Let's try and change the configuration to "FUT 000". (By the way, the F and
N stand for Flip and No-Flip, respectively.) The joint angles are now:
1
2

J1:
7.962deg J2: -5.284deg J3: -36.250deg
J4: -102.339deg J5: 51.975deg J6: 100.727deg

What changed? We "flipped" the sign on J5, which required J4 and J6 to


move by -180 and +180 degrees respectively to achieve the same position
and orientation.
Let's quickly ask ourselves which is the better orientation? Without knowing
anything about where we came from, where we are going, or any external

limitations, let's just consider axis limits. The R-2000iB/165F has limits of
+/- 360deg, +/- 125deg and +/- 360deg on J4, J5 and J6 respectively. J5 has
consumed the same amount of its usable rotation, just in the other direction,
but we see that both J4 and J6 are now ~20deg closer to their limits than they
were previously. They still have plenty of room, but you can see where other
positions could put these axes dangerously close to their limits.

Up vs. Down
Let's try a new position with "NUT 000":
1
2

X: 1914.130mm Y:
0.000mm Z: 1908.514mm
W:
0.000deg P: -64.179deg R: 180.000deg

The joint values are:


1
2

J1:
J4:

0.000deg J2:
0.000deg J5:

16.476deg J3: 25.821deg


0.000deg J6: 0.000deg

What happens if we change the configuration string to "NDT 000" (U and D


stand for Up and Down, respectively.)
1
2

J1:
J4:

0.000deg J2: 57.912deg J3: 59.851deg


0.000deg J5: -34.030deg J6: 0.000deg

The change to the joint angles isn't as easy to understand, but you can see that
J2 and J3 have both increased. When J2 is increased, think of bending at your
waist. When J3 is increased, think of arching your spine backwards. Keeping
your head in the same position, the arch in your mid-back is now "Down" or
concave where before it would be "Up" or convex. In either case, your neck
will also have to compensate for the shift to maintain position and orientation
just like the robot's ~34deg change in J5.

Front vs. Back

I'm going to skip this one for now since it only seem to factor in when the
robot is on an RTU (additional axis). (Let me know if I'm wrong.)

Turn Counts
What about those numbers at the end? When an axis has more than +/180deg, we need a way to tell the robot part of its joint-space to use when
moving to a cartestian position. For any given joint, turn count 0 will be the
angles between +/- 180 degrees. Turn count 1 would be 180 to 540, 2 for 540
to 900, etc. while Turn count -1 would be for -180 to -540, -2 for -540 to
-900, etc.
The first number is for J1, the second for J4 and the third for J6. Our R2000iB/165F will only see 0 for the first number, but since the axis limits on
J4 and J6 are +/- 360, we can see both -1 and 1 turn counts. Let's look at an
example. At the robot's zero, the joint angles are:
1
2

J1:
J4:

0.000deg J2:
0.000deg J5:

0.000deg J3:
0.000deg J6:

0.000deg
0.000deg

This translates to the following cartesian position with the UTOOL at the
robot faceplate with configuration NUT 000.
1
2

X: 1862.000mm Y:
0.000mm Z: 1300.000mm
W: 180.000deg P: -90.000deg R:
0.000deg

The R-2000iB/165F could not reach this position with configuration NUT
100, but if we expanded the J1 joint limits, we could. The joint positions
would then be:
1
2

J1: 360.000deg J2:


0.000deg J3: 0.000deg
J4: 0.000deg J5:
0.000deg J6: 0.000deg

What about NUT 010? That puts us right at J4's positive axis limit:

1
2

J1: 0.000deg J2:


0.000deg J3: 0.000deg
J4: 360.000deg J5:
0.000deg J6: 0.000deg

NUT 0-10? We're now at the negative side of J4's axis limit:
1
2

J1: 0.000deg J2:


0.000deg J3: 0.000deg
J4: -360.000deg J5:
0.000deg J6: 0.000deg

Guess what happens when we change the configuration string to NUT 001.
1
2

J1:
J4:

0.000deg J2:
0.000deg J5:

0.000deg J3: 0.000deg


0.000deg J6: 360.000deg

Hopefully you figured out that you can just add and subtract 360 degrees to
get from one turn count to the next.
This all seems pretty useless when using a position like the robot's zero
position, but let's go back to our original position:
1
2

X: 1500.000mm Y:
0.000mm Z: 360.000mm
W: 135.000deg P: -45.000deg R:
0.000deg

3
4
5

J1:
J4:

7.962deg J2: -5.284deg J3: -36.250deg


77.661deg J5: -51.975deg J6: -79.273deg

You can quickly see that we could use a -1 turn count on J4 and a 1 turn
count on J6 to reach this position in a different way. (1 and -1 would put J4
and J6 out of their axis limits, respectively.)

Takeaways
Now that you know what the configuration string and turn counts represent,
you can be a little more wary of them while programming. If you see a
position is very close to an axis limit, maybe try an alternate turn count and
see if it works better. If you see the robot doing a very large rotation from one

point to the next, maybe you're just on the other side of a FUT vs. NUT
relationship or simply need to specify an alternate turn count on J6.
Whatever the case, try to keep your robot happy and keep its joints neutral.
You can save a lot of cycle time by rotating 10 degrees instead of 350.

Вам также может понравиться