UR10 CB3: Troubleshooting a Random 10 mm Z Offset Guide

Jason IP7 min read
Other ManufacturerRoboticsTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

A repeat move that alternates between the commanded position and exactly 10 mm above it is not a UR10 repeatability failure when a programmed 10 mm keep-out move remains active. In this installation, a safeguard intended to maintain TCP clearance was disabled incorrectly and became coupled to an unrelated timer, so it was applied intermittently. Correct the safeguard logic, then verify commanded joints, actual joints, flange position, and the independent distance measurement on every return cycle.

Recognize the Symptom Signature

The test moved a UR10 CB3 from position 1 to positions 2 and 3, returning to position 1 after each move. At every arrival, approximately 60 to 90 actual motor-joint samples were averaged and passed through forward kinematics to calculate the tool-flange X, Y, and Z coordinates.

Observation Diagnostic meaning
X repeated within 0.1 mm The error was not a general loss of pose control.
Y was identical The displacement was constrained to the Z direction.
Z alternated between correct and 10 mm high A fixed programmed offset was more likely than random mechanical variation.
Laser distance measurement also changed by 10 mm The displacement was physical, not solely a forward-kinematics or data-processing error.
Elbow and wrist 1 differed in the error state The actual robot configuration corresponded to the displaced Cartesian pose.
The error appeared irregularly, including three consecutive occurrences An execution condition changed between cycles.

The nominal joint pose was approximately -90, -90, -90, -90, +90, and 0 degrees, although the program operated in radians. In an error cycle, the expected elbow and wrist 1 values were approximately -1.5709 radians. The elbow read approximately -1.5532 and wrist 1 approximately -1.5883. Those differences are about +0.0177 and -0.0174 radians, or roughly +1.01 and -1.00 degrees. The opposing changes explain how the arm could preserve X and Y closely while moving the flange by 10 mm in Z.

How the 10 mm Offset Produced the Joint Error

A robot controller solves a commanded Cartesian displacement by coordinating multiple joints. A 10 mm TCP clearance operation therefore does not require every joint to be wrong or displaced in the same direction. Around this pose, coordinated changes in the elbow and wrist 1 joints generated the observed Z displacement while leaving X and Y nearly unchanged.

The fixed magnitude is the decisive clue. Mechanical backlash, compliance, or measurement noise normally varies with direction, load, configuration, temperature, or force. A result that switches between two distinct levels separated by the exact keep-out distance points to program flow selecting between two targets: the original target and a target modified by the safeguard.

The robot was configured for a 6 kg load with offsets in robot Y and Z, and moves used 250 mm/s speed and 1.25 m/s2 acceleration. Those settings belong in a complete test record, but changing them would not remove a deterministic 10 mm offset inserted by application logic. The root cause was the conditional path controlling the keep-out move, not the motion performance of the UR10 CB3.

Run a Diagnostic Sequence That Separates Motion from Logic

  1. Classify the error shape. Plot or tabulate each individual return to position 1. Do not begin with only the average of all trials. Two clusters separated by exactly 10 mm indicate two executed target states.
  2. Confirm physical displacement. Compare the kinematic result with an independent measurement. Here, the laser distance meter reproduced the 10 mm Z difference and ruled out a calculation-only problem.
  3. Compare commanded and actual joints per cycle. Record the transmitted joint target and the actual values read through UR Script. Timestamp both records so they can be aligned with the program branch active during that move.
  4. Search for the exact displacement in application logic. Inspect keep-out, collision-clearance, approach, retreat, tool-offset, and target-adjustment code. A programmed value equal to the measured error deserves priority over controller tuning or mechanical adjustment.
  5. Trace every condition that enables the offset. Include timers, state flags, retained values, asynchronous communications, and branches inherited from the larger program. In this case, the safeguard decision was unintentionally coupled to an unrelated timer.
  6. Reduce the test to one target path. Temporarily isolate the position-1 move from the larger sequence while preserving the same payload, joint target, speed, acceleration, and measurement method. Log whether the safeguard branch executed on every trial.
  7. Inspect move completion behavior. Check for a blended move followed immediately by sleep() or a wait operation. A blend can transition toward the next path segment before reaching the programmed point, so a pause placed after that move can expose an intermediate pose rather than the exact target.

Correct the Safeguard Without Hiding the Failure

Disable or bypass the 10 mm keep-out operation at the point where its target modification is applied. Do not merely change an upstream flag if another timer or state variable can still select the modified target.

  1. Identify the single Boolean decision that selects the normal target or the clearance-adjusted target.
  2. Remove the unrelated timer from that decision path.
  3. When the safeguard is disabled, route execution directly to the unmodified target.
  4. Log the selected branch and resulting target for each move during validation.
  5. Restore the safeguard only after its enable condition has been tested independently of the repeatability sequence.

Avoid compensating for the symptom by adding -10 mm to Z, altering the joint targets, changing payload data, or recalibrating the robot. Such changes can make one branch appear correct while causing the already-correct branch to move 10 mm too far.

Verify the Repair at Joint and Cartesian Levels

Repeat the original position-1-to-position-2 and position-1-to-position-3 sequence after correcting the logic. Preserve the 6 kg load configuration, stated offsets, 250 mm/s speed, and 1.25 m/s2 acceleration so the result remains comparable.

  1. Capture the commanded joint vector for each return to position 1.
  2. Record 60 to 90 actual joint samples after confirmed arrival, as in the original method.
  3. Retain both the per-sample data and the average. The average demonstrates settled position, while individual samples reveal movement or a second state.
  4. Calculate the tool-flange X, Y, and Z position from the actual joints.
  5. Record the laser distance simultaneously.
  6. Confirm that no trial forms a second Z cluster 10 mm above the target.
  7. Confirm that elbow and wrist 1 no longer alternate between the nominal and displaced joint combinations.
  8. Exercise the unrelated timer separately and verify that changing its state cannot enable the keep-out move.

The repair is proven when all four records agree: the unmodified target was selected, actual joints converged on the intended configuration, forward kinematics returned the intended flange position, and the laser measurement showed no 10 mm displacement.

Avoid Recurring Repeat-Move Test Pitfalls

Keep repeatability tests independent from production safeguards whenever practical. Larger programs often contain approach offsets, clearance moves, timers, retained state, and conditional branches that invalidate a nominally identical target. Record the final target after all transformations, not only the target originally sent over TCP/IP.

Do not let averaging erase state changes. Averaging 60 to 90 samples is useful for settled-position noise, but it cannot distinguish a good cycle from a bad cycle unless results remain grouped by arrival. Evaluate within-cycle stability and between-cycle repeatability separately.

Also distinguish point termination from path blending. A move configured with a blend radius is intended to pass through a transition region instead of stopping exactly at the point. Following that move immediately with sleep() or a wait can make the observed pose appear short of the target. For a repeatability checkpoint, use motion behavior that requires arrival at the measurement pose before sampling.

FAQ

Why does a UR10 return exactly 10 mm above the target?

Search the program for a 10 mm TCP keep-out, approach, retreat, or target-offset operation. In this case, the safeguard remained intermittently active because its enable logic was coupled to an unrelated timer.

Can elbow and wrist joint errors cause only a Z-position error?

Yes. At the tested pose, the elbow changed by about +0.0177 radians and wrist 1 by about -0.0174 radians, producing a 10 mm Z displacement while X and Y remained nearly unchanged.

How do I tell a robot repeatability problem from a program offset?

Look for discrete position clusters and compare the displacement with programmed offset values. Confirm the result using actual joint feedback, forward kinematics, branch logging, and an independent physical measurement.

Why does a blended robot move stop short before sleep or wait?

A blend permits the path to transition toward the next segment without terminating exactly at the programmed point. Use non-blended checkpoint behavior and confirm arrival before collecting repeatability samples.

Back to blog