Robot Device Modules

Show the Device Modules Menu

 

Backlash and Linear Compensation

Several Adept V+ Device Modules support backlash compensation and/ linear compensation capability, including the Enhanced XYZ-theta (EXY) and Enhanced Gantry Robot (EGN) modules. The Enhanced PUMA Robot (EPU) module supports linear compensation only. These features help to provide more precise motions by compensating in software for mechanical irregularities in the mechanism.

As soon as you enable backlash and/or linear compensation, the operation of the WHERE and HERE commands, instructions, and functions change.  Normally, these operations return the instantaneous location of the robot as indicated by the encoder values.  When compensation is enabled, these operations return the commanded location rather than the actual location.

In most cases, Backlash and/or Linear compensation are enabled or disabled by a single bit of the Robot Option Word, and consequently both are either on or off.  To enable compensation, use the SPEC program to edit the robot option word.  The robot option word is set in the “Change robot options and motor configuration” menu. In most modules, bit 2 is used to control these features. See the AdeptMotion VME User’s Guide for details of how to edit the Robot Option Word. To use compensation on some axes but not others, enable the appropriate bit of the Robot Option Word, but leave the linear and/or backlash compensation values at the default (null) values for certain axes, as required.

In some modules, you may be able to specify (using a separate bit) if the Linearity Compensation is to be mapped and applied in “joint values” (mm or degrees) or “motor/encoder values”. If your robot has motor/joint inter-coupling, you may find it easier to measure the actual non-linearity in the physical joint angles, rather than at the encoder. You must also consider the origin or cause of the non-linearity to determine which mode is appropriate. After making your selection (either joint-space or motor-space), be sure to use the correct scaling factors. If you change this bit, you will need to redefine the linear compensation table for affected joints/motors, taking into account the encoder scaling factor.

If your module supports backlash compensation, it is usually available for all axes. If your module supports linearity compensation, it may only be available for certain axes. See the description of the robot option word in the chapter for your device module for details of options supported.

Backlash Compensation

Backlash compensation allows users to specify a  backlash distance  in software.  V+ will automatically add the backlash distance to each move.  A typical use for this feature is to compensate for backlash in gear driven mechanisms.

Backlash compensation is added to all MOTOR commands and is in units of motor (encoder) counts, not joint angles.  This compensation operates at the motor level, since backlash compensation is not meaningful if it is applied before the joint coupling is taken into account.

For each motor, there are two compensation values.  One or the other of the values is added to the commanded position of each motor during each V+ trajectory generator cycle (the default cycle is 16 msec).  The first value is added if the motor last moved in a positive direction (+ change in encoder value).  Otherwise, the second value is added if the motor last moved in the negative direction (– change in encoder value).

Typically, either the positive or negative backlash number should be set to zero.  The  other number should be set to the actual amount of backlash (in units of encoder counts).  The configuration of these numbers depends on the last direction of motion during calibration (see Figure 1).  Since there is no backlash compensation during calibration, you must be careful to correctly set the backlash when calibration is complete.

Figure 1  Home Position or Park Position

The last calibration move is usually to a park position.  However, if  the park position is the same as the home position, then the last move depends on the homing configuration.  Determine the direction of the last move by examining the calibration parameters listed under the "Edit motor calibration sequence" menu, or by watching the motor calibrate.

The two backlash values for each motor are entered using the SPEC program menu option “Edit  motor amp/encoder specs”.  You must first  measure the amount of backlash present in the system.  Using the encoder scale factor for the motor, convert the backlash into units of encoder counts:

backlash = (backlash in mm)  *  (encoder counts/mm)

If the last motor move during calibration is in the positive direction, then set:

Positive backlash:         0

Negative backlash:     –backlash       

If the last motor move during calibration was in the negative direction, then set:

Positive backlash:       backlash

Negative backlash:     0

The following is one method of measuring the backlash value. 

  1. Under program control, move the axis to an initial value and record this position.  This ensures that all of the backlash is removed in that direction.

  2. Position a dial indicator or other suitable measurement device and adjust it for a “zero” reading.

  3. Under program control, command a move in the same direction as before at a slow speed; a distance of 50 mm is sufficient.

  4. Under program control, command a move back to the initial position that you had recorded.  The absolute value of the dial indicator reading is the amount of backlash in mm.

  5. You must convert this value to encoder counts as previously shown, before entering it into the SPEC program.

Linear Compensation

With linear compensation, it is possible to map certain joints of the robot to correct for linearity errors. (Consult the documentation for your device module to see which joints, if any, support compensation.) You must map each joint separately using, for example, a laser interferometer to determine precise positions equidistant along the joint. An array of error corrections is then stored in a linear-compensation table. There is one linear-compensation table for each joint. (For split-axis robots, there is a separate table for each of the pair of split-axis motors.). During a robot motion, regardless whether commanded by program control or the Manual Control Pendant (MCP), V+ uses the error correction information to correct each point on the motion path. These corrections are applied by the V+ trajectory generator. (The default trajectory generation interval is 16ms.)

In some modules, you may be able to specify (using a separate bit of the robot option word) if the Linearity Compensation is to be mapped and applied in “joint values” (mm or degrees) or “motor values” (encoder counts). This choice is available on the wrist joints of the Gantry (EGN) device module. The EPU module uses motor values (encoder counts) only. Other modules use joint values (mm or degrees) only. Consult the documentation for your device module to see whether it supports compensation in motor or joint values (or both).

Each linear-compensation table contains a series of correction values that are specified at even intervals within a range of joint (or motor) travel. For example, the first correction factor in the table contains the value that must be added to the commanded position in order to accurately position the joint (or motor) at the lowest position in the corrected range of travel.  Simply put:,

correction value  =  actual (measured) position – commanded position

Likewise, the last entry in the table contains the value that must be added to the joint commanded position when the joint is commanded to the highest position in the corrected range.  All of the intermediate table values correspond to the corrections that must be added at evenly-spaced intervals between the low and the high ends of the corrected range of travel. Up to 1001 points may be entered for each joint.  The first and last correction values must be zero if the joint or motor can move up to, or beyond the corrected range of travel.  If these values are not zero there will be a jerk when entering or exiting the corrected range, or when nearing the end of the corrected range.  In general, we advise that you always ensure that the first and last values of the correction table are zero.

Warning
Some modules allow you to change the compensation mode for wrist joints from joint to encoder values. Note that the encoder scaling factor is usually many hundred or thousand encoder counts per degree: it is therefore essential that if you change the wrist compensation mode bit that you also change the corresponding values in the linear correction table.

Contents of the linear-compensation table

The exact contents of the linear-compensation table are defined in Table 1.  Each value is stored as a floating-point number, specifiable to 7.5 decimal digits of significance. If the compensation mode is in joint values, the values are in units of millimeters or degrees. If the compensation mode is in motor values, the values are in units of encoder counts.

Table 1.  Linear Compensation Table

Index

Description

1

Lowest joint position (in millimeters or degrees) or motor position (in encoder counts) for which correction data is provided.  When the joint or motor is positioned below this value, no correction is added.

2

Highest joint or motor position (in millimeters) for which correction data is provided. When the joint or motor is positioned above this value, no correction is added.  If this value is lower than the value stored at index 1, the compensation for this axis is disabled.

3

Change in joint or motor position (in millimeters) between subsequent correction values stored in the table.

4

Reserved for future use.  Should be set to 0

5

Reserved for future use.  Should be set to 0

6

Reserved for future use.  Should be set to 0

7

Reserved for future use.  Should be set to 0

8

Reserved for future use.  Should be set to 0.

9

Reserved for future use.  Should be set to 0.

10

First joint (or motor) correction value.  This is the joint (or motor) offset that is added when the joint (or motor) is commanded to be positioned at the location specified by the value contained at index 1.

10+1

Second joint (or motor) correction value.  This is the joint (or motor) offset that is added when the joint (or motor) is commanded to be positioned at the location specified by the sum of the values contained at indexes 1 and 3.

10+1000

Last possible value that can contain correction data.  If fewer than 1001 values are needed to represent the corrected range of travel, this value and all previous unnecessary values are ignored.

 

Determining and entering the linear-compensation values

In order to initialize the linear-compensation tables, the correction values must be experimentally determined.  Use a laser interferometer, or other accurate position measurement device to determine correction values an even increments along a range of joint (or motor) travel.  The correction values can then be manually entered into the SPEC program or can be read from a disk file.

To enter the data manually, use the "Linear compensation" menu option in the "Motor/Amplifier Specifications" menu.  You will be prompted to enter all the data from Table 1 above.  Table 2 is a another version of this table located at the end of this appendix — you can photocopy Table 2 and fill it out as you set up your system.

The values can also be read in from a disk file using the SPEC program menu option “Load robot specifications from a disk file.”  The file must have the following format:

The first line in the file must be:

.HEADER Robot Specification Data            Version 1.3

(There must be exactly 29 spaces between "Data" and "Version".)

Next, the robot model number, robot serial number (not the controller serial number), robot option word, and the device module number must be specified.

The example format given here is for V+ 11.3. Although the .HEADER record always shows “Version 1.3”, the exact format of the “Robot” record may vary in other V+ versions. If you get a warning message when you load your file, save an ASCII copy of all your robot parameters to a disk file, look at it using the FLIST comand, and use that as your model for the correct format.

In this example the robot model is “100”, the robot serial number is “42”, the robot option word is “2”, and the device module number is “19”:

Robot 1: 100-42  2-0  19

And, the title of the module, for example:

Title: "Enhanced 5/6 Axis Gantry Robot"

The linear compensation values are listed in the data section of the file.  Each motor has its own data number:

.DATA_SECTION

.DATA 301  ;Motor 1 linear compensation

.DATA 302  ;Motor 2 linear compensation

.DATA 303  ;Motor 3 linear compensation

.DATA 304  ;Motor 4 linear compensation

.DATA 305  ;Motor 5 linear compensation

.DATA 306  ;Motor 6 linear compensation

.DATA 307  ;Motor 7 linear compensation

Within the data section for each motor, the compensation table values must be entered in the order they are listed Table 1.

Example of data file (corrections in joint values)

In the example data file below is for the EGN module, compensation values were entered for motor 1 and 2 only. Compensation for those motors of the EGN module are specified using joint values, in this case in mm (the EGN module is for gantry-style robots). For both joints, the range of travel was –100 mm to +100 mm. A compensation value was measured every 2 mm (101 values for each joint). Remember that index values 4, 5, 6, 7, 8, and 9 are always zero.

.HEADER Robot Specification Data                 Version 1.3

Robot 1: 100-42 2 19

Title: "Enhanced 5/6 Axis Gantry Robot"

.DATA_SECTION

.DATA 301 ;Motor 1 linear compensation

-100, 100, 2, 0, 0, 0, 0, 0, 0,

0.020,0.049,0.029,0.033,0.022,0.037,0.019,0.043,0.012,0.018,

0.030,0.008,0.011,0.016,0.005,0.017,0.002,0.015,0.033,0.015,

0.034,0.005,0.010,0.029,0.045,0.033,0.011,0.044,0.037,0.016,

0.030,0.006,0.022,0.021,0.026,0.027,0.027,0.050,0.037,0.007,

0.011,0.049,0.006,0.018,0.046,0.019,0.012,0.048,0.011,0.042,

0.024,0.014,0.046,0.025,0.010,0.027,0.020,0.048,0.015,0.032,

0.014,0.033,0.043,0.049,0.010,0.017,0.009,0.034,0.048,0.046,

0.050,0.001,0.047,0.025,0.050,0.002,0.030,0.031,0.025,0.026,

0.023,0.047,0.024,0.009,0.004,0.043,0.041,0.002,0.026,0.036,

0.035,0.003,0.047,0.049,0.024,0.010,0.018,0.044,0.027,0.022,

0.046

.DATA 302 ;Motor 2 linear compensation

-100, 100, 2, 0, 0, 0, 0, 0, 0,

0.006,0.030,0.016,0.007,0.000,0.009,0.026,0.026,0.034,0.017,

0.043,0.024,0.034,0.034,0.019,0.020,0.039,0.026,0.043,0.050,

0.000,0.020,0.023,0.046,0.045,0.046,0.030,0.034,0.005,0.028,

0.008,0.033,0.009,0.000,0.045,0.027,0.030,0.032,0.009,0.045,

0.005,0.013,0.040,0.001,0.008,0.001,0.010,0.005,0.043,0.038,

0.045,0.025,0.046,0.019,0.011,0.023,0.049,0.033,0.002,0.043,

0.005,0.010,0.008,0.019,0.034,0.035,0.030,0.043,0.019,0.018,

0.017,0.046,0.024,0.034,0.010,0.039,0.023,0.024,0.049,0.019,

0.035,0.001,0.050,0.040,0.029,0.029,0.032,0.039,0.042,0.008,

0.018,0.030,0.049,0.023,0.040,0.014,0.011,0.007,0.014,0.040,

0.022

.END

 

Example of data file (corrections in motor values)

In the example data file below, for the EPU module, compensation values were entered for motors 1 and 2 only. Compensation for the EPU module is specified using encoder values. For both motors, the range of travel was –50000 encoder counts to +50000 encoder counts. A compensation value was measured every 1000 encoder counts (101 values for each motor).  Remember that index values 4, 5, 6, 7, 8, and 9 are always zero.

.HEADER Robot Specification Data                 Version 1.3

Robot 1: 100-42 2-0 28

Title: "Enhanced 5/6-Axis PUMA Robot Module."

.DATA_SECTION

.DATA  301  ;Motor 1 linear compensation

-50000, 50000, 1000, , , , , , ,

20, 49, 29, 33, 22, 37, 19, 43, 12, 18,

30, 8, 11, 16, 5, 17, 2, 15, 33, 15,

34, 5, 10, 29, 45, 33, 11, 44, 37, 16,

30, 6, 22, 21, 26, 27, 27, 50, 37, 7,

11, 49, 6, 18, 46, 19, 12, 48, 11, 42,

24, 14, 46, 25, 10, 27, 20, 48, 15, 32,

14, 33, 43, 49, 10, 17, 9, 34, 48, 46,

50, 1, 47, 25, 50, 2, 30, 31, 25, 26,

23, 47, 24, 9, 4, 43, 41, 2, 26, 36,

35, 3, 47, 49, 24, 10, 18, 44, 27, 22,

46

.DATA 302 ;Motor 2 linear compensation

-50000, 50000, 1000, , , , , , ,

6, 30, 16, 7, 0, 9, 26, 26, 34, 17,

43, 24, 34, 34, 19, 20, 39, 26, 43, 50,

0, 20, 23, 46, 45, 46, 30, 34, 5, 28,

8, 33, 9, 0, 45, 27, 30, 32, 9, 45,

5, 13, 40, 1, 8, 1, 10, 5, 43, 38,

45, 25, 46, 19, 11, 23, 49, 33, 2, 43,

5, 10, 8, 19, 34, 35, 30, 43, 19, 18,

17, 46, 24, 34, 10, 39, 23, 24, 49, 19,

35, 1, 50, 40, 29, 29, 32, 39, 42, 8,

18, 30, 49, 23, 40, 14, 11, 7, 14, 40,

22

.END

 
Table 2.  User’s Linear Compensation Table, Page 1

Index

Description *

Your Value

1

Lowest joint (or motor) position

2

Highest joint (or motor) position

 

3

Change in joint (or motor) position

4

Reserved for future use.

Should be set to 0

5

Reserved for future use. 

Should be set to 0

6

Reserved for future use.

Should be set to 0

7

Reserved for future use.

Should be set to 0

8

Reserved for future use.

Should be set to 0

9

Reserved for future use.

Should be set to 0

Record joint correction values in the rest of this table, up to index 1010

10

First joint correction value

 

11

Next joint correction value

 

12

Next joint correction value

 

13

"

 

14

"

 

15

"

 

Go to page 2 of this table to continue recording correction values.

*See Table 1 for expanded descriptions.

Table 2.  User’s Linear Compensation Table, Page 2

Index

Description 

Your Value

 

 

 

Record joint correction values in the rest of this table, up to index 1010

 

 

 

 

 

 

 

 

 

 

 

 

Make additional copies of this table to continue recording correction values.

 

 

Last modified on: 01/23/2006
Copyright © 2006 by Adept Technology, Inc.
All rights reserved.